Last updated September 7, 2026
Nodes & Edges
A board looks like shapes and lines, but underneath it is a graph. Nodes are the things your system is made of. Edges are claims about how they relate.
The element kinds
Seven element kinds can sit on a canvas. Only two model the system itself.
Containers and regions look similar but mean different things. A container is a claim about ownership: what is inside belongs to it. A region is a visual grouping that helps someone read the board.
Archetypes type them
An element kind says how something behaves on the canvas. An archetype says what it is: "API Gateway", "PostgreSQL", "Message Queue".
One archetype defines shape and size, fill and stroke, containment rules, and, for edges, connection shape and markers. Pick the archetype and the element is typed, styled, and constrained.
Your workspace starts with a built-in library, and you can add your own. Containment keeps a growing board valid: a domain accepts systems, a system accepts services, and invalid drops are refused.
Colour means something
Fill and stroke are not free-form hex values. Each is a {colour family, weight} token pair: a family shared by related archetypes, plus a weight for how strongly it renders. You choose from a fixed set of families.
That makes colour readable across a workspace. With fixed families, colour can mean "data store" instead of personal preference. There is no colour legend on the canvas by design.
Archetypes covers the picker, the live preview, and how colour changes apply to boards that already exist.
What a node stores
Beyond its name and archetype, a node stores:
- Fields: attributes defined by the archetype and filled in per node. Reusable field templates are curated once for the org, so every node of a kind asks for the same facts.
- Context tags: semantic labels for slicing a board, such as migration scope, owning team, or deprecation status.
- Aspects: typed architecture detail a node owns on an app board, pushed from the repo. Examples include a database schema, API surface, or route surface. The node names the thing; the aspect describes its internals.
- A parent: nodes nest, so a service can sit inside the container that owns it and stay with it.
- A child layer: a whole board of its own, one click deeper, for when a node's internals need their own map.
Edges
An edge is a claim, so write it clearly. Every edge has a direction, source node, target node, and relation label: Payment Service calls User Database. You pick that label, or a governing source picks it during sync.
An edge's archetype styles it the way a node's archetype does. The connection shape decides how the line is drawn between the two elements. The markers on each end show the kind of relationship: an arrow that points, a marker that terminates, or a plain line that only associates.
Direction matters. "A calls B" and "B calls A" describe different systems, and an insight's traced path follows those arrows exactly.
Drawn, kept, and bundled
A code plugin push does not delete the relationships it finds. Each board draws only its strongest import edges from a board-wide edge budget. A hub also draws its strongest consumers up to its own limit.
Relationships outside that budget are not lost. A hub node lists undrawn consumers under Used by in its documentation panel, strongest first, with the symbols each consumer imports. The plugin also keeps every resolved pair locally on disk. Selecting a node emphasizes its complete drawn set, while an open insight trail emphasizes every edge it follows.
When a container gathers several child connections between the same drawn pair, the canvas combines them into one line. A ×N chip shows the count, and the combined import weight sets the line size. The chip's tooltip names the relationships; select the line to expand its members.
On a drill-down board, an import that leaves the board's scope appears on a boundary port. This ghost node takes the name of the parent-board node it reaches, and its badge opens that node on the parent board.
Lines follow the layout. The canvas draws edges along computed routes with rounded bends. Connections, as well as contents, influence where the layout places a container. Every edge uses its own connection point. Drag a node and its edges move freely until the next layout.
Weight shows in the line itself. An edge behind one or two imports is a thin dotted thread, the middle band is a plain wire, and ten or more imports draw solid and heavy.
Selection is focus. Select a node and the canvas keeps that node, everything inside it, and the nodes its drawn edges reach at full strength; the rest recedes. Select an edge and its two ends stay lit. Press Escape or click the canvas to release it. An open insight trail takes precedence: it lights exactly the edges it walks.
The edge lens at the bottom-left of the canvas sets a board-wide reading and travels in the page link (?edges=), so a shared layer opens the way it was read:
The active lens shows how many edges it hid. A lens is a default, not a verdict: the selection and an open trail always draw the edges they name.
Managing the library
Adding an archetype, editing one, and reviewing archetypes proposed by a plugin all happen in one place. Archetypes covers the catalogue and the form behind it.