Justin Halsall 7d1a278688 Canvas recording: Preserve drawing buffer (#1273)
* Upgrade jest to 29 and puppeteer to 16 in rrweb

* Apply formatting changes

* Upgrade rrweb's puppeteer to v20

* Apply formatting changes

* Canvas: Reduce flickering and capturing of empty canvas elements

Turn on `preserveDrawingBuffer` by default for canvas FPS recording.
Has some negative performance implications, but really helps when capturing canvas.

* Apply formatting changes

* Include all test image snapshots in ci

* Apply formatting changes

* Allow more flexibility when capturing hover

* Apply formatting changes

* Create tiny-chairs-build.md

* Apply formatting changes

* Update hover.test.ts

* Apply formatting changes

* Document snapshotFormat jest config

* Freeze `yarn.lock` in ci for reproducible dependencies

* Apply formatting changes

* Apply formatting changes

* Revert to old style of puppeteer evaluation script notation

* Apply formatting changes

* Make test less flaky

* Apply formatting changes

* Apply formatting changes

* Make tests less flaky

* Apply formatting changes

* Make test more robust

* Apply formatting changes

* Apply formatting changes

* Add debugging code for test

* Apply formatting changes

* Also test not ignored input

* Apply formatting changes

* Apply formatting changes

* Apply formatting changes

* escape ignoreSelector

* Apply formatting changes

* Apply formatting changes
2026-04-01 12:00:00 +08:00
2026-04-01 12:00:00 +08:00
2026-04-01 12:00:00 +08:00
2026-04-01 12:00:00 +08:00
2026-04-01 12:00:00 +08:00
2026-04-01 12:00:00 +08:00
2026-04-01 12:00:00 +08:00
2026-04-01 12:00:00 +08:00
2026-04-01 12:00:00 +08:00
2026-04-01 12:00:00 +08:00
2026-04-01 12:00:00 +08:00
2026-04-01 12:00:00 +08:00
2026-04-01 12:00:00 +08:00
2026-04-01 12:00:00 +08:00

Try rrweb

rrweb

The rrweb documentary (in Chinese, with English subtitles)

Join the chat at slack Twitter Follow total gzip size recorder gzip size

中文文档

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. 📚

🍳 Recipes 🍳

Project Structure

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.

Roadmap

  • 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
    • ...

Internal Design

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

  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. Add test cases in order to avoid future regression.
  6. If tests are failing, but the change in output is desirable, run yarn test:update and carefully commit the changes in test output.
  7. 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

Sponsors

Become a sponsor and get your logo on our README on Github with a link to your site.

Gold Sponsors 🥇

sponsor sponsor sponsor sponsor sponsor sponsor sponsor

Silver Sponsors 🥈

sponsor sponsor sponsor sponsor sponsor sponsor sponsor

Bronze Sponsors 🥉

sponsor sponsor sponsor sponsor sponsor sponsor sponsor sponsor sponsor

Backers

Core Team Members


Yuyz0112

Yun Feng

eoghanmurray

Juice10

Who's using rrweb?

The first ever UX automation tool
Smart screen recording for SaaS Remote Access & Co-Browsing The open source, fullstack Monitoring Platform. Comprehensive data analytics platform that empowers businesses to gain valuable insights and make data-driven decisions.
Description
No description provided
Readme MIT 20 MiB
Languages
TypeScript 66.5%
JavaScript 25.8%
HTML 6.3%
Svelte 1.2%
CSS 0.2%