groundcover_rum 0.0.1-rc.0
groundcover_rum: ^0.0.1-rc.0 copied to clipboard
groundcover Real User Monitoring (RUM) for Flutter on iOS and Android: sessions, network and tracing, screens, taps, errors, logs, native crashes, hangs, app start, frame vitals.
Changelog #
0.0.1-rc.0 #
The first release candidate. It sends the same /json/rum format as groundcover's browser and
React Native SDKs, so Flutter sessions land in the same RUM views.
Setup #
await GroundcoverRum.init(config)beforerunApp. It throwsGroundcoverInitExceptionwhen the SDK can't start; calls made before it completes are dropped with a warning.GroundcoverWidgetaround the app, andGroundcoverNavigatorObserveron the navigator or router.- iOS builds through Swift Package Manager or CocoaPods, both with KSCrash, and ships an Apple
privacy manifest. Android declares the
INTERNETpermission itself.
Captured #
- Sessions persisted across launches, with sampling, a presence gate (a touch or a return to the
foreground) and rotation after 30 minutes idle or past
sessionMaxDuration. - Network capture for every
dart:ioHttpClientcreated after init (package:http, dio's default adapter), with W3Ctraceparentpropagation totracing.propagationUrls, redaction, and text bodies up to 5 KB. - Navigation between named routes from
GroundcoverNavigatorObserver, plus manualstartNavigation/endNavigation. - Taps, long presses, swipes, scrolls and pinches from
GroundcoverWidget, named from the widget tree; oneinputevent per finished text edit, never the text. - Uncaught errors from
FlutterError.onErrorandPlatformDispatcher.onError, chained to the app's handlers, andcaptureException. - Logs from
debugPrintandGroundcoverRum.logger; custom events; user identity. - Native crashes, reported on the next launch under the session they happened in, even when that
launch isn't sampled: iOS through KSCrash; Android through a chained uncaught-exception handler
and, from API 30, the system's exit records. Delivered at least once, with a stable
crash_report_id. - App hangs: main-thread stalls the app recovered from, as
exceptionevents (ANRon Android,AppHangon iOS). Dart runs on the main thread, so a long Dart stall is reported too. - App start:
app_start_cold,app_start_warmandapp_start_hot, from the process start to the first frame, and time to interactive (app_start_tti): the first screen landing, orGroundcoverRum.markAppInteractive()withNativeOptions(tti: TtiMode.manual). - Frame vitals: one
frames_delay_totalper screen, with slow and frozen frame counts, from Flutter's own frame timings.
Privacy #
- Masking on by default: privacy levels, per-surface masking,
sensitiveKeys, aredacthook andGroundcoverPrivate. Typed text is never captured, including text an app mirrors intoSemantics(value:).
Performance #
- A batch's JSON, UTF-8 encoding and gzip run on a short-lived background isolate, off the UI thread. The batch sent as the app goes to the background is still built inline, so it is queued before the process can be suspended.
Testing #
package:groundcover_rum/testing.dart:GroundcoverRumTesting.reset()stops the SDK and undoes what it installed, for an app's tests.triggerTestCrashandblockMainThreadwork in development builds only.