Core Features
Session Replay
Video-like reconstructions of user sessions, recorded with rrweb. The last 30 seconds before any error are flushed so you can watch exactly what the user saw.
How it works#
When captureReplay: true (default), Reliable starts an rrweb recorder on init. rrweb captures DOM mutations, mouse movements, scroll events, and input changes, everything needed to faithfully replay the page later in the dashboard.
Events are buffered in a rolling 30-second window. When an error or crash fires, the buffer is compressed (gzip) and sent alongside the error payload. Replays are linked to errors by event UUID, open any error in the dashboard and you'll see a "Watch replay" button.
Storage and bandwidth#
A 30-second rrweb buffer of a typical SaaS page is about 30-80 KB after gzip, roughly the size of a medium PNG. Replays are uploaded only when an error fires, so on healthy sessions there's no replay traffic at all.
Privacy by default#
rrweb is invasive by nature, it records the DOM. Reliable enables aggressive defaults to keep PII out of replays:
- All
<input>values are masked. Text inputs show as ▪▪▪▪ in the replay. - Password fields, credit card inputs, and SSN fields are fully blocked: not even the input element shape is recorded.
- iframe contents are not recorded by default (cross-origin iframes wouldn't be anyway).
- Web fonts and images are recorded as references, not embedded, so the dashboard streams them at playback time.
Opting specific text into the replay#
If you want certain elements to be visible in replay (button labels, headings, non-PII content), add the data-rr-allow attribute:
<!-- Visible in replay -->
<h1 data-rr-allow>Welcome back</h1>
<button data-rr-allow>Continue</button>
<!-- Default: masked in replay -->
<input type="text" placeholder="Search" />Blocking elements from the replay entirely#
For elements that contain sensitive data (PII tables, billing info, internal IDs), use data-rr-block. Blocked elements appear as solid grey blocks in the replay:
<div data-rr-block>
<h2>{user.name}</h2>
<p>{user.email}</p>
<p>{user.phone}</p>
</div>Disabling replay#
If you don't want session replay at all (regulatory, performance, philosophical reasons), turn it off:
init({
publicKey: 'pk_live_rl_...',
captureReplay: false,
});Performance impact#
rrweb's recording cost is dominated by the full DOM snapshot taken at start (a few ms on a typical page). After that, only deltas are recorded, sub-millisecond per mutation. On most apps the impact is unmeasurable. On extremely DOM-heavy pages (10,000+ nodes, like rich data grids), you may see a ~3-5% main thread cost during heavy interactions.
Compliance
data-rr-block to anything sensitive before enabling replay in production. The defaults are safe for most apps but no automatic system can guarantee zero-leakage on a custom UI.Watch replays alongside errors