flog_flow 0.6.0
flog_flow: ^0.6.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.6.0 #
- New:
CaptureConfig(offlineMode: true)— an OFFLINE debugging mode for.flowxfiles that stay local (never uploaded). When on, the Dio interceptor records, per request, the request/response headers, the full request/response body (untruncated, capped byFlogDioInterceptor.offlineBodyLimit, 5 MB by default) and the full URL — on top of the usual method/host/path/status/duration. - Web viewer: the network detail (Replay panel) now shows those headers and the
response body as collapsible sections and adds a "Copiar cURL" button that
rebuilds the exact request (method, URL, headers, body —
-Ffor multipart) and copies it to the clipboard for one-click replay. - Off by default: these fields include tokens/cookies/PII and are not
redacted, so use it only for local
.flowx. Do not combine withenableAutoUpload— a debug warning fires if you do. Additive to the manifest (networkeventdata); no schema bump, and older.flowxfiles render unchanged. - New:
FlogFlow.instance.exportHtml()— exports a self-contained HTML report: one.htmlfile that opens with a double-click in the browser (macOS/Windows/Linux) and shows the viewer with the session already loaded — no server, no internet, no password. The viewer and the session data (manifest + screenshots as data URIs,embedScreenshots: trueby default) are baked into the file. It is written in cleartext (browsers don't reliably expose Web Crypto overfile://, so decrypt-on-double-click isn't dependable), so inofflineModeit carries the same tokens/PII as the.flowx— treat it as sensitive and local-only. The web viewer gained an embedded-data path (loadEmbedded) that renders directly from an inlinedflog-embedblock; the template is bundled aslib/src/export/viewer_template.g.dart(regenerate withdart run tool/build_viewer_template.dartafter editingviewer/viewer.html).
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.