Canvas-first
An infinite canvas is the primary surface, not a folder tree. Place notes where they make sense, draw the connections, group what belongs together, auto-arrange, or present them one by one.
Self-hosted · Obsidian-compatible · Open source
A canvas-first notebook over a plain markdown vault — spatial where a folder tree is flat, and yours in files that outlive the app.
An infinite canvas is the primary surface, not a folder tree. Place notes where they make sense, draw the connections, group what belongs together, auto-arrange, or present them one by one.
Every note is a plain .md file with YAML frontmatter. The app and Obsidian are two writers of the same vault — your notes open anywhere and outlive the app.
Optional local embeddings (Ollama · bge-m3) find notes by concept, not just keyword, and surface links you never made. Turned off? Fast full-text search still works.
Wikilinks become candidates on the canvas; label a connection or promote it to an edge. Near-duplicate and related-section detection help you fold scattered notes into one.
Navigate, create, link, read and present without reaching for the mouse. The canvas is built to be driven from the keys.
Runs in Docker on your own box, behind one login. No accounts to create, no cloud, no telemetry — one person's vault, and it never leaves the machine.
vault/. Delete everything else.
The search index and embeddings are derived state — they rebuild themselves. Only your markdown is precious, and it's just files on disk.
Built with React + React Flow · CodeMirror · Hono · SQLite + sqlite-vec · Ollama