IndexedDB is the writer. Drive is the arbiter. The UI reads local state and never waits on the network.
Notes · Canvas · Sync
Think it. Draw it.
Keep it.
One library for the two ways ideas arrive: written down, and sketched out. Structured notes and an infinite canvas, in sync across your devices.
No account needed for the demo · Your documents stay in your own Google Drive
Documents
A note editor that treats code as content.
Write in blocks the way you think. Headings, lists, quotes, tables and checklists — with the slash menu one keystroke away, and no need to leave the keyboard.
- 17 languages, highlighted properly — Real grammars, not regex colouring, with a picker on every block.
- Light and dark, instantly — Token colours are CSS variables, so a theme switch repaints without re-rendering.
- Wiki-links and tags — Connect notes as you write, and find them again by tag rather than folder.
Cache strategy for the sync engine
IndexedDB is the writer. Drive is the arbiter. The UI reads local state and never waits on the network.
type SyncPlan =
| { kind: "push"; docId: string }
| { kind: "pull"; docId: string }
| { kind: "noop"; docId: string };
export function planSync(local: Doc, remote: Doc | null): SyncPlan {
if (!remote) return { kind: "push", docId: local.id };
// Tie goes to the remote: the arbiter is authoritative.
return remote.updatedAt >= local.updatedAt
? { kind: "pull", docId: local.id }
: { kind: "push", docId: local.id };Embedded canvas · The rule
A drawing lives inside the note, not beside it
Some ideas refuse to be sentences.
An infinite Excalidraw board lives beside every note. Draw the architecture, sketch the flow — then drop the drawing into the note it belongs to.
- Drawings embed inside notes — A canvas block is part of the document, not a link elsewhere.
- Merges shape by shape — Concurrent edits reconcile per element, so two devices never overwrite the whole scene.
- Full Excalidraw underneath — Shapes, arrows, freedraw, images, text — the real library, in your theme.
Everything you've thought, in one place.
Notes and canvases share one dashboard. Thumbnails, tags and opening lines make it obvious what you were in the middle of — and the command palette gets you there without hunting.
- Ctrl+P for anything — Jump between documents, create a note or canvas, switch theme — from one palette.
- Real URLs, always — Every document has its own address, as linkable as a page.
- Private by default — Documents stay on your device until you sync, and only you can read them.
Documents
Offline-first. Eventually everywhere.
Write on a plane, close the laptop, open it again on your phone. Text is a CRDT, canvases merge per element, and pending changes survive the tab closing.
- Works with the network off — A PWA that loads from cache and writes locally first — always.
- Syncs to your own Drive — Documents live in a private app folder in your Drive, in containers only this app reads.
- No vault, no lock-in — Tokens never touch the browser, and logging out leaves local documents alone.
Compare-and-swap writes
Every upload carries the revision it was based on, so a stale device can't silently clobber a newer one.
A durable outbox
Saves queue in IndexedDB. Close the tab offline and the write is still there when you return.
Saves merge, not clobber
Note text is a CRDT: edits from two of your own devices combine instead of one overwriting the other.
Deletes that stay deleted
Tombstones win on ordering, so a deleted note doesn't resurrect from another device.
The details.
Everything below is enforced by the app, not aspirational copy.
- Platforms
- Any modern browser, installable as a PWA on desktop and mobile. Nothing to download.
- Offline
- Full read and write offline. Documents load from an on-device mirror; the outbox holds pending saves.
- Sync model
- Per-document last-write-wins with tombstones, plus character-level CRDT merge for note text.
- Canvas merge
- Scenes reconcile element by element using Excalidraw's own restore/reconcile primitives.
- Languages
- 17 curated grammars, from TypeScript and Rust to SQL, YAML, Dockerfile and Markdown.
- Theming
- Dual light/dark themes for the app and for every code block, switched at runtime.
- Storage
- A private appDataFolder in your own Google Drive. No shared server holds your documents.
- Auth
- Google sign-in. Tokens are encrypted into an HttpOnly cookie; the browser never sees them.
- Keyboard
- Ctrl/Cmd+P command palette, Ctrl/Cmd+S to sync, plus the editor's own slash menu.
Start with one thought.
Sign in with Google and the first note is already waiting. Or take the demo for a walk first — no account, nothing saved.