finds.dev← search

// the find

rrweb-io/rrweb

★ 19,701 · TypeScript · MIT · updated Jun 2026

record and replay the web

rrweb is the de facto open-source standard for DOM-based session replay — it serializes the full DOM snapshot plus every subsequent mutation into a structured event stream that can be replayed exactly. It's what PostHog, Sentry, Datadog, and a dozen other analytics tools use under the hood, which tells you about both its quality and its maturity.

The architecture split between rrweb-snapshot, rrweb-record, and rrweb-replay is genuinely clean — you can use just the serializer without the player, or just the replayer against a stored stream. The plugin model for canvas, network, and console is opt-in and doesn't bloat the core bundle. TypeScript throughout with a shared type contract between the record and replay sides means malformed event streams are caught at compile time, not runtime. Adoption by Sentry, Datadog, and Amplitude is the most honest signal that this handles real-world DOM complexity at scale.

Storage costs are the elephant in the room — a heavy single-page app with frequent DOM mutations will generate tens of MB per session with no built-in deduplication or sampling strategy (you're on your own). Canvas recording still requires the WebRTC relay approach, which means you need server infrastructure just to capture canvas state during recording, not during replay. The player is a Svelte component, so if you want to embed it in a React or plain-HTML context you're pulling in Svelte's runtime. The monorepo mixes Jest and Vitest across packages with no unified test command, which makes contributing annoying.

View on GitHub → Homepage ↗

// want more like this?

We dig through GitHub every week and send a few repos picked for what you actually care about — each with an honest take like this one.

Get finds in your inbox → Search again →