The native side keeps a rolling window of what the app rendered in memory. When a report is filed that window is frozen and attached; the rest is discarded. Nothing is uploaded unless someone files a report, and there is no screen-recording permission prompt.
Turning it on
Server-gated — enable it for the app in the dashboard, and the SDK picks it up
from GET /api/config on the next start. There is
no client-side switch for replay in the React Native SDK — the server gate
is the only control. If you need it off for a particular build, turn it off for
that app in the dashboard.
Format
React Native replays are traceitx-vtree-v1, the native format — not rrweb.
The recorder runs below your JS, so it captures what the device actually
rendered rather than what React thought it rendered.
It is a frame timeline, not video: a viewport, a list of frames, and per-frame
operations on a lightweight node tree carrying role, frame, text, bg and
masked. That keeps a replay in the tens of kilobytes and means text stays
text — searchable, and redactable before it leaves the device.
Images are content-addressed and optional; the server’s asset mode decides whether they travel at all. See Server config.
Privacy
Views marked sensitive carry masked: true and paint as a solid block. The
masking happens in the producer, before the blob is written — masked content
never exists in the buffer. See Sensitive content.
Cost
The recorder runs on the native UI thread’s cadence, not on every React render,
so a chatty render tree does not multiply the work. replayDurationSec on
the server bounds the window; samplingRate decides what fraction of sessions
allocate a buffer at all.