Built with SwiftUI & Liquid Glass for macOS 26

A markdown viewer
that feels truly native.

Reader.md renders your local and remote markdown with real Mermaid diagrams, LaTeX math, and syntax highlighting — wrapped in a native Mac window that reads like it shipped with the OS.

architecture.md
⇧⌘F⌘E

The SwiftUI shell hosts a resizable sidebar, the content pane, and a collapsible outline. The markdown itself renders in a bundled WKWebView.

swift
class AppState: ObservableObject {
  @Published var roots: [RootFolder]
}
mermaid ✓katex ✓highlight.js ✓
OUTLINE
Architecture
SwiftUI shell
AppState
MarkdownWebView
4 markdown files·0 words·6 min readLiquid Glass
EVERYTHING NATIVE

A real Mac app, not a wrapper.

Remote SSH folders

Add a folder from any VPS. Reader.md rsyncs it read-only into a local cache and shows it like any root — reusing your ~/.ssh config, storing no credentials.

Diagrams & math, for real

Bundled Mermaid, KaTeX, and highlight.js render diagrams, LaTeX, and code with no network access. The one thing a native view can't do, done right.

Multi-folder & quick open

Add any number of roots, drag to reorder, and jump anywhere with a ⌘P fuzzy switcher that spans every folder at once.

Liquid Glass chrome

On macOS 26 the toolbar, sidebar, outline, and palettes read as real Liquid Glass — with an automatic NSVisualEffectView fallback on 13–15.

Live reload

An FSEvents watcher re-renders the open file with scroll preserved and refreshes the tree the moment anything changes on disk.

Keyboard-first

Open, filter, find, navigate history, resize the column, and export — all without leaving the keyboard. Full map in the docs.

REMOTE FOLDERS

Your server's docs, on your desktop.

Point Reader.md at me@vps:/srv/docs and it pulls a read-only mirror into a stable cache — auto-syncing on launch, re-syncing on demand, and keeping a cloud badge with live sync state. Pull-based and one-way: it never writes back.

$ reader remote me@vps:/srv/docs
Sidebar
Filter files
FOLDERS
docs
architecture.md
setup.md
vps:/srv/docssynced
deploy.md
runbook.md
rsync · 2m ago · read-only
pipeline.md
Rendering pipeline
markedMermaidWKWebView
E · dA=Qε0
js⧉ copy
const html = marked.parse(md);
mermaid.run();  // diagrams
katex.render(tex, el);
RENDERING

Diagrams, math & code that render.

The content pane is a WKWebView driven by bundled marked, Mermaid, KaTeX, and highlight.js — the exact things a native text view can't do. YAML frontmatter renders as a clean key/value table, and everything works fully offline.

Code copy buttonsImage lightboxHeading anchors
KEYBOARD & CLI

Driven entirely from the shell.

⌘P
Quick open
⌘F
Filter files
⇧⌘F
Find in page
⌘B
Toggle sidebar
⌘E
Export PDF
# open a file, a folder, or piped markdown
$ reader README.md
$ reader remote me@vps:/srv/docs
$ git diff | reader -

Free, open source,
and unmistakably Mac.

MIT-licensed. Requires macOS 13+. Liquid Glass lights up on macOS 26 (Tahoe).

# tap, trust, then install
brew tap jnahian/reader.md https://github.com/jnahian/reader.md
brew trust --cask jnahian/reader.md/reader.md
brew install --cask reader-md

# already installed and Gatekeeper still complains?
xattr -dr com.apple.quarantine "/Applications/Reader.md.app"

The brew trust step is required before installing from this tap.