3.0 KiB
type, id, title, status, date
| type | id | title | status | date |
|---|---|---|---|---|
| ADR | 0107 | Markdown-durable tldraw whiteboards in notes | active | 2026-05-03 |
Context
Tolaria notes are durable Markdown files, while whiteboard editing needs an interactive canvas with structured shape data. tldraw provides a mature React whiteboard runtime and exposes snapshot APIs that can persist the document without using browser-local persistenceKey storage.
The storage decision needs to preserve Tolaria's filesystem source-of-truth rule: deleting local caches must not lose a board, raw mode must expose the canonical source, and Git should track the board together with the surrounding note.
Decision
Tolaria will support whiteboards as Markdown-durable fenced tldraw blocks backed by tldraw document snapshots.
The implementation:
- Converts fenced
tldrawblocks into temporary placeholders before BlockNote parses Markdown. - Replaces those placeholders with
tldrawBlockschema blocks that store a stable board id and tldraw document snapshot JSON. - Renders each block with the
tldrawpackage inside the rich editor. - Debounces tldraw document changes into BlockNote block props so Tolaria's normal autosave writes the snapshot into the
.mdfile. - Serializes
tldrawBlocknodes back to fenced Markdown before save, raw-mode entry, and editor-position snapshots. - Adds a
/whiteboardslash command that inserts the same block format.
Session state such as camera position, selected shapes, and selected tools is not persisted into the note. Preview images are intentionally omitted from the initial design; they may be introduced later as derived cache artifacts for note lists, search results, or graph cards.
Options considered
- Markdown fenced block with tldraw document snapshot (chosen): keeps the board in the note file, matches Tolaria's Mermaid/math round-trip model, and works for both full whiteboard notes and embedded boards inside larger notes.
- tldraw
persistenceKey/ IndexedDB: simplest app integration, but violates the vault-as-source-of-truth rule and would lose boards when browser storage is cleared. - Separate
.tldrfiles embedded from Markdown: keeps JSON out of prose notes, but fragments note ownership, makes embedded boards harder to move with their parent note, and complicates Git history for small board edits. - Preview-image-first storage: useful for thumbnails, but not editable source. It would make the PNG an attractive but stale source of truth.
Consequences
src/utils/tldrawMarkdown.tsis the canonical parser/serializer bridge for whiteboard blocks.src/components/TldrawWhiteboard.tsxowns the tldraw runtime integration and only persists document snapshots.- Raw mode remains a direct source editor for the fenced JSON.
- Embedded whiteboards and future full-note whiteboard templates share the same storage format.
- Asset support is deferred; when added, asset bytes should live in vault-relative attachment paths referenced from the tldraw asset records.