Screen replay
The headline feature: pixel-accurate playback of everything the user saw on screen.
How it works
| Platform | Technique |
|---|---|
| Web | DOM snapshots via rrweb — serializes the full tree once, then ships incremental diffs |
| React Native (Android) | Native screen frames captured at 1–4 fps, JPEG-compressed, streamed as binary |
| React Native (iOS) | Same as Android — native frame capture via CoreGraphics |
Web replay is vector-based (you can inspect the DOM at any point during playback). RN replay is raster (JPEG frames played back as a video).
Turning it off
You rarely want to. But if your app has legal reasons to not record visuals:
// Web
<GalachaProvider projectKey="..." />
// No toggle — DOM capture is always on. Use <PrivateBlock> to hide specific parts.
// React Native
Galacha.init({ projectKey: "...", captureScreen: false });Setting captureScreen: false on RN ships everything except frames: clicks, errors, network, navigation, custom events. Useful for text-only replay views.
Tuning frame rate (React Native)
Galacha.init({
projectKey: "...",
screenCaptureFps: 1, // 1–4 fps. Default 1.
screenCaptureQuality: 0.4, // JPEG quality 0.1–1.0. Default 0.4.
screenCaptureScale: 0.35, // Downscale factor 0.25–1.0. Default 0.35.
});| Setting | Default | Trade-off |
|---|---|---|
screenCaptureFps | 1 | Higher = smoother playback, more bandwidth |
screenCaptureQuality | 0.4 | Higher = crisper frames, larger payload |
screenCaptureScale | 0.35 | Higher = more detail, larger frames |
A 3-minute RN session at defaults ships ~300 KB. Cranking everything to max (fps: 4, quality: 1.0, scale: 1.0) can push that to 5 MB+.
What the dashboard plays back
- A full scrubber with keyboard shortcuts (← → for frame-by-frame)
- Speed controls (0.5×, 1×, 2×, 4×)
- Timeline markers for errors, clicks, navigations
- Network panel overlay (toggle with
N) - Console panel overlay (toggle with
C) - DevTools-like element inspector (web only)
What's NOT captured in the replay
<canvas>/ WebGL contents on web — rrweb doesn't serialize canvas pixels by default. You see the canvas outline but not what was drawn.<video>/<iframe>contents — the element is captured but not what it played- Native alerts / popups on RN — system UI isn't part of the view tree
- Off-screen content — only the viewport is recorded