All features

Every shipped feature in MD View — a native Markdown reader for Windows. Workspace search, PDF/DOCX/HTML export, split view, focus mode, KaTeX math, Mermaid diagrams.

Last updated

MD View is a native Markdown reader for Windows. This page lists every shipped user-facing feature, grouped by purpose. Before designing or scoping a new feature, search this page first — odds are good it already exists.

For a print-friendly shortcut reference, see keyboard shortcuts.

At a glance — one row per feature. Full descriptions follow below.

CategoryFeatureShortcut
ReadingThemesAlt+T
Reading typographyCtrl+= / - / 0
Focus modeCtrl+D
Line numbersCtrl+Shift+L
Frontmatter metadata cardCtrl+Shift+M
Hover preview
Sticky file strip
Scroll memory
Reading HUD
Mermaid interactions
Image lightbox
Live reload
NavigationFind in documentCtrl+F
Outline (TOC) sidebarAlt+O
Heading jump[ / ]
Heading-anchor copy
Collapsible sections
Back / forward historyAlt+ /
Recent files
Quick openCtrl+K
Multi-path file open
Internal Markdown links
WorkspaceWorkspace treeCtrl+Shift+O
Workspace searchCtrl+Shift+F
Split view · ProCtrl+Alt+S
VerificationVerification layer · ProCtrl+Shift+V
Git-diff overlay · ProCtrl+Shift+D
Export & PrintPrintCtrl+P
PDF export with bookmarks · ProCtrl+Shift+E
Save as HTMLCtrl+Shift+H
DOCX export · ProCtrl+Shift+W
Mermaid SVG export
CustomizationPersisted reading toggles
Per-document fold state
OS-theme tracking
CLImdview file.md
mdview <folder> and mdview .
mdview --stdin and mdview -
Auto-detected piping
Single-instance reuse
BOM-aware decoding

Reading

Themes

Shortcut: Alt+T

Four built-in themes — light, dark, sepia, and black — cycled with the shortcut. The default tracks your operating-system theme; the override is sticky once you pick one. Mermaid diagrams re-render with the active theme so contrast holds in dark and black.

Reading typography

Shortcut: Ctrl+= · Ctrl+- · Ctrl+0

Zoom the reading column in, out, or back to the default. Persists across sessions per window. Implemented in JS keydown rather than through WebView2’s zoom — zoomHotkeysEnabled is off so the page chrome doesn’t reflow.

Focus mode

Shortcut: Ctrl+D

Dims paragraphs and blocks that are out of the current reading viewport, keeping the active block at full contrast. Driven by IntersectionObserver, so scrolling moves the focus naturally. Toggle off to return every block to full contrast.

Line numbers

Shortcut: Ctrl+Shift+L

A subtle gutter aligned to direct-child block-level elements, off by default. Numbers come from the data-line attribute the render pipeline stamps on every block-open token, so the same source-line metadata is shared with the verification layer and any other overlay.

Frontmatter metadata card

Shortcut: Ctrl+Shift+M

YAML front-matter is parsed and stripped from the rendered document. Toggle the card to see the extracted fields in a small panel — useful for files that carry title, tags, dates, or other metadata that you want to read without scrolling back to the top.

Hover preview

Hovering an internal Markdown link previews the target’s first paragraph in a small floating tooltip. No click required, no network — the resolver reads the linked file from disk and renders just enough to give context before you commit to navigating.

Sticky file strip

The active document’s tab and close button stay pinned to the top of the window while you scroll. In split view the strip shows two tabs, one per pane, each with its own close button that closes only that pane’s document.

Scroll memory

Every file remembers where you left off. When you reopen it — via recent files, the workspace tree, or mdview from the CLI — the view restores to the prior scroll position. Persistence is keyed by absolute path, so renames start fresh.

Reading HUD

A small floating indicator shows reading progress and a few quick stats while you scroll. Fades out when the page is idle so it doesn’t compete with the prose, and reappears on the next scroll.

Mermaid interactions

Mermaid diagrams render lazily and ship with a full set of in-place controls. One feature, several pieces:

  • Inline hover-toolbar: zoom in / out / reset / fullscreen.
  • Inline drag-pan; wheel intentionally does not zoom inline so the page keeps scrolling naturally.
  • Double-click inline to enter fullscreen; Esc closes, R resets, wheel zoom is cursor-anchored.
  • Smart Fit auto-scales wide diagrams to fit the container, with ~12% margin in fullscreen and never any upscaling.
  • Mini-map appears in fullscreen for diagrams Smart Fit had to shrink below ~95%; click or drag to navigate, viewport rectangle tracks pan and zoom.
  • Copy SVG and Save SVG live in the fullscreen toolbar.

