The page editor's live preview mode edits plain Markdown while hiding the markup and drawing what it means — the way Obsidian edits. This design finished it so it can be the editor most people use, and made the mode a per-user choice. Status: implemented on main (2026-11-01); full design in the repo at docs/superpowers/specs/2026-11-01-live-preview-completion-design.md. Related: ObsidianBlockReferencesDesign.
Both modes edit the same text, so switching is free and lossless. Nothing in live preview may change the document except an explicit user edit — not toggling, not mounting, not moving the caret, not drawing a widget. A round-trip test enforces this and was mutation-tested to confirm it goes red when a widget dispatches a change.
| Construct | Live-preview rendering (off the caret's line) |
|---|---|
| GFM tables (top-level) | a real table; cells use a text-only inline renderer (no HTML from page text); clicking a row puts the caret on that row's source line |
[{…}]() plugins, variables, access rules | labelled chips — ⚙ TableOfContents, a lock chip view: Admin, Editors, $username |
| Autolinks and bare URLs | styled as links, < > hidden |
Reference links [t][r] | styled as links only when a matching definition exists (CommonMark label rules) |
Footnotes [^1] / [^1]: … | superscript and definition chips (both readers render footnotes) |
| Backslash escapes, setext headings, HTML blocks | escape hidden; heading styling; HTML shown as muted markup, never rendered |
The line under the caret always shows its raw source, so editing a table, chip or diagram means clicking into it.
wikantik.editor.mode, source or live) — no migration. GET/PUT /api/auth/profile carries editorMode; null clears it.StateField, updated only around the edit, restored keystroke cost to within 12% of the baseline.source, so a programmatic edit inside an off-caret fence could leave a stale drawing. Fixed and tested alongside tables.[^1]: word is a link-reference definition, [^1]: two words a paragraph — so footnote handling had to cover both.A ProseMirror rich-text mode (the preference is a string enum to leave room for it), table-editing UI, and rendering raw HTML. Phase 2–4 Obsidian syntax (==highlight==, %% %%, inline #tags) will add its own live-preview support.