InkFlow: a local-first infinite canvas with a C++ and WebAssembly engine
InkFlow is an infinite-canvas web app for thinking and organizing tasks that works without sign-up and keeps data in the browser. Drawing runs on a C++ engine compiled to WebAssembly, collaboration happens in real time across devices, and handwriting turns into tasks with in-browser text recognition.
Client and context
Productivity tools tend to become endless lists. InkFlow does the opposite: dump ideas on a free canvas and pull one task at a time into a focus mode with a timer.
The problem
“I want to sketch ideas like on paper, with no account, without my data going to a server, and turn the sketch into a task.”
Constraints
- Smooth drawing even on tablets, without freezing the page.
- User data only on the user's device.
- Cross-device collaboration without a data server of its own.
Decisions and trade-offs
A C++ drawing engine compiled to WebAssembly
Why: Stroke computation leaves JavaScript and gets close to native performance. The cost is one more build step.
Local-first with IndexedDB (Dexie.js)
Why: Works offline and without sign-up; users can export everything. No central database to maintain and no personal data in custody.
Peer-to-peer sync with Y.js and WebRTC
Why: Devices talk directly to each other; only signaling goes through a light worker. No data server.
Text recognition in a Web Worker
Why: OCR (Tesseract.js) runs in the background, so handwriting becomes a task without freezing the canvas.
What we built
- Infinite canvas with pen, eraser, shapes, lasso selection and PDF export.
- Task stack, Pomodoro focus mode, Eisenhower matrix and productivity heatmap.
- Magic wand: handwriting becomes a task through in-browser OCR.
- QR-code pairing and real-time collaboration across devices.
- Light and dark themes, Portuguese and English, installable as an app.






Results
- 0accounts or data servers needed to start using itSource: Live app behavior
- 3languages in the codebase: TSX, TypeScript and C++ (drawing engine)Source: InkFlow repository, Oct 13, 2026
This case's tile
Non-blank source lines by language, counted in the repository (src and wasm folders).
| InkFlow lines of code by language | lines |
|---|---|
| TSX (interface) | 3,555 |
| TypeScript (logic) | 2,437 |
| C++ (drawing engine) | 74 |
Source: InkFlow repository · 2026-10-13
Technologies
Want something at this level?
Send the problem, not a spec.