Try rrweb

# rrweb **[The rrweb documentary (in Chinese, with English subtitles)](https://www.bilibili.com/video/BV1wL4y1B7wN?share_source=copy_web)** [![Join the chat at slack](https://img.shields.io/badge/slack-@rrweb-teal.svg?logo=slack)](https://join.slack.com/t/rrweb/shared_invite/zt-siwoc6hx-uWay3s2wyG8t5GpZVb8rWg) [![Twitter Follow](https://img.shields.io/badge/twitter-@rrweb__io-teal.svg?logo=twitter)](https://twitter.com/rrweb_io) ![total gzip size](https://img.badgesize.io/https://cdn.jsdelivr.net/npm/rrweb@latest/dist/rrweb.min.js?compression=gzip&label=total%20gzip%20size) ![recorder gzip size](https://img.badgesize.io/https://cdn.jsdelivr.net/npm/rrweb@latest/dist/record/rrweb-record.min.js?compression=gzip&label=recorder%20gzip%20size) [![](https://data.jsdelivr.com/v1/package/npm/rrweb/badge)](https://www.jsdelivr.com/package/npm/rrweb) [δΈ­ζ–‡ζ–‡ζ‘£](./README.zh_CN.md) > 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. ## Guide [**πŸ“š Read the rrweb guide here. πŸ“š**](./guide.md) [**🍳 Recipes 🍳**](./docs/recipes/index.md) ## Project Structure rrweb is mainly composed of 3 parts: - **[rrweb-snapshot](https://github.com/rrweb-io/rrweb/tree/master/packages/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](https://github.com/rrweb-io/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](https://github.com/rrweb-io/rrweb/tree/master/packages/rrweb-player/)**, is a player UI for rrweb, providing GUI-based functions like pause, fast-forward, drag and drop to play at any time. ## Roadmap - rrdom: an ad-hoc DOM for rrweb session data [#419](https://github.com/rrweb-io/rrweb/issues/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 - ... ## Internal Design - [serialization](./docs/serialization.md) - [incremental snapshot](./docs/observer.md) - [replay](./docs/replay.md) - [sandbox](./docs/sandbox.md) ## Contribute Guide 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. [Typescript handbook](https://www.typescriptlang.org/docs/handbook/declaration-files/introduction.html) 1. Fork this repository. 2. Run `yarn install` in the root to install required dependencies for all sub-packages (note: `npm install` is _not_ recommended). 3. Run `yarn dev` in the root to get auto-building for all the sub-packages whenever you modify anything. 4. Navigate to one of the sub-packages (in the `packages` folder) where you'd like to make a change. 5. Patch the code and run `yarn test` to run the tests, make sure they pass before you commit anything. 6. 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. [Using the REPL tool](./guide.md#REPL-tool) ## Core Team Members

Yuyz0112

Mark-Fenng

eoghanmurray

Juice10
## Who's using rrweb?
The first ever UX automation tool
Remote Access & Co-Browsing