The rrweb documentary (in Chinese, with English subtitles)
I have joined Github Sponsors and highly appreciate your sponsorship.
rrweb refers to 'record and replay the web', which is a tool for recording and replaying users' interactions on the web.
📚 Read the rrweb guide here. 📚
📺 Presentation: Hacking the browser to digital twin your users 📺
rrweb is mainly composed of 3 parts:
- rrweb-snapshot, including both snapshot and rebuilding features. The snapshot is used to convert the DOM and its state into a serializable data structure with a unique identifier; the rebuilding feature is to rebuild the snapshot into corresponding DOM.
- rrweb, including two functions, record and replay. The record function is used to record all the mutations in the DOM; the replay is to replay the recorded mutations one by one according to the corresponding timestamp.
- rrweb-player, is a player UI for rrweb, providing GUI-based functions like pause, fast-forward, drag and drop to play at any time.
- storage engine: do deduplication on a large number of rrweb sessions
- compact mutation data in common patterns
- provide plugins via the new plugin API, including:
- XHR plugin
- fetch plugin
- GraphQL plugin
- ...
Since we want the record and replay sides to share a strongly typed data structure, rrweb is developed with typescript which provides stronger type support.
- Fork this repository.
- Run
pnpm installin the root to install required dependencies for all sub-packages. The repo pins pnpm via thepackageManagerfield and Corepack, so you should not need to install pnpm globally. - Run
pnpm build:allto build all packages and get a stable base, thenpnpm devin the root to get auto-building for all the sub-packages whenever you modify anything. - Navigate to one of the sub-packages (in the
packagesfolder) where you'd like to make a change. - Patch the code and run
pnpm testto run the tests, make sure they pass before you commit anything. Add test cases in order to avoid future regression. - If tests are failing, but the change in output is desirable, run
pnpm test:updateand carefully commit the changes in test output. - Open a pull request with a conventional-commit-style title (
feat:,fix:,perf:,chore:, etc.). The PR title is what semantic versioning uses to compute the next version on release, and is enforced by aValidate PR titleCI check.
Protip: You can run pnpm test in the root folder to run all the tests.
In addition to adding integration tests and unit tests, rrweb also provides a REPL testing tool.
See CONTRIBUTING.md for more on the development workflow.
Releases of @amplitude/rrweb* packages are driven by Lerna in fixed-versioning mode, triggered manually via the Release GitHub Actions workflow. Trigger options:
release(frommaster): bump versions via conventional commits, push commit + tag, publish to npm underlatest, create a GitHub Release.prerelease(from a short-livedalphabranch): publishX.Y.Z-alpha.Nunder thealphadist-tag. Consumers install vianpm install @amplitude/rrweb@alpha.dry-run(any branch): preview the next version without pushing or publishing.
See RELEASE.md for the full release procedure, the OIDC trusted-publishing setup, the deploy-key infrastructure that lets the workflow push back to a protected branch, rotation steps, and troubleshooting.