mdvi is a terminal markdown viewer with Vim-style navigation.
It renders markdown into a polished full-screen TUI with fast keyboard navigation, clear typography, and predictable behavior for large files.

- Full-screen terminal viewer (
crossterm+ratatui) - Vim-style navigation controls
- High-quality markdown rendering via
pulldown-cmark - Support for:
- headings
- lists and task lists
- blockquotes
- inline markdown images (
) and HTML<img ...>tags - syntax-highlighted fenced code blocks and inline code
- links, tables, footnotes, emphasis/strong/strikethrough
- Configurable image backend via
--image-protocol(auto,halfblocks,sixel,kitty,iterm2) - Live reload (
r) when the file changes on disk - Start at specific line (
--line) - Works with standard terminal keys (arrows, page up/down, home/end)
Notes:
- Local,
file://, and remotehttp:///https://image sources are supported. - On macOS, terminal-native image protocols can trigger an "Allow Terminal-Initiated Display?" prompt.
Use
--image-protocol halfblocksif you want image rendering without that dialog. - Fenced code blocks with language tags (for example, a block tagged
rust) render with syntax highlighting.
brew tap taf2/tap
brew install mdvicargo install --path .cargo run -- README.mdmdvi [OPTIONS] <PATH>Examples:
mdvi docs/spec.md
mdvi --line 120 CHANGELOG.md
mdvi --image-protocol halfblocks README.mdj/Down: scroll down one linek/Up: scroll up one lineCtrl-d: half-page downCtrl-u: half-page upPageDown: full-page downPageUp: full-page upCtrl-f: full-page down (Vim-style)Ctrl-b: full-page up (Vim-style)g/Home: jump to topG/End: jump to bottomr: reload file from disk/: start searchn: next search matchN: previous search match?: toggle help lineq: quit
Rust is a strong fit for a serious CLI viewer:
- precise terminal control
- excellent performance for large files
- single static binary distribution
- mature ecosystem for TUI and markdown parsing
cargo test
cargo fmt
cargo clippy -- -D warningsMIT