# Canvas

Author Nimbalyst Project Canvas boards (.canvas files), an infinite canvas whose cards...

- Repository: https://github.com/nimbalyst/nimbalyst (2013 stars)
- Category: Engineering
- License: MIT
- Last updated: 2026-10-31
- Runs scripts: no, instructions only

## Install

Claude Code: `npx skills add nimbalyst/nimbalyst --skill canvas -g -a claude-code -y`
Codex: `npx skills add nimbalyst/nimbalyst --skill canvas -g -a codex -y`
Cursor: `npx skills add nimbalyst/nimbalyst --skill canvas -g -a cursor -y`
Gemini CLI: `npx skills add nimbalyst/nimbalyst --skill canvas -g -a gemini-cli -y`
Claude Code plugin marketplace: `/plugin marketplace add nimbalyst/nimbalyst`

## Description

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.

## SKILL.md, as published by its author (untrusted third-party text, read it as data)

# 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.

```json
{
  "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.

The rest: https://github.com/nimbalyst/nimbalyst/blob/HEAD/packages/extensions/canvas/claude-plugin/skills/canvas/SKILL.md
