Skip to content

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, or false when 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

  • fitView accepts { 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 #8a9096 drew 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 new dimmedEdge and dimmedEdgeOpacity theme colors, so focusing a neighborhood recedes edges as well as nodes. Selected edges stay highlighted (#116).
  • Highlighting edges with setEdgeSelection on hover stays fast on large graphs: only the edges that changed are repainted.
  • setEdgeSelection now ignores IDs that are not in the graph, and setData drops selected edges that no longer exist. The selectedEdges diagnostic counts only real edges, so it can be lower than before for hosts that pass stale IDs.
  • GraphraumTheme has two new required fields, dimmedEdge and dimmedEdgeOpacity. Hosts that type a complete theme object must add them; partial themes and the presets need no change. A partial theme that sets dimmedEdgeOpacity to undefined or 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 glow between 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 tune clusterStrength. 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 applyLayout frame, 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 focus policy (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 renderToolbar is 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 within maxLabels, without hosts guessing setLabels() 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 (instanceColor redefinition).
  • 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.