featuresreading

The reading surface

Tuned for long-form reading, with source and preview together when you edit.

Read the guide →
Fixed measure
Body text on a 70-character column in a serif reading face, with sans headings and monospace code.
Live outline
Every heading tracks your scroll position. Built from source headings, so raw HTML can never spoof it.
In-document links
Relative links, anchors, and [[wikilinks]] resolve across the workspace; dangling links stay visibly unresolved.
Big files stay smooth
Documents past a threshold render with windowed virtualization; scroll position survives even inside one long block.

featuressearch

Search that shows its work

One query, five intents, and provenance on every hit.

Read the guide →
Five intents
Best (hybrid), Exact (lexical), Semantic, Recent, and Related. Switch with Cmd/Ctrl + 1 through 5.
Typed filters
tag:, path:, after:, and linked-to: pass straight to the engine; unknown fields report inline.
Score you can read
Hover any hit for the RRF score, each boost, and the per-modality ranks.
Provenance breadcrumb
source › file › heading, every segment clickable, landing you on the exact lines.

featuresmarkdown

Full Markdown, rendered by one pipeline

GitHub-Flavored Markdown, math, and diagrams use the same pipeline as the desktop app.

Read the guide →
GFM
Tables, task lists, strikethrough, autolinks, and footnotes.
Code
Syntax highlighting via Shiki with dual light/dark themes.
Math
Inline and display math via KaTeX.
Diagrams
Fenced mermaid blocks render as diagrams inline.

featureslocal-first

Local-first by construction

Your Markdown is the source of truth; the private index stays in MDReader’s app data directory.

Read the guide →
Explicit writes
Source Markdown remains unchanged during indexing. The editor writes Markdown only when you explicitly save.
Private, rebuildable index
CatDB stores search data and outlines in a per-library SQLite index under the operating system’s app data directory. Delete it and MDReader rebuilds it from your Markdown.
Local FastEmbed model
The desktop uses bge-small-en-v1.5 through FastEmbed. The first indexing run may download the model once into FastEmbed’s local cache.
Hybrid with a clear fallback
Once the model is ready, hybrid search runs locally. If it cannot load, the library remains readable and text search remains available; indexing and semantic ranking resume when the model loads.

mdreaderwhat it is not

Indexing and search leave source files unchanged; the editor writes only after an explicit save. MDReader does not invent structure that is absent from the text. Results link back to their source file and line range.