Skip to main content
The MoleSignal Flutter App RUM SDK sends mobile telemetry through the same session, action, error, resource, and replay contract as the Browser RUM SDK. Flutter-native instrumentation preserves the same investigation workflow without inventing browser-only metrics.

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

clientToken ships in the application and must be treated as public. Use the application-bound msrum_ client token created by the data-source guide.
1

Add the package

Run 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.
The first rendered frame after each view produces 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

The SDK chains existing 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.
Set 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

Wrap package:http with MoleSignalHttpClient: Declare http: ^1.6.0 as a direct application dependency when the application does not already use package:http.
The wrapper records the sanitized URL, method, duration, status code, response size, and available W3C trace identifiers. Trace context is read in this order: response traceparent, a traceparent entry in Server-Timing, then request traceparent. Restrict trace-header reading when only selected services are trusted:
The SDK does not globally intercept networking. Call addResource from a Dio or custom-client interceptor:

Upload release symbols

Set version, 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 rrweb Meta 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 default RumPrivacyLevel.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.
Text drawn by CustomPainter cannot be detected from the widget type. Wrap the custom-painted region explicitly. Platform-view capture depends on platform composition; verify sensitive platform views on real Android and iOS devices.

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

Call flush() 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.
Last modified on August 9, 2026