Changelog
Releases follow semantic versioning and are published from main. Each tagged release also has release notes on GitHub, and the version menu in the header opens the docs for any release.
October 2026
2026-10-19
- In 3D, edges and their arrowheads now end on a node’s visible outline from every camera angle, so arrowheads show instead of hiding under the node they point at. The end is placed on screen, where the camera-facing node is, rather than one radius along the edge in space. This is exact for circle nodes; other shapes use their width as the radius. 2D is unchanged.
2026-10-11
flyTo({ nodeIds })animates the camera to a group of nodes and resolves when it arrives, orfalsewhen someone interacts first. In 3D it keeps the current viewing angle, so a running auto-orbit carries on around the new spot, which makes ambient tours from cluster to cluster possible. It jumps instead of animating when reduced motion is on.
2026-10-10
- The docs site is simpler. It now has three parts: a home page, the docs (Start, Guide, Reference) and one playground. The playground replaces the Explorer, the Prove page and the three demo pages: it has the Knowledge, Software and Fraud scenes, a stress test up to 100,000 nodes, and Prove as a side panel that compares your device with the reference run. Old links redirect to the new pages.
2026-10-09
fitViewaccepts{ nodeIds }to frame a subset of nodes, for example a highlighted path, in 2D and 3D.
2026-10-08
fitView()in 2D now undoes wheel zoom, so fitting after zooming in or out frames the graph the same way as the first fit instead of keeping it small or cropped (#130).- Edges now always draw behind nodes in 3D, as they already did in 2D, so busy hubs keep a clean node face. In 3D a node behind an edge now shows on top of it, and overlapping edges no longer hide each other by depth (#127).
- In 3D, edge ends now meet the outline of circle nodes from every camera angle instead of stopping short of it, including edges that point toward or away from the camera. For other shapes the ends land close to the outline but can stop slightly short of it on long or angular nodes, depending on the view. 2D is unchanged. An arrowhead on an edge that points almost straight at the camera can sit under its node (#127).
- Fixed node, edge, marker, selection, and glow colors drawing darker than specified. A node set to
#8a9096drew as#41474e; it now draws as#8a9096, the same as that color in CSS and as the canvas background (#123). - This changes how every graph looks: colors are noticeably lighter than in earlier versions, for both presets and for custom colors, and glow halos on dark backgrounds look brighter and wider because they blend over the corrected colors. The dark and light presets keep their values, because they now draw as their documented palette. If you picked colors to compensate for the darker output, set them back to the values you meant.
fitView()in 3D now frames the graph to fit the canvas: the graph spans most of the canvas width or height instead of about a third, glow halos stay in view, and nodes no longer fall off the sides of tall canvases (#124).
2026-10-07
- 3D graphs can slowly orbit on their own with
setAutoOrbit(). The orbit is off by default, pauses while people interact and resumes after a short idle, and stops while the tab is hidden or the graph is off screen (#113). - Edges can be dimmed with
setEdgeState("dimmed", ids), styled by the newdimmedEdgeanddimmedEdgeOpacitytheme colors, so focusing a neighborhood recedes edges as well as nodes. Selected edges stay highlighted (#116). - Highlighting edges with
setEdgeSelectionon hover stays fast on large graphs: only the edges that changed are repainted. setEdgeSelectionnow ignores IDs that are not in the graph, andsetDatadrops selected edges that no longer exist. TheselectedEdgesdiagnostic counts only real edges, so it can be lower than before for hosts that pass stale IDs.GraphraumThemehas two new required fields,dimmedEdgeanddimmedEdgeOpacity. Hosts that type a complete theme object must add them; partial themes and the presets need no change. A partial theme that setsdimmedEdgeOpacitytoundefinedor to a value outside 0 to 1 now throws.- Fixed edges that could show outdated lines when a layout update and a pan or zoom landed in the same frame.
- Nodes can glow: set
glowbetween 0 and 1 to draw a soft halo in the node’s color around the few nodes you want to stand out (#114). - Live force layout can keep data-defined clusters together: pass cluster indices to
createForceSimulation()and tuneclusterStrength. Nodes added later join their cluster (#115).
September 2026
2026-09-03
- Edges can meet node outlines instead of centers, and force layout accepts per-edge spring length and strength (#111).
- Focus labels can skip importance fillers (
focusLabelFill: "none") so idle graphs stay unlabeled.
2026-09-01
- Switching a graph from 2D to 3D keeps the correct canvas shape on a wide or tall view, instead of stretching the nodes.
August 2026
2026-08-20
- Prove times progressive force layout separately: worker startup, edge transfer, compute, first useful
applyLayoutframe, and complete streaming. Results appear in the JSON report, headline metrics, and local history. - Position and layout updates patch visible edges in place when the viewport set is unchanged, instead of rebuilding every edge each frame.
- The Explorer Force section can change iteration count, repulsion, link distance, gravity, and batch size while force layout still runs in a worker.
- Selection and hover color updates upload only the changed node slots.
- Topology removals that stay within the preallocated capacity reuse existing GPU meshes instead of rebuilding them.
- Detail curves use denser segments, and 2D graphs keep correct aspect when the canvas resizes.
- The Explorer can show focus labels, a selected-node toolbar, and one HTML card on the dense GPU graph. Turn the overlay off from the sidebar when you only want appearance and layout.
2026-08-19
- Overlay can project a hard-capped set of host HTML cards onto focused nodes (
renderRichNode,setRichNodes,autoRichNodes) while the dense graph stays on the GPU batches.
2026-08-11
- Graphs can switch between light and dark theme presets at construction or runtime, and the canvas background can be a solid color, transparent for a host CSS pattern, or a tiled image/canvas pattern.
- Overlay labels support a
focuspolicy (selected, hovered, and neighbors) so dense graphs stay readable; pointer hover updates node highlight automatically. - Overlay toolbars can auto-anchor to the selected or hovered node when
renderToolbaris set.
2026-08-10
- Pointer picking can resolve edges as well as nodes (
pickHit), and selected edges highlight with a theme color without clearing node selection. - Overlay labels can follow a viewport budget (
autoLabels) so only the most important on-screen titles appear withinmaxLabels, without hosts guessingsetLabels()every frame.
2026-08-08
- Docs gained a fullscreen Explorer at
/explore/with grid, circle, force, and live force layouts plus appearance controls./benchmark/stays the Prove protocol; its Explorer tab links to the fullscreen surface. - Edges can follow straight, quadratic, or cubic paths. Supply control points or let graphraum derive them; overview zoom still collapses curves to a single straight segment.
- Fixed a WebGL shader validate failure where node fill color was declared twice (
instanceColorredefinition). - The docs
/benchmark/page hosts the timed Prove protocol and local history; live shape and edge exploration moved to the fullscreen Explorer. - Nodes gained four shapes—hexagon, triangle, pill, and rounded—alongside the existing circle, square, and diamond. Every shape can now draw an outer stroke and set width and height independently instead of one uniform size.
- Edges support width, opacity, dash styles, and triangle direction markers, with overview zoom dropping markers first.