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.
md-reader does two things really well:
.md file 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.Local-only. No telemetry. No accounts. MIT licensed. ~10 MB installer (Tauri 2 — not a 200 MB Electron app).
.md file. md-reader opens with the file rendered.Ctrl + E (Cmd + E on Mac) to switch to Smart edit. Type into the rendered view like a Word doc.Ctrl + S to save back to disk. Reopen the file in any other editor — it's clean markdown.That's the whole loop.
Open a file in md-reader, 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:
# prefix in sight**/*/~~ wrappers/ 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.
Ctrl + ] and Ctrl + [ widen and narrow the content column. Ctrl + \ toggles full-window width. No locked narrow band like some other readers.
Ctrl + B toggles the file browser. The outline (📑 button) shows your document's headings — click to jump. Both can resize by dragging the right edge.
Ctrl on Windows/Linux, Cmd on macOS. md-reader 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 |
Toggle files panel |
Ctrl + + / Ctrl + - / Ctrl + 0 |
Zoom in / out / reset |
Ctrl + ] / Ctrl + [ |
Wider / narrower content column |
Ctrl + \ |
Toggle full-window content width |
Esc |
Close find / settings / file menu |
Ctrl + , to open. A few that matter:
Pick the channel that fits:
I read everything. PRs welcome.
xcode-select --install)webkit2gtk-4.1, libgtk-3-dev, libayatana-appindicator3-dev, librsvg2-devgit 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
tauri-plugin-store so they persist across restarts. Tear-out spawns a fresh md-reader.exe process 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
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 Lightroom-style resizable panel
lib/FileBrowser.svelte single-level dir tree
lib/Toc.svelte document outline
lib/Find.svelte Ctrl+F search
lib/Settings.svelte settings panel
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
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.