Session Recordings
Watch exactly what your users see. Session recordings capture full DOM state and replay it in the browser — mouse movements, clicks, scrolls, form interactions, and page transitions.
How It Works
Recordings are powered by rrweb, an open-source library for DOM mutation capture. The recording layer (~50KB) is loaded conditionally based on your remote config settings.
- Full DOM snapshot on page load
- Incremental mutation recording during the session
- Periodic full snapshot every 5 minutes (for seek support)
- Full snapshot on SPA navigation
// Upload flow:
// 1. SDK requests presigned URL from POST /api/v1/ingest/recordings
// 2. Chunk uploaded directly to object storage
// 3. Storage path: recordings/{project_id}/{session_id}/chunk_*.jsonPrivacy Masking
Privacy is on by default. All input values are masked in recordings (maskAllInputs: true). The SDK also auto-detects and masks PII patterns: credit cards, SSNs, phone numbers, and emails.
HTML Attributes
Use these attributes on any HTML element for fine-grained control:
| Attribute | Effect |
|---|---|
data-sessionvision-mask | Force mask this element in recordings |
data-sessionvision-unmask | Explicitly allow capture of this element |
<!-- Mask a specific section -->
<div data-sessionvision-mask>
<p>This content will be hidden in recordings</p>
</div>
<!-- Unmask a specific input (use with caution) -->
<input data-sessionvision-unmask placeholder="Search..." />Sample Rate
Control what percentage of sessions are recorded via remote config. Set the sample rate from 0 to 1 (e.g., 0.25 for 25% of sessions). This is configured server-side and does not require SDK changes.
Playback
Recordings are played back in the sessionvision dashboard with full timeline scrubbing. Events captured during the session are overlaid on the timeline, so you can jump to specific clicks, page views, or errors.