Terminal Markdown previewer — GUI-like experience.

See more screenshots in the features demo
Install the latest published binary.
macOS / Linux / Android / Termux:
curl -fsSL https://raw.githubusercontent.com/RivoLink/leaf/main/scripts/install.sh | shWindows:
irm https://raw.githubusercontent.com/RivoLink/leaf/main/scripts/install.ps1 | iexnpm:
npm install -g @rivolink/leafArchLinux (AUR):
Use an AUR helper, such as yay:
yay -S leaf-markdown-viewerVerify the installation:
leaf --versionUpdate an existing installation to the latest published release.
Self:
leaf --updateleaf --update downloads the matching published asset, verifies it against the published checksums.txt SHA256, and then installs it.
On Windows, if replacing the running .exe is blocked by the OS, rerun the PowerShell installer from the install section.
npm:
npm update -g @rivolink/leaf# Open a Markdown file
leaf TESTING.md
# Watch mode — reloads automatically on save
leaf --watch TESTING.md
leaf -w TESTING.md
# Open the fuzzy Markdown picker
leaf
# Open the classic directory browser picker
leaf --picker
# Open the fuzzy Markdown picker, then watch the selected file
leaf -w
# Open the classic directory browser picker, then watch the selected file
leaf -w --picker
# Open a dash-prefixed filename
leaf -- -notes.md
# Stream Markdown from another CLI tool
claude "explain Rust lifetimes" | leaf
# Preview a local file through stdin
cat TESTING.md | leafAdd the following to your ~/.vimrc to preview the current Markdown file in a vertical split:
" Preview the current Markdown file in a vertical split using leaf
nnoremap <Leader>md :vertical botright terminal leaf -w %<CR>Once added, use \md to open a live preview. To switch focus back to the Markdown buffer, press Ctrl+w,h.
Render Markdown directly to stdout without the interactive TUI:
# Render to terminal with colors
leaf --inline README.md
# Force plain text, no ANSI codes (no colors)
leaf --inline plain README.md
# Force ANSI colors even when piping
leaf --inline ansi README.md
# Set a specific width
leaf --inline 60 README.md
leaf --inline ansi:60 README.md
# Pipe from stdin
cat README.md | leaf --inline
# Use as a fzf preview
find . -name '*.md' | fzf --preview 'leaf --inline ansi {}'
find . -name '*.md' | fzf --preview 'leaf --inline ansi:$FZF_PREVIEW_COLUMNS {}'Set default values for theme, editor, and watch mode via config.toml:
leaf --configThis opens the configuration file in your editor. If the file does not exist yet, leaf creates it with documented defaults.
theme = "ocean" # arctic, forest, ocean, solarized-dark, or a custom theme file
editor = "nano" # any editor in PATH
watch = false # auto-reload when opening a file
extras = ["txt", "rs"] # extra file types shown in the pickerAll settings are optional. CLI arguments always take priority. See config.toml for details.
Non-Markdown files can be listed in the file picker by adding their extensions to config.toml:
extras = ["txt", "csv", "rs", "java", "json", "yaml"]Code files get syntax highlighting; text files are rendered as plain Markdown.
Any file can also be opened directly from the command line, regardless of the extras setting:
leaf main.rsBrowse and preview code files with fzf:
find . -name '*.rs' | fzf --preview 'leaf --inline ansi {}'Create a .toml file that inherits from a built-in theme and overrides specific colors:
theme = "/path/to/custom-theme.toml"Relative paths are resolved from the config file directory.
# custom-theme.toml
base = "ocean"
syntax = "base16-ocean.dark"
[ui]
content_bg = "#282828"
toc_accent = "#fe8019"
[markdown]
text = "#ebdbb2"
heading_1 = "#fabd2f"See gruvbox.toml for a complete example with all available color keys.
| Key | Action |
|---|---|
j / ↓ |
Scroll down |
k / ↑ |
Scroll up |
d / PgDn |
Page down (20 lines) |
u / PgUp |
Page up (20 lines) |
g / Home |
Top |
G / End |
Bottom |
t |
Toggle TOC sidebar |
Shift+Sel |
Select text |
Shift+T |
Open theme picker |
Shift+E |
Open editor picker |
Shift+P |
Open file browser |
Ctrl+E |
Open in editor |
Ctrl+P |
Open fuzzy picker |
Ctrl+F / / |
Find |
n / N |
Next / prev match |
? |
Show help popup |
r |
Force reload (watch mode) |
q |
Quit |
- Live preview — Watch mode with automatic reload and visual feedback.
- File picker — Fuzzy Markdown picker, directory browser, and watch after selection.
- Editor integration — Open the current file in your preferred editor.
- Frontmatter support — YAML frontmatter rendered as a table (horizontal or vertical based on key count).
- Rich Markdown rendering — Tables, lists, blockquotes, rules, bold, italic, and strikethrough.
- Extra file types — Open any file; code files get syntax highlighting, text files render as Markdown.
- Syntax highlighting — Common aliases like
py,cpp,json,toml,ps1,dockerfile. - LaTeX support — Inline, block, and
latex/texcode blocks rendered as formulas. - Navigation — TOC sidebar, active section tracking, heading jumps, and search.
- Terminal UX — Theme picker, help popup, file path popup, mouse and keyboard support.
- CLI friendly — stdin support and
leaf --updatewith SHA256 verification.
# Terminal 1: generate the file
aichat "..." > notes.md
# Terminal 2: live watch
leaf --watch notes.mdIf leaf.exe does not start on Windows and reports a missing MSVC runtime, install the latest supported Microsoft Visual C++ Redistributable from Microsoft Learn:
Direct download for the latest supported X64 Microsoft Visual C++ Redistributable:
For leaf-windows-x86_64.exe, the relevant package is the latest supported X64 Visual C++ v14 Redistributable.
If leaf --update fails on Windows with an error about replacing, renaming, or writing leaf.exe, the running executable was likely locked by the OS.
Close any terminal session still running leaf, then rerun the PowerShell installer from the install section:
irm https://raw.githubusercontent.com/RivoLink/leaf/main/scripts/install.ps1 | iexmacOS / Linux / Android / Termux:
rm -f ~/.local/bin/leafWindows:
Remove-Item "$env:LOCALAPPDATA\Programs\leaf\leaf.exe" -Forcenpm:
npm uninstall -g @rivolink/leafThanks to all contributors.
Contributions are welcome. Feel free to open an issue or submit a pull request.
See the CONTRIBUTING.md file for details.
If you like leaf, consider giving the project a star ⭐
This project is licensed under the MIT License.
See the LICENSE file for details.