mkdn
the reading side of the agentic loop. code, diagrams, and math, rendered natively and updated live.
Philosophy
Review, not write
not a code editor. a viewer built for comprehension — select anything and leave a comment your agent reads back.
Native, not Electron
pure SwiftUI. launches instantly, idles at nothing, feels like it belongs on your Mac.
Live, not stale
File watching at the kernel level. When an agent writes a file, mkdn re-renders it instantly. No reload button.
what agents produce, rendered natively
Mermaid diagrams
flowcharts, sequence diagrams, state machines, all inline and interactive.
Syntax highlighting
Tree-sitter highlighting across 17 languages. Code blocks with language labels, themed backgrounds, and click-to-copy.
LaTeX math
block and inline equations. renders like a textbook, not a code block.
Tables, lists, rich text
full CommonMark. tables size to their content, select like real text, and paste straight into a spreadsheet.
Solarized theming
dark and light modes that match your terminal. built for long sessions.
Directory browsing
point it at a folder. sidebar, file watching, the whole tree at a glance.
Fast on big documents
the first screen paints in about a third of a second. the rest fills in quietly behind it.
A marker track
headings and comments plotted along the right gutter. tap to jump, drag to scrub, or swap in a minimap.
VoiceOver-ready
custom rotors for headings, links, and comments. tables read with column context.
Get started
macOS 14.0 or later.
brew install jud/mkdn/mkdn
git clone https://github.com/jud/mkdn.git && cd mkdn && swift run mkdn
comments that live in the file
select text — a word, inline code, mid-sentence — and comment on it. the comment is stored in the
.mdfile itself, so it survives in git, passes invisibly through other renderers, and re-finds its text when the prose around it moves.18 seconds: a comment, and an agent replying to it from the CLI — watch with sound.
A rail of cards
comments sit beside the text they annotate and follow it as you scroll. click a card to jump to its spot. replies thread underneath.
Survives outside edits
rewrite the prose in another editor, merge a branch — the comment re-anchors by what its text says, not where it sat.
Headless for agents
no window needed. an agent lists comments as JSON, replies into the thread, or blocks until you leave a new one.