This repo is a fork of rrweb. The purpose is to apply patches and bugfixes to rrweb and release Sentry-internal packages with our patches included. All credits and attribution for rrweb go to the original creators of the library and all its contributors.
From this monorepo, Sentry maintains and publishes the following NPM packages:
@sentry-internal/rrweb
(corresponds to the originalrrweb
package)@sentry-internal/rrdom
(corresponds to the originalrrdom
package)@sentry-internal/rrweb-player
(corresponds to the originalrrweb-player
package)@sentry-internal/rrweb-snapshot
(corresponds to the originalrrweb-snapshot
package)
Apart from some small fixes/changes in this fork, these are the main relevant changes compared to the upstream rrweb repository:
- Removed
hooks
related code, so passinghooks: myHooks
torecord()
will have no effect - Removed
plugins
related code, so passingplugins: myPlugins
torecord()
will have no effect - Added build flags to allow to disable iframe, canvas & shadow dom recording (in order to get bundle size optimizations)
- Remove canvas support by default - you have to pass
getCanvasManager
into therecord
method manually
Check out the original rrweb Repo
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.
- rrdom: an ad-hoc DOM for rrweb session data #419
- storage engine: do deduplication on a large number of rrweb sessions
- more end-to-end tests
- 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
yarn install
in the root to install required dependencies for all sub-packages (note:npm install
is not recommended). - Run
yarn dev
in the root to get auto-building for all the sub-packages whenever you modify anything. - Navigate to one of the sub-packages (in the
packages
folder) where you'd like to make a change. - Patch the code and run
yarn test
to 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
yarn test:update
and carefully commit the changes in test output. - Push the code and create a pull request.
Protip: You can run yarn 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.
Become a sponsor and get your logo on our README on Github with a link to your site.
Yuyz0112 |
Yun Feng |
eoghanmurray |
Juice10 open for rrweb consulting |