mdcat(1)
| MDCAT(1) | mdcat | MDCAT(1) |
NAME
mdcat - render CommonMark Markdown to text terminals
SYNOPSIS
mdcat [OPTIONS] [FILE]...
mdless [OPTIONS] [FILE]...
mdpick [OPTIONS] [DIRECTORY]
DESCRIPTION
mdcat renders Markdown FILEs in CommonMark dialect to text terminals with sophisticated formatting. If no FILE is given, or if FILE is '-', it reads from standard input.
If invoked as mdless automatically use a pager to display the output, see below.
If invoked as mdpick, instead fuzzy-find a Markdown file below DIRECTORY (the current directory by default) with fzf, then render the selected file as mdless would. See section Interactive picking below.
CommonMark and terminal support
mdcat supports all basic CommonMark syntax plus a few extensions, renders footnotes and math expressions, highlights syntax in code blocks, and shows inline links and even inline images in some terminal programs. In iTerm2 it also adds jump marks for section headings.
See section Terminal support below for a list of supported terminal programs and their features.
Terminal detection
To enable formatting extensions such as inline images, mdcat needs to detect the terminal program, by checking the following environment variables in the given order:
See section ENVIRONMENT below for a detailed description of each environment variable.
Pagination
mdcat can render output in a pager; this is the default when run as mdless. The environment variables $MDCAT_PAGER and $PAGER control the pager used.
Note that common pagers do not support proprietary terminal codes for e.g. image support, so mdcat falls back to pure ANSI formatting when pagination is enabled. In particular this disables all image support which relies on proprietary escape codes. Math rendering remains enabled, but uses Unicode substitutions instead of PNG images.
Interactive picking
mdpick requires fzf <https://github.com/junegunn/fzf> to be installed and on $PATH; it exits with an error if fzf cannot be found.
It recursively collects .md files below DIRECTORY, honouring .gitignore and other ignore files the same way fzf and rg do, then hands that list to fzf for fuzzy selection. If the picker is cancelled, e.g. with kbd:[Esc] or kbd:[Ctrl+C], mdpick exits with status 0 without rendering anything. Once a file is selected, mdpick renders it exactly as mdless would, paginating by default.
Image support
In iTerm2, kitty, WezTerm, and Ghostty mdcat prints inline images. mdcat supports most standard pixel formats by default.
mdcat silently ignores images larger than 100 MiB, under the assumption that images of that size cannot reasonably be rendered in a terminal.
Math support
mdcat renders inline math delimited by $...$ and display math delimited by .... On terminals with the iTerm2 or kitty image protocol it renders math as PNG images. Otherwise it uses Unicode substitutions.
For PNG output mdcat uses RaTeX. If an expression cannot be rendered as an image, mdcat uses the Unicode fallback for that expression.
Mermaid support
mdcat renders Mermaid <https://mermaid.js.org> diagrams in fenced ` ```mermaid ` code blocks. On terminals with an image protocol it renders diagrams as PNG images; otherwise it uses a Unicode diagram rendering. If a diagram can be rendered as neither, mdcat falls back to printing its source as a literal code block.
Diagram arrows, borders, and text use the theme’s mermaid style, so diagrams match the active theme instead of Mermaid’s own default colours.
For diagram rendering mdcat uses merman <https://github.com/Latias94/merman>, a headless Rust implementation of Mermaid.
SVG support
In iTerm2, kitty, WezTerm, and Ghostty mdcat renders SVG images into pixel graphics using the resvg <https://github.com/RazrFalcon/resvg> library. Currently this library only supports SVG 1, and only the static subset thereof; see SVG support <https://github.com/RazrFalcon/resvg#svg-support> for details. While this is sufficient for most simple SVG images, complex SVG images may fail to render or render incompletely.
For local SVG files mdcat relies on the file extension to identify SVG images. For remote images from HTTP(S) URLs mdcat inspects the Content-Type header to identify SVG images.
HTTP/HTTPS support
mdcat fetches images from HTTP(S) URLs for rendering if the underlying terminal supports image rendering; pass --local to disable this and force mdcat to only use images from the local filesystem. In this case remote images render as hyperlinks.
OPTIONS
-p, --paginate
Note: When paginating mdcat only uses standard ANSI formatting and hyperlinks, but no images or other proprietary format codes, because pager programs normally do not support any of these. Math rendering uses the Unicode fallback when paginating.
This is the default when run as mdless.
-P, --no-pager
This is the default when run as mdcat.
-c, --no-colour
--ansi
--columns=COLUMNS
-l, --local
--fail
--detect-terminal
--theme=THEME
Defaults to auto, which detects dark or light mode from the terminal, unless ~/.config/mdcat/config.toml sets a base theme (see CONFIGURATION FILE).
--list-themes
--margin
--smart-punctuation
-w, --watch
--toc
Entries are numbered, nested by heading level, and, if FILE isn’t standard input, wrapped in an OSC 8 link to FILE#slug (a GitHub-style anchor derived from the heading text) so that terminals and later viewers that support OSC 8 and resolve such anchors can jump to that heading. On standard input entries are plain text, since there’s no file to link to.
--image-protocol=PROTOCOL
PROTOCOL is one of none (disable inline images entirely), iterm2, kitty, or sixel.
Also settable via $MDCAT_IMAGE_PROTOCOL; the flag wins if both are given.
--tabs=COLUMNS
Off by default, so literal tabs pass through unchanged; without this, a tab inside text content (not part of the Markdown block structure) throws off line-wrapping and alignment width calculations, since terminals render it as jumping to the next tab stop rather than occupying a single column.
Also settable via defaults.tabs in ~/.config/mdcat/config.toml.
--completions=SHELL
_SHELL_ can be one of `bash`, `zsh`, `fish`, `powershell`, or `elvish`.
-h, --help
-V, --version
CONFIGURATION FILE
mdcat reads ~/.config/mdcat/config.toml (or $XDG_CONFIG_HOME/mdcat/config.toml if that variable is set) if it exists. The file has two parts: a [defaults] table setting default values for a few CLI flags, and a [theme] table customising a built-in theme. See config.toml.example in the mdcat source repository for a fully annotated example.
[defaults]
margin = true
columns = 100
[theme]
base = "catppuccin-mocha"
[theme.palette]
mauve = "#cba6f7"
[theme.styles]
h2 = { fg = "mauve", modifiers = ["bold"], text = "» " }
code = { fg = "bright-yellow" }
alert_note = { text = " NOTE" }
[defaults]
Each key sets the default value for a CLI flag, used only when that flag isn’t passed explicitly (and, for columns, when $COLUMNS/terminal size detection doesn’t otherwise apply).
margin
smart_punctuation
columns
local_only
fail_fast
image_protocol
tabs
[theme]
The file picks a built-in theme as a starting point (base), and overrides individual styles on top of it.
base
--theme/$MDCAT_THEME, if given, always wins over base; the [theme.styles] overrides below still apply on top regardless.
rule
[theme.palette]
[theme.styles]
Per-element style overrides. Each entry is a table with any of:
A colour value is a #rrggbb hex code, an ANSI colour name (black, red, green, yellow, blue, magenta, cyan, white, or the bright- prefixed variant of any of these), or a name defined in [theme.palette].
Valid style names: html_block, inline_html, code, link, image_link, quote_border, h1_text, h2, h3, h4, h5, h6, footnote, math, mermaid, alert_note, alert_tip, alert_important, alert_warning, alert_caution.
EXIT STATUS
mdcat exits with 0 if no error occurred, or 1 otherwise.
If run as mdless or mdpick, or if --paginate is given, and the pager fails to start mdcat exits with 128.
ENVIRONMENT
TERM
mdcat first checks this variable to identify the terminal program (see section Terminal detection). It understands the following values.
For all other values mdcat proceeds to check $TERM_PROGRAM.
TERM_PROGRAM
For all other values mdcat ends terminal detection and assumes that the terminal is only capable of standard ANSI formatting.
COLUMNS
mdcat only uses this variable if it fails to query the size from the underlying terminal.
ROWS
mdcat only uses this variable if it fails to query the size from the underlying terminal.
MDCAT_PAGER
The pager program must support basic ANSI formatting sequences, like e.g. less -r.
The value of this variable is subject to shell-like word-splitting. It is not subject to any kind of expansion or substitution (e.g. parameter expansion, process substitution, etc.).
If set to an empty value, mdcat completely disables pagination.
PAGER
Subject to the same rules as $MDCAT_PAGER.
If both $PAGER and $MDCAT_PAGER are unset use less -r as pager.
http_proxy, https_proxy, HTTPS_PROXY, all_proxy, ALL_PROXY, no_proxy, NO_PROXY
mdcat uses curl for its network transfers, hence see curl(1) for these variables.
MDCAT_LOG
See <https://docs.rs/tracing-subscriber/latest/tracing_subscriber/struct.EnvFilter.html#directives> for syntax details; use MDCAT_LOG=trace for complete debugging information, and MDCAT_LOG=pulldown_cmark_mdcat::render=trace to trace rendering only.
CONFORMING TO
CommonMark support, extensions, and limitations
mdcat supports version 0.30 of the CommonMark Spec <https://spec.commonmark.org/>, plus footnotes, Task lists <https://github.github.com/gfm/#task-list-items-extension->, strikethrough <https://github.github.com/gfm/#strikethrough-extension->, and math, through pulldown-cmark <https://github.com/raphlinus/pulldown-cmark>.
Support for tables <https://github.github.com/gfm/#tables-extension-> is limited; text wrapping and inline markup in table cells are not yet supported. mdcat parses HTML blocks and inline tags but does not apply special rendering; it prints HTML as is.
Terminal support
Unless --no-colour is given, mdcat translates CommonMark text into ANSI formatted text, with standard SGR formatting codes and hyperlinks. It uses bold (SGR 1), italic (SGR 3) and strikethrough (SGR 9) formatting, and the standard 4-bit color sequences, as well as OSC 8 <https://gist.github.com/egmontkob/eb114294efbcd5adb1944c9f3cb5feda> for hyperlinks. It does not use 8-bit or 24-bit color sequences, though this may change in future releases.
Additionally, it uses proprietary escape codes if it detects one of the following terminal emulators (see sections Terminal detection and ENVIRONMENT for details):
BUGS
Please report bugs to <https://github.com/BIRSAx2/mdcat/issues>.
EXAMPLES
mdcat hello - world
mdless hello
mdpick
mdpick docs
SEE ALSO
cat(1), bat(1)
COPYRIGHT
Copyright Sebastian Wiesner <sebastian@swsnr.de>, Mouhieddine Sabir < <me@mouhieddine.dev>>, and contributors
Binaries are subject to the terms of the Mozilla Public License, v. 2.0. See <https://github.com/BIRSAx2/mdcat/blob/main/LICENSE>.
Most of the source is subject to the terms of the Mozilla Public License, v. 2.0, unless otherwise noted; some files are subject to the terms of the Apache 2.0 license, see <http://www.apache.org/licenses/LICENSE-2.0>.
AUTHOR
Sebastian Wiesner
| mdcat 2.15.0 |
