mant
mant is ManT's local-first documentation command. It turns native man/mdoc
pages and Markdown libraries into one catalog exposed as an interactive TUI,
a deterministic structured CLI, and a read-only stdio MCP server. Every
interface consumes the same normalized document model.
Install
Download a supported prebuilt GitHub Release through
cargo-binstall:
Or compile from crates.io:
Source builds require Rust 1.88+ and a C compiler. Linux and macOS additionally require zlib development headers; Windows uses the checked MSVC memory-parser configuration without a system zlib.
| Target | Prebuilt archive | Source capabilities |
|---|---|---|
| Linux x64, glibc | Yes | Markdown and native man/mdoc |
| Linux arm64, glibc | Yes | Markdown and native man/mdoc |
| Windows x64, MSVC | Yes | Markdown and native man/mdoc |
| macOS | Source build | Markdown and native man/mdoc |
Targets without a matching archive fall back from cargo binstall to a Cargo
source build. Public macOS archives remain disabled until they can be signed
and notarized.
Interactive reader
An ordinary complete query opens the reader when standard input and output are
terminals. Use --ui to require it explicitly:
The reader provides a resizable outline, collapsible sections, semantic option
nodes, settled-scroll following, typed in-page and cross-document links,
back/forward history, full-document search, keyboard and mouse input, and
optional tldr quick references before the full document. Ctrl+O opens the
shared Markdown and native-manual catalog. Redirected output stays
deterministic instead of emitting terminal control sequences.
Structured queries for agents and scripts
Discover the document before selecting only the content that matters:
Output formats include Markdown, text, and JSON. A complete native roff manual
also supports --format man for manual-only plain text without tldr content.
Search results carry reusable outline selectors and exact generated-Markdown
coordinates. Machine consumers can discover the authoritative contracts from
the installed executable:
mant --mcp exposes the same read-only document discovery, outline, excerpt,
explanation, and search capabilities over stdio JSON-RPC. MCP stdout contains
protocol messages only; use CLI JSON output to inspect lowering diagnostics.
Document sources
On Linux, macOS, and Windows, ManT indexes raw, gzip, and zstd manual sources
and parses their roff through bundled libmandoc. It does not require a system
man or mandoc executable at runtime. A leaf manual-page symlink may point
outside its indexed root, but directory symlinks are not traversed and every
.so target must remain inside that root. Windows defaults to
%USERPROFILE%\.local\share\man and also honors configured manual paths.
Reusable Markdown documents can be registered by relative path below:
- Linux:
${XDG_DATA_HOME:-$HOME/.local/share}/mant/documents - macOS:
~/Library/Application Support/ManT/documents - Windows:
%APPDATA%\ManT\documents
Regular Markdown files are discovered recursively with their hierarchy.
Personal documents/ may use leaf-file symlinks to regular files, including
external targets; directory and broken links are ignored. Managed source
caches never follow links. Git or direct archive sources configured in sibling
sources.toml can be installed with mant --update-docs and selected with
--source. Removed source tables are reported as orphaned installed data;
preview cleanup with mant --prune-docs --dry-run and apply it with
mant --prune-docs. An unqualified path or unique component suffix resolves
root documents first. Sources then sort around native manuals at priority zero:
positive sources win, manuals win a zero tie, and non-positive sources are
fallbacks. Omitted source priority defaults to one. See the
complete document-source guide.
When compatible local tldr data exists, an unqualified query prepends it as
reserved outline node 0. --tldr selects only that node, while --manual
and --man-section select only native manual content. Explicit tldr lookup
compares embedded Markdown quick references using their document priority;
cached tldr and native manuals share the built-in priority-zero baseline.
Markdown without an embedded quick reference is skipped. Reads prefer
installed-client caches and then ManT's private cache; mant --update-tldr
updates through an installed client or the private checkout. If no full
document exists, an ordinary query fails with an explicit mant NAME --tldr
hint instead of opening a tldr-only reader.
One-off physical input uses mant --input PATH; Markdown and plain/gzip/zstd
roff files are supported. Standard input additionally requires
--input-format markdown|roff. Manual selectors accept mant 1 git,
mant 'git(1)', and mant manual/1/git.
Crate architecture
mant-irdefines the source-neutral in-memory document and quick-reference model.mant-protocoldefines the unified versioned contracts shared by host callbacks, CLI JSON, and MCP.libmandoc-rsowns the cross-platform libmandoc parser boundary.mant-sourcesowns local Markdown discovery and optional source updates.mant-engineperforms document lookup, lowering, projections, search, and output.mant-uiprovides the source-neutral Ratatui frontend.mantowns command-line, terminal-selection, and MCP process boundaries.
The package also exposes mant::run for deterministic single-invocation tests
or embedding with explicit input/output streams, and mant::run_process for
the real terminal-sensitive process including MCP. Most library users should
prefer the narrower component crate matching their boundary instead of
embedding the complete command host.
The complete user manual,
protocol reference,
and release archives live in the
ManT repository.
License
Apache-2.0. Native builds also contain the separately attributed upstream
mandoc sources distributed by libmandoc-rs; downloaded tldr-pages content
is CC BY 4.0 and is attributed when rendered.