inkfinite (an infinite canvas/whiteboard) monorepo ink.stormlightlabs.org
svelte rust tauri svg canvas perfect-freehand
TypeScript 50%
Rust 38%
Svelte 10%
JavaScript 1%
CSS <1%
<1%
HTML <1%
Nix <1%
D2 <1%
Mermaid <1%

README.md

Inkfinite #

Inkfinite is a local-first infinite canvas for drawing, wireframing, and diagramming. It runs in the browser or as a desktop app.

What you can do #

  • Draw and edit rectangles, ellipses, lines, arrows, text, Markdown, freehand strokes, and native vector paths.
  • Organize work with pages, layers, groups, nested containers, and a built-in stencil library.
  • Pan, zoom, select, transform, reorder, style, undo, and redo directly on the canvas.
  • Store boards in your browser or work with local, Automerge-backed .inkfinite files in the desktop app.
  • Import static SVG, Excalidraw, and Obsidian Canvas content. Export SVG, PNG, Excalidraw, and Obsidian Canvas files.
  • Inspect, query, edit, validate, and render saved files or open desktop sessions from the CLI.
  • Let coding agents propose changes for review in the desktop app or apply them directly when you enable direct access.

Run from source #

You need Node.js 18 or newer, pnpm, and Rust 1.89. The desktop app also requires the Tauri 2 prerequisites for your OS.

To get started, clone the repo & install the front-end toolchain/deps:

pnpm install

The browser app also needs the Rust WebAssembly target and the wasm-bindgen CLI version used by Cargo.lock:

rustup target add wasm32-unknown-unknown
cargo install wasm-bindgen-cli --version 0.2.126 --locked
pnpm wasm:build
pnpm dev:web # adding --open will open your browser

To start the desktop app:

pnpm tauri dev

To build the CLI used by scripts and live desktop sessions:

cargo build -p inkfinite-cli --bin inkfinite
./target/debug/inkfinite --help

# Build an installable release tree with the binary, man page, and completions.
cargo xtask dist

See the CLI documentation for installation paths and shell completion setup.

Documentation #

Credits #

I was inspired by fantastic apps in the space like Excalidraw and more recently, tldraw. tldraw offline in particular was so cool that it kicked off a lot of other agent-capable projects.

The choice to use perfect-freehand came from playing around with this react flow demo.

The SVG capabilities were inspired by this post.

License #

Inkfinite is licensed under Apache-2.0.