Every save, and every rewrite from outside, is kept as a version. If an agent rewrites the file while you are editing, neither side is lost. A small, fast, native macOS app. Git is optional.
A Markdown viewer at heart — it edits, saves, and creates too, and the diff is the showpiece.
It began with the .md files Claude Code generates. Opening a heavy editor and right-clicking to preview was a chore — so I asked Claude Code for help and had a viewer-only 0.1 in two hours. These days it's not only Claude Code: I read the .md I write in VSCode here too — I write in an editor, and I read in MRDown. From there, one "it'd be nice if it also…" after another, it grew — until it did something no other Markdown app does: read the diff of what your AI just rewrote.
Open a file → an agent rewrites it while you are editing → nothing is silently overwritten or reloaded → last save, what is on disk, your edits — side by side, and neither is lost
What sets it apart.
Every save — and every rewrite from outside — is kept as a version. Put any two side by side and read the difference. In a Git repository HEAD joins the same list, so the diff against what's committed is right there too. Restore any version in one click; nothing is written until you save. Git is optional.
HTML is sanitized with DOMPurify and locked down with a strict CSP. Markdown you didn't write — or that was written seconds ago by something else — opens without a second thought.
When the file changes on disk the preview re-renders, holds your scroll position, and keeps that version too. If it changes while you're editing, neither side is thrown away. Three columns — last save, what's on disk, your edits — and only the lines you both rewrote differently are marked as conflicts. Nothing is silently overwritten, and nothing is silently reloaded.
Links to local Markdown files open right here instead of the browser, so you can walk a set of cross-linked documents without ever leaving. External links go to your browser; heading anchors scroll.
Write on the left, see it on the right. ⌘S to save, drag the divider to resize.
⌘F searches the document, with regex, case and whole-word toggles. In preview, matches span inline formatting.
⌘⇧F searches every open document at once, matching all your words on the same line. Results are grouped by document; pick one to land on the line.
Open documents live in a sidebar — switch by click or with ↑/↓, close with the ×, restored next launch. Drag a row (or ⌘↑/⌘↓) to reorder; ⌘/⇧-click picks several and moves them as one block.
⌘⇧M hides every piece of chrome and centres the text. Settings offers GitHub Light / GitHub Dark, so a document reads the way it will on GitHub.
Open a folder to list its Markdown in a left-hand tree, expanding and collapsing subfolders.
A heading outline in a column of its own, right of the document. The heading you're reading highlights as you scroll, and it follows you while you edit. ⌘2 toggles it, and it steps aside while you edit so the split editor and preview keep their width. Settings can move it into the left sidebar.
Enter continues lists, Tab indents, brackets auto-close. Paste a URL onto a selection to link it; paste an image to save and insert it.
Accent, background and text colors, body font and size. The background applies to the whole window.
Tables, syntax-highlighted code, quotes, local images and Mermaid diagrams. YAML frontmatter is tidied into a collapsed metadata card.
In-progress edits and never-saved untitled docs are kept as drafts and restored on next launch.
KaTeX typesets your formulas, footnotes render as a cross-linked section, and task lists become checkboxes.
⌘⇧E writes one self-contained HTML file. ⌘P opens the print dialog to save a PDF.
Keep your hands on the keyboard.
Download a prebuilt binary
A signed and notarized macOS build (Apple Silicon / Intel, macOS 10.15+) with an Apple Developer ID, so it opens normally once downloaded.
Or build from source
# Clone $ git clone https://github.com/MR-TABATA/MRDown.git $ cd MRDown # Install dependencies $ npm install # Run in dev $ npm run tauri dev # Build for release $ npm run tauri build