What we capture, and what we don't.
The diagram viewer records the structural shape of each diagram you render — anonymous topology, no source text — so the renderer can be improved against the diagrams people actually draw. This page lists every field that leaves your browser, and gives you a switch to turn the corpus write off.
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.
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.
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.
Dimensions:
render_statussuccess, layout_error, or unknown_error.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.
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.
Render events and Web Analytics continue regardless, because they carry no user content and no per-user identifiers; they are operational signal needed to manage the service.