What we capture, and what we don't.
What capture does
When Line9 successfully parses a diagram, the canonicaliser produces a structural fingerprint: nodes relabelled in canonical order, edges with directions and endpoints, node shape categories, and subgraph nesting. That fingerprint is written to a private corpus so the project owner can re-render entries against the current Line9 and find layouts that need work. Separately, a small render event is recorded — outcome, timing, viewport, theme — so error rates and performance are visible.
What never leaves the browser
The Mermaid source you type, all node and edge labels, your node IDs, comments, colours, and any other free-form content stay on your device. The wire format structurally cannot carry them — there is no source field, no labels field, no free-text error message. The one exception is one you make yourself: if a diagram fails to parse, the feedback panel lets you tick a box to send us the source. The privacy policy, § 8, lists exactly what that report contains.
Topology corpus fields
Each topology write is a JSON document with exactly these fields:
topology_keyContent hash of the canonical structural form.topology_key_versionVersion of the canonicalisation algorithm that produced the key.canonical_graphAnonymous graph: vertices in canonical order, edges with directions and endpoints, node shape categories, subgraph nesting.
Render event fields
Dimensions:
render_statussuccess, layout_error, unknown_error, or parse_error (whole-source arrivals only).render_error_codeEnumerated failure category from @line9/core when status is not success.diagram_typeParsed diagram kind (e.g. flowchart, sequenceDiagram).themeSelected diagram theme.orientationportrait or landscape, as the viewer rendered it.line9_versionVersion string of @line9/core at render time.topology_keyStructural identifier; absent for diagram kinds the canonicaliser does not yet handle.topology_key_versionCanonicaliser version; present whenever topology_key is.referrer_hostHostname of document.referrer only — no path, no query.arrival_originHow the source arrived (paste, share_hash, published, example). Present only on parse_error.
Metrics:
render_duration_msWall-clock time from parse start to render end.viewport_widthCSS pixels of the rendering viewport.viewport_heightCSS pixels of the rendering viewport.spacing_scaleMultiplier on inter-node and edge spacing.node_scaleMultiplier on node size.
Topology corpus opt-out
Render events and Cloudflare operational analytics continue regardless, because they carry no user content and no per-user identifiers; they are operational signal needed to manage the service. Product analytics (below) is a separate control.
Product analytics id
Line9 uses PostHog (EU cloud, first-party proxy) for product usage — page views and curated events such as render/export/share. Diagram source and labels never leave the browser for this path. We ask before setting a durable first-party id. Accepting lets us stitch sessions across visits; declining, or not choosing, keeps the id memory-only while in-memory analytics continues. See the privacy policy § 9.
… When checked, a first-party analytics id is stored in this browser (localStorage +
cookie) so visits can be stitched. Leave it unchecked — or reject on the banner — to
keep the id memory-only. Usage events may still be sent for the current session either
way. Storage key: line9_analytics_consent.