A Markdown reader and editor built for the AI era.
Re-renders as Claude, ChatGPT, or Cursor writes. Edit visually, without ever seeing ## or **.
Every AI tool — Claude, ChatGPT, Gemini, Cursor — writes in Markdown by default. That's great, until you actually want to read the output without alt-tabbing into a code editor, or edit it without your non-technical teammates panicking at the ## and ** symbols.
Fox MD does two things really well:
- Reading. Open a
.mdfile by double-clicking it. The app re-renders live while your AI is still writing. No vaults, no folders to set up, no "trust this workspace" prompts. - Editing. A WYSIWYG mode (called Smart edit) where markdown syntax is never visible. You type into the rendered view like it's a Notion or Word document. Bold, italics, headings, lists, tables, links — all there, none of the symbols. Saves clean markdown back to disk.
Local-only. No telemetry. No accounts. MIT licensed. ~10 MB installer (Tauri 2 — not a 200 MB Electron app).
- Download the installer for your OS from the badges above.
- Double-click any
.mdfile. Fox MD opens with the file rendered. - Press
Ctrl + E(Cmd + Eon Mac) to switch to Smart edit. Type into the rendered view like a Word doc. Ctrl + Sto save back to disk. Reopen the file in any other editor — it's clean markdown.
That's the whole loop.
Open a file in Fox MD, kick off a Claude or ChatGPT task that writes to the same file. The viewer re-renders as the content arrives, with a brief highlight on the lines that just changed. Smart-scroll keeps you anchored — it only follows the edit if you're already near it, so you don't get yanked away mid-read.
Hit Ctrl + E and the file becomes editable in place. The markdown symbols disappear:
- Headings render at their proper size — no
#prefix in sight - Bold / italic / strikethrough show their actual styling, not the
**/*/~~wrappers - Links look like links, click the toolbar pencil to change the URL
- Bullet and numbered lists with proper indentation, hit Tab/Shift-Tab to nest
- Tables with right-click row/column controls
- Code blocks with syntax highlighting
- Slash menu — type
/on a blank line to insert a heading, list, table, divider, etc.
On save, you get clean markdown back to disk. Round-trip safe — reopen the file in VS Code or any other editor and it's exactly the markdown you'd expect.
If you ever need the raw source, hit the Raw sub-toggle next to the Edit button. Power users keep their muscle memory; non-technical users never have to look at the syntax.
Drop a folder of .md files onto the window — each becomes a tab. Drag a tab outside the window to tear it off into its own native window. Tab order persists across restarts.
The toolbar's width control is a miniature page: the lines of text inside it are
as wide as your real content column. Nudge it with ‹ / ›, drag straight
across it, or scroll over it. ⤢ fills the window. Ctrl + ] / Ctrl + [ /
Ctrl + \ do the same from the keyboard. No locked narrow band like some other
readers.
Ctrl + B collapses and restores the whole panel. When it's collapsed, hover the
window's left edge and it slides out for as long as you need it — pin it to dock
it again. The 📁 and 📑 buttons choose which sections the panel shows.
The outline tracks your position: as you scroll, the heading you're reading stays highlighted, so you always know where you are in a long document. Drag the divider between Files and Outline to give either one more room, or the panel's right edge to make the whole thing wider.
Every tab keeps its own scroll position, so switching between open files doesn't scramble any of them. Close Fox MD, reopen the file, and you land where you left off — with a quiet ribbon marking the spot, and a marker in the right gutter to travel back to it if you've wandered. Turn either off in Settings → Reading position.
Ctrl on Windows/Linux, Cmd on macOS. Fox MD binds both, so muscle memory transfers either way.
| Shortcut | Action |
|---|---|
Ctrl + T / Ctrl + O |
Open file in new tab |
Ctrl + W |
Close active tab |
Ctrl + Tab / Ctrl + Shift + Tab |
Cycle tabs |
Ctrl + E |
Toggle View ↔ Smart edit |
Ctrl + S |
Save (edit mode) |
Ctrl + F |
Find in document |
Ctrl + , |
Settings |
Ctrl + B |
Collapse / restore the side panel |
Ctrl + + / Ctrl + - / Ctrl + 0 |
Zoom in / out / reset |
Ctrl + ] / Ctrl + [ |
Wider / narrower content column |
Ctrl + \ |
Toggle full-window content width |
Ctrl + Shift + D |
Diff sidebar (Live Edit Theatre) |
Esc |
Close find / settings / file menu / diff sidebar |
Ctrl + , to open. A few that matter:
- Theme — Auto (follows your system), Light, Sepia, or Dark. The toolbar has a one-click ☀ / ◐ / ☾ switch too.
- Default edit mode — Smart (WYSIWYG) or Raw (markdown source). You can always flip per-tab via the toolbar.
- Content width — slider from 40 to 160 characters, or "Full window" for wide docs.
- Smart-diff (optional) — paste an Anthropic or Groq API key and Fox MD can summarise what changed in a file since you opened it. Keys are kept in your OS credential store. Off by default; nothing is sent unless you enable it.
- Reading position — resume where you left off across sessions, and whether to mark the spot with a ribbon. Per-tab positions always persist while the app is open.
- Advanced features — 🎬 Live Edit Theatre: when an AI is writing to the file you have open, Fox MD recedes into a focused view, glows green on the block being written and fades it to yellow as it settles, and can show a per-section diff sidebar (
Ctrl + Shift + D) with an optional LLM summary. Off by default.
Pick the channel that fits:
- Found a bug? → Open a bug report. A short repro is gold.
- Want a feature? → Open a feature request. Tell me the workflow that's broken, not just the fix you want.
- General "what should this become?" or "this idea is fuzzy" → Discussions (if enabled).
I read everything. PRs welcome.
Build from source (devs only)
- Node.js 20+
- Rust 1.78+ (via rustup)
- Platform C++ toolchain:
- Windows: Microsoft C++ Build Tools + WebView2 (preinstalled on Win10/11)
- macOS: Xcode Command Line Tools (
xcode-select --install) - Linux:
webkit2gtk-4.1,libgtk-3-dev,libayatana-appindicator3-dev,librsvg2-dev
git clone https://github.com/kumaradarsh1993/md-reader
cd md-reader
npm install
npm run tauri dev # dev mode with HMR + native window
npm run tauri build # produces installer in src-tauri/target/release/bundle/Frontend-only (no Rust required, useful for UI work):
npm run dev # Vite dev server on :1430
npm run check # svelte-check- Backend: Tauri 2 + Rust. Markdown rendering via comrak with syntect-highlighted code blocks. File watching via notify with an mtime poll fallback for cloud-drive paths (OneDrive's reparse points break inotify).
- Frontend: SvelteKit (Svelte 5 runes) + Vite. Smart edit mode via Milkdown (a ProseMirror-based WYSIWYG that round-trips through remark AST — guaranteed clean markdown out). Raw edit via CodeMirror 6. Math via KaTeX, diagrams via Mermaid, both lazy-loaded.
- Tabs: Stored in
tauri-plugin-storeso they persist across restarts. Tear-out spawns a freshmd-reader.exeprocess per torn-out window (more reliable on Windows than in-process window-spawn).
src-tauri/ Rust backend (Tauri 2)
src/markdown.rs comrak + syntect → HTML, with data-sourcepos
src/watcher.rs notify-debouncer-full, watches parent dir
src/commands.rs IPC commands (file ops, list_dir, spawn_window)
src/lib.rs plugins, CLI args, single-instance
examples/inspect.rs diagnostic harness — dump rendered HTML
src/ SvelteKit frontend (Svelte 5 runes)
routes/+page.svelte app shell
lib/Viewer.svelte rendered output + live-follow + scroll memory
lib/SmartEditor.svelte WYSIWYG editor (Milkdown / Crepe, lazy)
lib/Editor.svelte raw markdown editor (CodeMirror 6, lazy)
lib/TabBar.svelte tabs with drag-tear-out
lib/LeftPanel.svelte collapsible resizable panel + hover-peek
lib/FileBrowser.svelte single-level dir tree
lib/Toc.svelte document outline with scroll-spy
lib/WidthControl.svelte visual content-width control
lib/ResumeRibbon.svelte "you left off here" marker
lib/Find.svelte Ctrl+F search
lib/Settings.svelte settings panel
lib/outline.ts heading parser (ATX + setext, fence-aware)
lib/view-nav.svelte.ts Viewer ↔ Outline bridge (source-line based)
lib/post-render.ts heading id assignment + lazy KaTeX/Mermaid
lib/tabs-store.svelte.ts tabs state (open/close/reorder/persist)
lib/settings-store.svelte.ts persisted settings via tauri-plugin-store
lib/theatre/ Live Edit Theatre (opt-in cinema view + diff)
docs/ GitHub Pages landing site (static)
test-fixtures/ round-trip fixture for smart-edit testing
See CHANGELOG.md for release notes.
MIT — see LICENSE if present, or the license field in package.json.