Skip to main content

Connections and zones

Two elements of decor structure the scene in the background, independently from the timeline: connections (permanent links between nodes) and zones (regions enclosing a group of nodes). Both are displayed right from the initialization, with no animation to trigger.

Permanent connections​

The connections root array declares links that are permanently displayed (the diagram's decor). This is distinct from the arrow action, which draws an animated arrow at a specific moment in the timeline.

connections: [
{ from: 'browser', to: 'api', style: 'dashed', arrow_head: 'both' },
{ from: 'api', to: 'db', style: 'dashed' },
],

style — line style​

Four styles, shared with the arrow action (the historical full alias is tolerated for solid):

Loading…

The animated style scrolls the dashes to suggest a continuous flow (real-time connection, WebSocket...).

path — trace shape​

Independently of the line style, path sets the shape of the path. Five values, shared with the arrow action (bezier by default):

Loading…
{ from: 'lb', to: 'api1', path: 'bezier' } // smooth curve (default)
{ from: 'lb', to: 'api1', path: 'simplebezier' } // more discreet curve
{ from: 'lb', to: 'api1', path: 'straight' } // direct segment
{ from: 'lb', to: 'api1', path: 'step' } // right angles
{ from: 'lb', to: 'api1', path: 'smoothstep' } // rounded right angles

The curvature only appears when there is a transverse offset (different lanes, fan-out, bidirectional lanes): between two perfectly aligned nodes, all shapes blend into a straight line. Packets of a move action follow the bezier path by default.

arrow_head — arrowheads​

arrow_head controls the arrow tips (forward by default):

Loading…
{ from: 'a', to: 'b', arrow_head: 'forward' } // tip at destination (default)
{ from: 'a', to: 'b', arrow_head: 'backward' } // tip at start
{ from: 'a', to: 'b', arrow_head: 'both' } // both ways
{ from: 'a', to: 'b', arrow_head: 'none' } // simple line, no tip

text — middle label​

An optional text is displayed in the middle of the link (e.g., a protocol, a port):

{ from: 'api', to: 'db', text: 'TCP 5432' }

color — line color​

color tints the whole path and its arrow head(s) — a predefined CSS name (steelblue, tomato…) or an exact hex. The median text label keeps the theme color so it stays legible. Left out, the connection uses the theme's neutral color. A set_color action on the connection's id recolors it at runtime.

{ from: 'api', to: 'db', color: 'steelblue' }

highlighted — permanent emphasis​

highlighted: true gives the connection the accent color, a thicker stroke and a glow — the same emphasis the highlight action applies at a moment in the timeline, but static (displayed from the start). It takes precedence over color.

{ from: 'api', to: 'db', highlighted: true }
Loading…

Zones​

The zones root array draws background rectangles encompassing a group of nodes: handy for materializing a network, a cluster, a trust boundary. A zone resizes automatically to contain all its members.

zones: [
{ contains: ['browser'], label: 'Client', color: '#3b82f6' },
{ contains: ['api', 'db'], label: 'Infrastructure', color: '#22c55e' },
],
Loading…
FieldRole
containsIDs of nodes and/or enclosed zones (required).
colorCSS color for the border and semi-transparent background.
labelText displayed at the top left of the zone.
idOptional — only required to nest the zone (see below).

Nested zones​

A zone can contain another: reference the id of the inner zone in the contains of the outer zone. The enclosing zone expands to cover it.

zones: [
{ id: 'core', contains: ['svc', 'data'], label: 'Core business', color: '#a855f7' },
{ contains: ['gw', 'core'], label: 'Cluster', color: '#64748b' }, // encloses the `core` zone
],
Loading…