Vibecanvas
Run your agents in an infinite drawing canvas.
Runs completly local. Reuses your llm subscriptions.

The project is organized as a monorepo and follows a Functional Core / Imperative Shell architecture.
Features
- Infinite canvas UI for drawing, selecting, transforming, and grouping elements
- Canvas CLI for list/query/add/patch/move/group/ungroup/delete/reorder flows
- Agents can edit canvases too by calling the same CLI commands
- Real-time CRDT sync with Automerge for conflict-free collaboration
- Unified WebSocket API endpoint for app RPC (
/api) - Dedicated Automerge sync endpoint (
/automerge) - Native binary distribution for macOS, Linux, and Windows
- Auto-update checks in the CLI/server runtime
Quick Start
Install globally
# bun
bun add -g vibecanvas
# npm
npm i -g vibecanvas
# pnpm
pnpm add -g vibecanvas
# yarn
yarn global add vibecanvas
Then run:
vibecanvas
Open http://localhost:7496 to use the app.
You can edit the canvas from the UI, or from the CLI. Agents can use the same canvas CLI surface for scripted canvas changes.
The Vibecanvas skill for agents lives here:
For common setup/runtime questions, see the FAQ:
Upgrade vibecanvas
Vibecanvas includes a built-in upgrade command from the server CLI (apps/server/src/main.ts).
# check for updates and install
vibecanvas upgrade
# check only (no install)
vibecanvas upgrade --check
Useful related commands:
vibecanvas --version
vibecanvas --help
vibecanvas canvas --help
Uninstall
# bun
bun remove -g vibecanvas
# npm
npm uninstall -g vibecanvas
# pnpm
pnpm remove -g vibecanvas
# yarn
yarn global remove vibecanvas
If you installed using the install script (curl ... | bash) instead of a package manager, remove the installed files manually:
rm -rf ~/.vibecanvas
Also remove any PATH line you added for ~/.vibecanvas/bin in your shell profile (~/.zshrc, ~/.bashrc, ~/.profile, or fish config).
Database
- Default installed/compiled SQLite DB path:
~/.local/share/vibecanvas/vibecanvas.sqlite - Respects
XDG_DATA_HOMEon Linux/macOS-style XDG setups, so effective path is"$XDG_DATA_HOME"/vibecanvas/vibecanvas.sqlitewhen set VIBECANVAS_CONFIG=/some/dirchanges DB path to/some/dir/vibecanvas.sqliteVIBECANVAS_DB=/some/file.sqlitesets an explicit SQLite file path- Dev monorepo default DB path:
./local-volume/data/vibecanvas.sqlite - Schema source:
packages/service-db/src/schema.ts
Contributing
Contributions are welcome.
By submitting a pull request, you agree to transfer ownership of your contribution to the project maintainer. This allows the project to be re-licensed or otherwise managed without needing to contact every individual contributor.
Recommended workflow:
- Create a branch from
main. - Make focused changes with tests.
- Run relevant checks (
bun test, package-specific tests, and build checks if needed). - Open a pull request with a clear summary.
For implementation conventions and deeper subsystem docs, read:
CLAUDE.mdapps/spa/CLAUDE.mdapps/spa/src/features/canvas-crdt/CLAUDE.mdapps/spa/src/features/canvas-crdt/canvas/CLAUDE.mdapps/spa/src/features/canvas-crdt/input-commands/CLAUDE.mdapps/spa/src/features/canvas-crdt/managers/CLAUDE.mdapps/spa/src/features/canvas-crdt/renderables/CLAUDE.md
License
MIT. See LICENSE.