Under the hood2026-07-19 · 5 min

What is session replay? (It's not a screen recording)

"Session replay" sounds like someone screen-recorded the user. It isn't, and the difference is the whole reason the technique works.

A video of a browser is pixels: megabytes per minute, un-inspectable, and whatever was on screen — passwords included — is burned in forever. A session replay is data: a snapshot of the page's DOM plus a timestamped stream of every mutation, click, scroll, and input that followed. To watch it, a player rebuilds the page and re-applies those events in order. You're not watching a film of the bug. You're watching the bug's DOM happen again.

The open-source engine behind most of this — including TraceBug — is rrweb, which has quietly become the standard way to serialize what a browser session did.

A screen recording stores pixels; a session replay stores DOM events with timestamps
A screen recording stores pixels; a session replay stores DOM events with timestamps

Why data beats video

Size. DOM events compress absurdly well. A minute of interaction that would be a 50 MB screen recording is typically a few hundred kilobytes gzipped. Small enough to attach to a ticket, email, or Slack message like a normal file.

Precision. Every event carries a millisecond timestamp. That means the replay can be lined up exactly against the console log and the network log: the user clicked "Place order" at 00:00.44, and the POST failed at 00:00.46. Video gives you "somewhere around the middle, I think."

Inspectability. Because the replay is a real DOM, you can pause it and look at the actual state of the page — what class that button had, whether the form value was really set. Try pausing a video and asking it what's inside an element.

Privacy by construction. A recorder that works at the DOM level can mask input fields *at capture time* — the password is replaced before it's ever written to the event stream. A video can't unsee what was on screen; the pixels either got recorded or they didn't.

The honest catch

DOM recording has edges. Canvas and WebGL render outside the DOM, so a game or a chart library that paints to canvas replays as a blank box or a sparse snapshot. Cross-origin iframes are sealed off by the browser itself. And a replay shows what the client did — it's evidence about the frontend, not proof of what your server was thinking. For most web app bugs none of this matters; for the exceptions, the console and network logs riding alongside the replay carry the diagnosis anyway.

Where replay fits in a bug report

A replay on its own answers one question: *what did the user actually do?* That's the question people answer worst from memory — nobody remembers that they double-clicked, or that they edited the coupon field twice. But the full picture needs three streams: the replay (what they did), the console (what broke), and the network (what failed). The value is in the correlation — same timeline, three witnesses.

That's the design behind TraceBug's export: one self-contained .html file holding all three, gzip-compressed, viewable offline in any browser with no player to install and no account to make. Nothing is uploaded anywhere — the capture happens in your browser and lands on your disk, which for session data isn't a feature so much as a requirement.

See one instead of reading about one

The live sandbox has intentional bugs. Trigger one, capture it, open the export — the replay, console, and timeline are all in the file. If you want to see what a machine makes of that evidence, an AI agent debugged one of these captures in five tool calls, unedited.

Try the whole loop in two minutes
The live sandbox has real bugs waiting — capture one and hand it to your agent.
Open the sandbox