Image lightbox

Click any image to open it in a full-window overlay; and cycle through every image in the document, and Esc closes. Useful for screenshots and diagrams where the in-flow size is too small to read details.

Live reload

When the file on disk changes, MD View re-renders in place and keeps the scroll position. No refresh button, no flash to blank. A debounced filesystem watcher around the open document’s parent directory re-reads on any matching event, so external editors, build steps, and AI agents rewriting CLAUDE.md show up immediately.

Learn more →

Find in document

Shortcut: Ctrl+F

In-page incremental search using the CSS Custom Highlight API. Enter jumps to the next match, Shift+Enter to the previous, Esc closes. Collapsed sections that contain a match auto-expand for the duration of the search and collapse again afterwards without dirtying saved fold state.

Outline (TOC) sidebar

Shortcut: Alt+O

A table of contents built automatically from the document’s headings, with scrollspy that highlights the heading the reader is currently on. Toggleable per session. Auto-shown for documents with three or more headings; click any item to scroll there.

Heading jump

Shortcut: [ · ]

Step backwards or forwards by one heading regardless of level. Pairs with the outline for quick scanning of a long document without taking your hand off the keyboard.

Heading-anchor copy

Hover any heading in the rendered document and a # button appears; click it to copy the anchor URL to the clipboard. Useful for citing a specific section in chat or in another Markdown file.

Collapsible sections

Every heading from H1 to H6 collapses its section. Fold state is persisted per document, so reopening a long file remembers what you’d hidden. Internal anchor navigation auto-expands the target’s ancestors before scrolling, and find / verify temporarily expand without dirtying the saved fold state.

Back / forward history

Shortcut: Alt+ · Alt+

Browser-style history across files and intra-document anchors. Each file open or anchor jump pushes onto the stack; back and forward restore the prior position with scroll memory honored. Independent per pane in split view.

Recent files

The File menu’s “Open Recent” submenu lists the last documents you opened across launches. Persisted in window state. Picking an entry behaves the same as opening from disk — scroll memory and fold state are restored.

Quick open

Shortcut: Ctrl+K

A palette that searches across recent files plus every Markdown file in the open workspace. Type to filter, Enter to open, Esc to dismiss. Faster than walking the file tree when you know roughly what you want.

Multi-path file open

Documents open from multiple sources: the File → Open menu, drag-and-drop onto the window, the mdview CLI, the workspace tree, the recent-files menu, and quick open. Every path lands in the same single document model so behavior stays consistent regardless of how the file got there.

