Canvas
Author Nimbalyst Project Canvas boards (.canvas files), an infinite canvas whose cards...
Install
npx skills add nimbalyst/nimbalyst --skill canvas -g -a claude-code -y- Repository
- nimbalyst/nimbalyst2k
- Category
- Engineering
- Updated
- 4d ago
- License
- MIT
- Context cost
- Mediumabout 2,495 tokens
- Runs scripts
- No, instructions only
What it does
Author Nimbalyst Project Canvas boards (.canvas files), an infinite canvas whose cards are live editors for real workspace files and shared documents, arranged spatially and wired with edges. Use when the user asks for a canvas, a board, a spatial layout of documents or mockups, a flow of screens, or a workspace overview.
Project Canvas
A .canvas file is a board: an infinite canvas whose cards can be sticky notes, text, images, frames, or live editors mounted on real workspace files and shared documents. A mockup card renders the mockup. A spreadsheet card renders the grid. A mindmap card renders the mindmap.
The editor is built into Nimbalyst, so any workspace can open a .canvas file you write. Write the JSON directly with the Write tool; there is no MCP tool for boards.
When to use a canvas
- Laying out several existing files spatially, screens of a flow, docs in a workstream, a review board
- A workspace or project overview that mixes documents, mockups, data, and notes
- Anything where the point is the arrangement of real artifacts, not a drawing
Use Excalidraw for freeform drawings and architecture sketches. Use MockupLM for a single UI screen. A canvas is the thing that holds several of those at once.
File format
JSON Canvas 1.0 superset. Every spec field keeps its spec meaning, Nimbalyst data lives under x-nimbalyst, and unknown keys at any level are preserved verbatim so a board written by another tool survives a round-trip.
{
"nodes": [],
"edges": [],
"x-nimbalyst": {
"version": 1,
"meta": {
"name": "Onboarding flow",
"description": "Sign-up through first document",
"viewport": { "x": 0, "y": 0, "zoom": 1 }
}
}
}
meta.viewport is the board's deliberate home view, where a reader lands on open. Each user's own scroll position is stored separately, so setting this is a choice about the board, not about you. Omit it and the board opens fit-to-content.
Nodes
Every node needs id (unique, non-empty), type, and x / y / width / height. Geometry is written as integers; the editor rounds on save either way.
