flog_flow 0.5.0
flog_flow: ^0.5.0 copied to clipboard
Observability for Flutter — structured logs plus session replay. Records the real user journey (screens, taps, network, logs, errors) and replays it in a web viewer.
Changelog #
0.5.0 #
- New:
FlogFlow.instance.setUser(id, name:, email:)(alsoFlogCloud.setUser) identifies the end user of a recording — call it after login,setUser(null)on logout; it can be called before or afterstart()and persists across sessions. The identifier travels in the upload's unencryptedmeta, so the dashboard can search "sessions of this user" even without a managed key. Prefer an internal id over an email unless you're OK with it being visible there. - Platform (deployed separately, no SDK changes needed): frustration signals (rage taps and dead taps) with badges, a search filter and heatmap layers; a navigation-flow explorer per screen (where users come from / go next / drop off); public share-by-link for session replays (7-day expiry, revocable); and team invites by link.
- Web viewer: opens shared replays (
/viewer/?share=…) and shows the real server message when a link has expired or been revoked.
0.4.8 #
- Web viewer: new "🔥 Heatmap" toggle — replaces the numbered tap markers with a heat layer (taps + sampled scroll paths) for the loaded session. Works for every project, including those without a managed key.
- Platform (site/dashboard, deployed separately): aggregated per-screen heatmaps across all sessions, for projects with a managed key.
- No changes to the SDK's public API.
0.4.7 #
- Documentation is now in English. The
README.mdshown on pub.dev was rewritten in English (same content and structure as before, nothing removed), and the full Spanish version now ships alongside it asREADME.es.md. - The website (flog-flow.com) and the guide are bilingual: an EN|ES switch that
remembers your choice, follows your browser language on the first visit and
can be shared with
?lang=es. - No code changes: the SDK's public API is identical to 0.4.6.
0.4.6 #
- README screenshots now use a versioned URL (
?v=046) so pub.dev's image proxy re-downloads them. 0.4.5 shipped with unversioned URLs and the proxy kept serving the previously cached 404. No code changes.
0.4.5 #
- Re-publish to refresh the README screenshots on pub.dev. In 0.4.4 the images were added before the site (flog-flow.com/img/docs/) was serving them, so pub.dev's image proxy cached a 404. The images are online now; this version forces a fresh render. No code changes.
0.4.4 #
- Documentation updated with screenshots.
0.4.3 #
- Domain: changed domain.
0.4.2 #
- README: network capture is now highlighted in the quickstart (Path B) —
it's the most common trip-up: it requires
FlogDioInterceptor()on the Dio client andCaptureConfig(captureNetwork: true)at the same time; with only one of the two, nothing is recorded. Includes the alternative for apps that usehttpinstead of Dio (recordEvent(type: 'network', …)). - README: new rule 6 — the logs ↔ session link is automatic when
FlogLogsandFlogCloud.startrun together in the same app.
0.4.1 #
- Logs ↔ session link restored: every
FlogLogslog carries thesessionIdof the recording in progress again (newFlogFlow.instance.currentSessionId), and logs queued before the recording started are completed when they are sent. This is what lets the dashboard link "View session" from a log and "View logs" from a session. - Warning when network isn't being recorded:
FlogDioInterceptorwithcaptureNetwork: false(the default) used to drop traffic silently; it now warns in the console (debug) the first time.
0.4.0 #
Integration fixes based on feedback from the first users.
- Multiple Navigators: new
FlogFlow.instance.newNavigatorObserver()— creates one observer perNavigator(GetMaterialApp + nested MaterialApp, your own Navigators). ReusingnavigatorObserveracross two Navigators triggers a framework assert that's hard to trace; it's now documented and has a way out. FlogCloud.startno longer blocks startup: recording is wired up first (cheap) and pending uploads drain in the background. Previously a slow or offline upload delayed the first frame and the start of the session was lost.awaitPendingUploads: truerestores the old behaviour.- Timeouts on every upload (
FlogCloud,FlogHttpUpload,FlogLogs): connect 15 s / send 1–2 min / receive 30 s. Without them, a flaky mobile network could hang the request indefinitely. - Upload failures are no longer silent:
debugPrintwith the status in debug, plus optionalFlogCloud.onUploadError/FlogHttpUpload(onError:)hooks to tell 401 (token), 402 (quota), 413 (size) and network drops apart. - Warning when two
FlogFlogScopes are mounted: each scope shadows the previous one and screenshots come from the wrongRepaintBoundarywith no error at all; it now warns loudly in the console (debug). The scope also unregisters itself when unmounted. - Warning about events emitted before
start()(debug, once): they used to be dropped silently and the session came out empty with no clue why. FlogCloud.startacceptsinitialRouteName: recording starts after the first frame, so the initialdidPushhas already happened; without this the first screen came out unnamed.FlogFlow.instance.screenNameResolver: hook for naming anonymous routes (MaterialPageRoute/PageRouteBuilderwith nosettings.name), e.g. byruntimeType.archiveaccepts 3.x and 4.x (>=3.3.0 <5.0.0): the narrow^4.0.2range clashed with apps pinningarchive ^3.xand prevented installing the package.
0.1.0 #
Initial version.
- Recording of screens (low-quality JPEG screenshots), taps, scrolls and
navigation (
FlogFlow+FlogFlowScope+ navigation observer). - Optional capture of network (
FlogDioInterceptor), logs (FlogLogCapture) and errors with stack trace and screenshot. - Breadcrumbs, session metadata and a unified timeline.
- Redaction of sensitive data in screenshots (
RedactedZone). - Always-encrypted export in a
.flowxcontainer (PBKDF2 + AES-256-GCM, packaged in an isolate). - Self-contained web viewer (
viewer/viewer.html). - Automatic upload to the FlogFlow platform (
FlogCloud) with recovery of pending uploads. - Automatic data deletion (
cleanupOnStart,deleteAfterExport) and record-only-if-error mode.