Session replay
Watch what the person actually did — screens, taps, console and network — with text masked by default and correlated to the session.
Replay records an rrweb-compatible stream — screenshot frames and pointer events on Flutter (every platform), the DOM on the web — and plays it back in the console next to the session's events, logs and errors. It is opt-in, because it is billed per event and privacy-sensitive.
Flutter
await Nexus.init(const NexusConfig(
apiKey: 'nxs_live_xxx',
replayEnabled: true,
replayMaskTextFields: true, // default — every text input redacted
replayInterval: Duration(seconds: 1),
));
runApp(const NexusScope(child: MyApp())); // installs the capture boundaryNexusMask(child: CreditCardWidget()); // never in frames
MaterialApp(navigatorObservers: [NexusNavigatorObserver()]); // Pages tab
Nexus.instance.replay.observeRouter(router, () => currentPath); // GoRouter, nested routes
Nexus.instance.replay.trackScreen('checkout'); // manual
Nexus.instance.replay.pause(); Nexus.instance.replay.resume();Console (debugPrint) and HTTP are captured automatically
(replayCaptureConsole, replayCaptureNetwork). With Dio, add
NexusDioInterceptor from package:nexus_flutter/nexus_dio.dart; for other
clients call replay.recordNetwork(url:, method:, status:, durationMs:).
Web
npm install rrwebconst nexus = Nexus.init({
apiKey: 'nxs_live_xxx',
replayEnabled: true, // starts automatically in the browser
replayMaskAllInputs: true, // default
replayBlockClass: 'nexus-block',
replayMaskTextClass: 'nexus-mask',
});
await nexus.replay.stop(); await nexus.replay.start();<div class="nexus-block">never captured</div>
<span class="nexus-mask">4111 1111 1111 1111</span>Replay is a no-op on Node.
Proxying through your backend
The Python and .NET SDKs can forward replay chunks your clients send to your own backend — for example when the app cannot reach Nexus directly:
client.replay.ingest(recording_id, rrweb_events, distinct_id="user_1", href="/checkout", width=1440, height=900)await nexus.Replay.IngestAsync("rec_42", events, href: "/checkout", width: 1440, height: 900);Keep recordingId stable across every chunk of one recording (a new id starts a
new recording); at most 5000 events per chunk.
Reference
Flutter · JavaScript · Python · .NET · REST
