Build valid, crop-free .canvas knowledge maps for this fork’s canvas-page plugin. Canon: πŸ“œ SSOT Bible. Live example: πŸ—ΊοΈ Site Map.

1. 🎯 When

Use a canvas when layout carries meaning β€” module maps, dependency graphs, mind maps, migration funnels, kanban boards. For inline flow inside a doc, prefer 🧜 MermaidGuru.

2. 🧩 Nodes

Document is { "nodes": [...], "edges": [...] }. Four node types, all need id, x, y, width, height:

TypeExtra fieldRenders as
texttextInline GFM markdown
filefileClickable page + hover popover
linkurlCard (this fork β€” no iframe)
grouplabel, background?Dashed container
  • πŸ“ file paths are CONTENT-ROOT-RELATIVE: "file": "skills/gurus/MermaidGuru.md", never absolute, never vault-root. Label = filename minus extension.
  • πŸ”— External link nodes render as cards in this fork (the old iframe embed is gone), so they no longer need 300px of iframe height β€” size them like a wide text node.

3. πŸ“ Sizing

Crop is invisible in JSON and only shows in the viewport β€” oversize on purpose.

NodeWidthHeight
File400–46060–80
Text (multi-line)250–50080–200, scale to content
Link (card)400120–160
Groupcontent + 80content + 120
  • ↕️ β‰₯100px vertical pitch between stacked nodes (node height + β‰₯20px gap; 100px grid for groups).
  • πŸ”² All coordinates snap to multiples of 20; groups round to 100.
  • 🧱 First node inside a group sits at group_y + 40 (pad) + 60 (label area) β€” skipping the label area overlaps the title.
  • ↔️ Groups β‰₯200px apart; never nest groups (spec 1.0 has no nesting).

4. 🎨 Colors

Preset 1–6 (or #hex) β€” assign meaning, not aesthetics:

#ColorMeaning
1 πŸ”΄RedCritical / deprecated
2 🟠OrangeReference / outputs
3 🟑YellowIn-progress / plans
4 🟒GreenStable / infra
5 πŸ”΅CyanCore / hub
6 🟣PurpleKnowledge / skills

5. 🧷 Edges & Order

  • 🧭 Always set fromSide/toSide facing the target; add toEnd: "arrow" for direction; labels 1–2 verb words.
  • πŸͺœ Z-order = array order: groups FIRST (background), then text, then file/link (foreground, clickable). Containment is geometry-only β€” a node belongs to a group when it falls fully inside its bounds.
  • πŸ†” IDs kebab-case: grp-*, f-*, txt-*, lnk-*, e-from-to.

6. βœ… Verify

  • Every fromNode/toNode references a real node id.
  • Groups precede their contained nodes in the array.
  • Coordinates are multiples of 20; no unintended overlap.
  • file paths are content-root-relative and exist.
  • Colors encode meaning; JSON valid, 2-space indent, no // comments.

The deploy β†’ screenshot β†’ evaluate loop is the main agent’s job; author the JSON to pass it first time. Diagram form instead β†’ 🧜 MermaidGuru.