Relative links between local Markdown files resolve through the shared href resolver. Anchors (#some-heading) auto-expand any collapsed ancestors before the browser scrolls — a capture-phase hook on every internal click — so jumping into a folded section just works without manual unfolding.

Workspace

Workspace tree

Shortcut: Ctrl+Shift+O

Open a folder as a workspace via the shortcut, the File → Open Folder menu, or mdview <folder> from the CLI. A side tree shows every Markdown file; clicking opens it in the active pane. The window auto-lands on README.md or index.md if present, else the first .md in the folder.

Shortcut: Ctrl+Shift+F

Recursive full-text search across every Markdown file in the open workspace (also called global search or project search). Results group by file in the sidebar; click a hit to open that file with the in-doc find bar pre-filled to highlight the same match. Heavy folders (node_modules, .git, dist, build, target, vendor) are skipped.

Learn more →

Split view

Shortcut: Ctrl+Alt+S · Pro

A second document pane opens to the right of the primary, sharing the same window. The vertical splitter is drag-resizable (clamped 25–75%) and the ratio persists. Each pane has independent scroll, render, navigation history, and fold state. The last-clicked pane is the active one and owns the global overlays (find, verify, TOC). CLI, stdin, print, and export operate on the primary pane only in v1.

Learn more →

Verification

Verification layer

Shortcut: Ctrl+Shift+V · Pro

A deterministic, no-AI inspector that flags four classes of risk inline and in a sidebar list. Off by default, persisted per session.

  • Fabricated paths. Strict inline-code-only path detection with a batch IPC to a Rust filesystem check; disabled with a visible notice for stdin or no-root documents.
  • Risky shell commands. A curated 10-pattern registry over sh|bash|zsh|powershell|cmd|console fenced blocks (rm -rf /, curl … | bash, fork bomb, format C:, chmod -R 777 /, …).
  • Structure health. Heading-level skips, broken intra-doc anchors, duplicate headings at the same level, empty sections, oversized documents.
  • Claim highlighting. Strong-language regex (always, never, guaranteed, …) and numeric / date claims, with a per-block cap of three findings plus a collapsed claims_dense overflow.

Learn more →

Git-diff overlay

Shortcut: Ctrl+Shift+D · Pro

A unified diff for the current file, computed against the working copy’s git index. Hunks, file boundaries, additions, and deletions are classified separately so you can see at a glance what changed since the last commit while reading the rendered prose.

Learn more →

Export & Print

Print

Shortcut: Ctrl+P

The browser-style print dialog. A dedicated print stylesheet hides chrome (top bar, sidebars, overlays, line numbers, mermaid toolbar) and expands every collapsed section so the printed output is the document as a continuous read. Useful for a quick PDF when you don’t need bookmarks.

PDF export with bookmarks

Shortcut: Ctrl+Shift+E · Pro

Native PDF export with nested bookmarks built from the heading tree. Implemented via a hidden WebView2 driving Chromium’s DevTools Protocol Page.printToPDF with generateDocumentOutline on, so the PDF carries clickable bookmarks per heading. Output matches the in-app reading typography.

Learn more →

Save as HTML

Shortcut: Ctrl+Shift+H

Export the current document as a single self-contained HTML file through File → Save as HTML. Useful for handing off a Markdown read to someone without mdview, or for archival.

DOCX export

Shortcut: Ctrl+Shift+W · Pro

Export to Word (.docx) via a native Rust OOXML emitter — no Pandoc, no external tools. Headings, paragraphs, formatting, tables, lists, hyperlinks, blockquotes, and embedded images translate natively; Mermaid, math, alerts, task lists, and footnotes use a visible-fallback policy (source text preserved, never silently dropped). Output opens cleanly in Microsoft Word, LibreOffice Writer, Google Docs, and Apple Pages.

Learn more →

Mermaid SVG export

From any Mermaid diagram’s fullscreen overlay you can copy the SVG to the clipboard or save it to disk. Copy clones the live SVG, strips the applied transform, ensures xmlns, and prepends the XML declaration so the result pastes cleanly into editors. Save opens a native file dialog with <docname>-diagram.svg as the default filename.

Customization

Persisted reading toggles

Reader state survives across launches: the active theme, the zoom level, and the on/off state of line numbers, the verification layer, and the metadata card. Toggle once, get the same view next time you open the app — no settings dialog to remember.

Per-document fold state

Collapsing or expanding sections is remembered per document, keyed by absolute path. Reopen a long file later and the same sections are still folded. Find and the verification layer expand sections temporarily when needed without dirtying the saved state.

OS-theme tracking

By default the app follows your operating-system light / dark preference, switching as you toggle Windows’ theme. Pressing Alt+T overrides with an explicit theme; the override is sticky until you cycle back to OS-tracking.

CLI

mdview file.md

The mdview shim is a separate console binary that ships next to the GUI and is added to per-user PATH by the installer. Pass a single Markdown path and it opens in the reader with scroll memory and fold state restored.

mdview <folder> and mdview .

Pass a directory (or . for the current working directory) and mdview opens it as a workspace — the side tree appears, and the reader auto-lands on README.md / index.md if present, else the first .md it finds.

mdview --stdin and mdview -

Open piped or redirected input as an ephemeral document. The doc gets the sentinel path: "<stdin>"; the watcher and recents skip it; menu actions that don’t apply (Reload, Open Containing Folder, Copy Path) emit a transient notice rather than failing silently.

Auto-detected piping

cat foo.md | mdview, git diff | mdview, echo "# hi" | mdview — if stdin is a pipe, mdview opens it as a stdin document without the explicit flag. Pipeline does a 50 MB hard reject plus a 2 MB soft warn, sniffs for null bytes to refuse binaries, and stages the text under %LOCALAPPDATA%\MDView\stdin\; leftovers older than 24 hours are swept on launch.

Single-instance reuse

A second mdview invocation routes to the running primary instead of spawning a fresh window: the window is brought forward and the new file, folder, or stdin payload opens in it. --help and --version print to stdout and exit, useful in scripts.

BOM-aware decoding

The stdin pipeline detects the byte-order mark and decodes UTF-8, UTF-16-LE, and UTF-16-BE inputs through encoding_rs so files saved by Notepad or other Windows tooling don’t render as mojibake.