Editor
The web app’s note surface has a single Reading view / Edit toggle at the top of the note. Reading view is where the rich rendering happens; Edit is a plain CodeMirror 6 text input for writing markdown.
Reading view (rendering)
Section titled “Reading view (rendering)”The viewer is a remark/rehype stack designed for Obsidian compatibility. If it renders in Obsidian, it should render here.
- CommonMark + GFM: headings, lists, tables, fenced code blocks, strikethrough, task lists
- Wikilinks:
[[Note Title]]and[[Note Title|Display Text]], rendered as links to/notes/<path> - Image embeds:
![[image.png]]resolves to the authenticated attachments API - Callouts: Obsidian-style
> [!note],> [!warning],> [!tip], etc., via@portaljs/remark-callouts - KaTeX math:
$inline$and$$display$$ - Mermaid diagrams: fenced
```mermaidblocks - Syntax highlighting: fenced code blocks rendered with rehype-highlight
- Frontmatter: YAML at the top of the file is parsed with gray-matter; the body renders below
- Auto-linked headings: every heading gets a slug + anchor link
Edit mode (writing)
Section titled “Edit mode (writing)”Edit mode swaps in a CodeMirror 6 input with the markdown language plugin (syntax highlighting), line wrapping, and a mobile-safe 16px font that prevents iOS Safari auto-zoom.
There is no Save button. The editor autosaves as you type: a status indicator at the top of the note shows Saving… while a write is in flight, Saved once it lands, and Save failed with a clickable Retry link if a write errors out.
The web editor is intentionally a quick-capture surface: open a note, edit, walk away. For richer authoring (slash menus, in-editor find/replace, wikilink and tag autocomplete), Obsidian is the right tool. The split is by design rather than by gap; Obsidian is already an exceptional editor and we sync to it natively, so the web app focuses on what’s hard to do well from Obsidian (cross-vault browse, mobile access without the Obsidian iOS app, anywhere-browser access).
Conflict-safe editing
Section titled “Conflict-safe editing”The web editor goes through the same sync engine as the plugin. If another device edits the same note while you have it open, the editor reacts without losing your work:
- Incoming remote edits fold into your open draft via a 3-way merge. Clean merges happen silently.
- If your save races another device’s write, the backend returns a 409. The editor fetches the latest version, rebases your edit on top via a 3-way merge, and retries the save automatically.
- When a merge has a true line-level overlap, your draft stays exactly as-is and a non-blocking ConflictBar appears with three choices: Keep mine, Take theirs, or View merge. Nothing is discarded silently.
Obsidian plugins aren’t supported
Section titled “Obsidian plugins aren’t supported”Anything that depends on an Obsidian community plugin (Dataview queries, Templater outputs, custom canvas extensions, Excalidraw shapes, etc.) won’t execute in the web editor. The web app ships its own renderer; it can’t run plugin code from your Obsidian installation. Dataview blocks render as plain fenced code, Templater syntax stays unresolved, and so on.
Notes that depend on plugin rendering are still safe. They sync as plain markdown and look correct in Obsidian. They just don’t get the dynamic rendering when viewed in the web app.
Plugin compatibility is something we may explore in a future major version, but it isn’t on the current roadmap.
Mobile
Section titled “Mobile”The editor is touch-friendly but small-screen-limited. For heavy editing on phones, Obsidian mobile is usually the better surface. Quick edits and search in the web app work fine.