browser-replay is an open source TypeScript library for capturing and replaying browser sessions. Reproduce bugs exactly, generate tests from real user flows, and understand how your app behaves in the wild.
Capture every DOM mutation, user interaction, and network event with a single function call.
npm install @browser-replay/record
import { record } from '@browser-replay/record';
let events = [];
const stop = record({
emit(event) {
events.push(event);
},
});
// call stop() to end the recording
Play back any recorded session with a React player component — timeline, scrubber, and controls included.
npm install @browser-replay/player react react-dom
import { DomReplayPlayer } from '@browser-replay/player';
import '@browser-replay/player/dist/style.css';
<DomReplayPlayer
events={events}
autoPlay
/>
Or use the CDN — no build step required:
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@browser-replay/core@latest/dist/style.css" />
<script src="https://cdn.jsdelivr.net/npm/@browser-replay/core@latest/dist/core.umd.min.cjs"></script>
Built for production use — privacy controls, extensibility, and full TypeScript support out of the box.
Full type definitions ship with every package. Works with ESM and CommonJS bundlers.
Block, mask, or ignore any element using CSS classes — dr-block, dr-mask, dr-ignore. Passwords masked by default.
First-party plugins for console logs, sequential IDs, and canvas via WebRTC. Build your own with the plugin API.
Optionally record <canvas> elements, inline images, and cross-origin iframes alongside DOM mutations.
Stream events in real time for live collaboration, remote support, or co-browsing scenarios.
Convert any recorded session to video with @browser-replay/video — useful for sharing replays without a player.
Attach a session replay to every bug report. Stop asking users to reproduce issues manually.
Record real user flows and replay them as automated integration tests.
Watch exactly what users see — hesitations, rage clicks, scroll depth — without guessing.
Replay the exact sequence of events that led up to a production error.
Install only what you need. All packages are independently versioned.
| Package | Description |
|---|---|
@browser-replay/core |
Record + replay in a single package — recommended for CDN usage |
@browser-replay/record |
Recording only — smaller bundle for apps that only need to capture sessions |
@browser-replay/replay |
Replay engine — minimal programmatic API without a UI |
@browser-replay/player |
React player UI with timeline, scrubber, and playback controls |
@browser-replay/player-core |
Framework-agnostic player logic — bring your own UI |
@browser-replay/snapshot |
DOM serialization and rebuilding — serialize page state to JSON |
@browser-replay/packer |
Compress and decompress event data to reduce storage size |
@browser-replay/video |
Convert recorded sessions to video files |
@browser-replay/web-extension |
Browser extension — record any page without changing its code |
Plugin packages:
plugin-console-record, plugin-console-replay,
plugin-sequential-id-record, plugin-sequential-id-replay,
plugin-canvas-webrtc-record, plugin-canvas-webrtc-replay.
Additional utilities: @browser-replay/dom, @browser-replay/types, @browser-replay/utils.
browser-replay is released under the MIT License and built on the shoulders of rrweb. Contributions are welcome — open an issue, send a PR, or join the discussion on GitHub.