Skip to content

canvas

Generate the Blueprint Map: a JSON Canvas 1.0 .canvas file, the spatial counterpart to the index, opened in Obsidian’s Canvas view.

It draws blueprints and the edges between them. The framework is the one thing it never draws.

The way its framework declares, in the collection’s - **Canvas:** line:

Declaration Draws as
file A full-file node — for prose meant to be read whole, like a frame.
card A node embedding the blueprint.
card from ## Section A node embedding just that section.
(absent) A plain card.

Structurally: each collection is its own group, and a grouped collection nests a group per sub-folder.

Each blueprint’s connects_to links become directed edges, this → target. That’s the intentional map — what you’re asserting relates to what.

depends_on is off by default, and can be overlaid in a distinct colour. It answers a different question (implementation dependency rather than conceptual connection), and mixing the two produces a diagram that means nothing. The distinction →

Which collections to include. Top-level documents aren’t mapped.

The generated .canvas is itself a top-level document — register it in ## Top-Level in Framework.md.

Its default filename follows the naming convention: blueprint-map.canvas under kebab-case, BlueprintMap.canvas under TitleCase, Blueprint Map.canvas under Title Case. It only picks the name when you don’t pass --out, so an existing canvas keeps its name until you regenerate without one.

A build-canvas.py does the work where a shell is available; on a sandboxed host it emits the JSON by hand. Regenerable, and it never gates.