Capability parity
Flutter reports build, raster, vsync, first-render, and slow-frame data. Browser-only metrics such as
LCP and CLS are not generated for Flutter applications.
Requirements
- Flutter 3.35 or later;
- Dart 3.9 or later;
- Android 24+ or iOS 13+ when using the default persistent identity store.
Install and initialize
1
Add the package
flutter pub get after updating pubspec.yaml.2
Initialize before runApp
RumApp installs the replay boundary, automatic tap collection, and frustration detection.
Replay remains disabled unless sessionReplaySampleRate selects the current session or recording
is started manually.3
Verify the first session
Open RUM → Overview, select a time range that includes the current time, and confirm that
checkout-mobile appears. Open Sessions to inspect the view and device context.site accepts the MoleSignal origin, an /api base URL, or an /api/v1 base URL. The SDK
normalizes the value and sends data to /api/v1/rum.
Record views and rendering performance
RumNavigationObserver records visible named routes. Supply the observer through the router
integration for Router or go_router applications. Call startView when a route has no stable
name or when navigation is managed outside Navigator.
flutter_time_to_first_render with build,
raster, and vsync timing. Frames slower than longFrameThreshold produce slow-frame actions.
Identify users and record application activity
FlutterError.onError and PlatformDispatcher.onError handlers. Forward
errors from additional isolates to the main isolate and call addError. Call clearUser() after
sign-out when the next activity must no longer use the identified user.
Automatic tap names are privacy-safe. Wrap important controls with RumUserAction to attach a
stable business name without taking ownership of Flutter’s gesture arena.
trackUserInteractions: true to collect taps, then use trackFrustrations to control rage taps
and visually verified dead taps. By default, frustration tracking follows trackUserInteractions.
Monitor HTTP resources and backend traces
Wrappackage:http with MoleSignalHttpClient:
Declare http: ^1.6.0 as a direct application dependency when the application does not already use
package:http.
traceparent, a
traceparent entry in Server-Timing, then request traceparent.
Restrict trace-header reading when only selected services are trusted:
addResource from a Dio or custom-client
interceptor:
Upload release symbols
Setversion, architecture, and debugId from immutable release-pipeline values. Use the same
values for every debug artifact produced by that build. Runtime-detected or derived fallbacks are
useful for development, but do not provide a stable production symbolication identity.
Build Android and iOS releases with --obfuscate and --split-debug-info. Upload every generated
.symbols file with kind=flutter_symbols, the matching android or ios platform, canonical
architecture, and Debug ID. Upload native Android ELF symbols and Apple dSYM DWARF files separately
when native crash frames are forwarded.
Artifact upload requires a management token with streams.configure. Never use the application-bound
msrum_ client token for artifact management.
Source maps & symbols
Generate, upload, match, and verify Flutter, Android, iOS, and Web debug artifacts.
Enable session replay
Flutter has no DOM. The first captured frame becomes rrwebMeta and FullSnapshot events. Changed
frames become incremental image mutations, and unchanged frames are skipped. The existing MoleSignal
replay player can therefore render browser and Flutter sessions through the same workflow.
sessionReplaySampleRate applies within sessions included by sessionSampleRate; multiply both rates
to calculate effective replay coverage. Manual recording also applies only to an included session.
Replay uses a separate queue, a 10-second default flush interval, per-session sequence numbers,
approximately 1 MiB target segments, and an 8 MiB request ceiling.
Protect replay content
The defaultRumPrivacyLevel.mask covers Text, RichText, and editable regions before PNG
encoding. Input fields stay masked in allow mode. The SDK also removes URL queries and fragments,
recursively redacts common sensitive context keys, and withholds raw error stacks by default. Wrap
sensitive images, maps, custom-painted content, platform views, or complete components in an
explicit privacy boundary:
RumReplayMask and RumReplayBlock both replace the captured region with an opaque block. Raw,
unmasked pixels never enter the event queue.
Main configuration
RumSessionReplayConfiguration defaults to a 5-second capture interval, capture after actions,
0.5 output pixels per logical pixel, a 900-pixel maximum image edge, and mask color #6B7280.
excludedUrls, allowedTracingUrls, maxQueueSize, session timeouts, diagnostics, custom
transport, and persistence are also configurable. trackLongFrames remains a compatibility alias
for trackLongTasks.
Flush and stop
Callflush() before a controlled transition that must wait for queued events. Call stop() during
final teardown to remove instrumentation and flush both event queues.
Browser RUM SDK
Compare the Browser SDK setup and browser-specific instrumentation.
RUM overview
Review the shared RUM data model and investigation workflow.
Source maps & symbols
Restore Flutter, Android, iOS, and Web release stacks.