man-tui
A fast, keyboard-first terminal UI for browsing Linux/macOS man pages.
man-tui is a Rust application built with Ratatui and crossterm. It gives you a split-pane interface with fuzzy command search on the left and a scrollable man-page viewer on the right.
Features
- Interactive split view: search/list pane + man viewer pane.
- Fuzzy command search powered by
fuzzy-matcher(Skim algorithm). - Section selection (man sections 1–9 when available on your system).
- In-page search with next/previous match navigation.
- Command history + favorites persisted to config.
- Theme toggle (dark/light).
- Man-page content caching during runtime for fast revisits.
- Terminal-safe lifecycle (raw mode + alternate screen are restored on exit).
Installation
PyPI (recommended)
pip install man-tui
Or with uv:
uv tool install man-tui
Prerequisites
mancommand available on your PATHcolcommand (used to clean formatting from man output)
Build from source (Rust)
cargo build --release
Binary output:
./target/release/man-tui
Run in development
cargo run
Usage
Launch:
man-tui
Core flow
- Type in the search box to filter available commands.
- Move to list, pick a command, press Enter.
- Read/scroll in the viewer.
- Use
/in viewer for in-page search.
Keybindings
Behavior is focus-aware (Search, List, Viewer, Section Select, In-page Search).
Global-ish
q— quitl— jump to command list (from search/viewer/in-page search)
Search focus
Type— update fuzzy queryBackspace— delete characterEnter/Tab/Down/Esc— move focus forward
List focus
↑/↓— move selectionEnter— open selected man pageTab— cycle focus/— move focus to search inputs— open section selectort— toggle theme
Viewer focus
↑/↓— line scrollPgUp/PgDn— page scrollTab— cycle focus/— start in-page searchn/N— next / previous in-page match (when search active)f— toggle favorite for current commandt— toggle themes— open section selector
In-page search focus
Type— update search queryBackspace— delete charactern/N— next / previous matchEnter— return to viewerEsc— cancel in-page search and return to viewer
Section select focus
↑/↓— choose sectionEnter— confirm section and refresh command listEsc— cancel and return to list
Configuration
The app stores data in a TOML config file:
- Linux/macOS typical path:
$XDG_CONFIG_HOME/man-tui/config.toml- or
~/.config/man-tui/config.toml
Stored fields:
history(recent opened commands, max 100)favoriteslast_commandlast_sectiontheme("dark"or"light")
How command discovery works
- The app inspects
/usr/share/man/man{section}directories. - It extracts
.gzpage basenames as command candidates. - It deduplicates and sorts commands.
- Selected section filtering is applied when section mode is active.
When opening a page, the app executes:
man [section] <command> | col -b
The output is rendered in the right pane.
Project structure
.
├── Cargo.toml
├── spec.md
└── src
├── app.rs # state machine, focus handling, search debounce, cache
├── colorize.rs # lightweight man content heuristics for styling
├── config.rs # config load/save + history/favorites
├── main.rs # terminal setup + event loop + key routing
├── man.rs # man section discovery + man command execution
├── search.rs # fuzzy filtering
└── ui.rs # ratatui rendering and layout
Notes and limitations
- Command discovery currently reads
/usr/share/man/...; systems with custom man paths may need adaptation. - Runtime cache is in-memory only (cleared when app exits).
- If
man/colare unavailable, page loading will fail.
Development checks
cargo fmt
cargo clippy --all-targets --all-features -- -D warnings
cargo test
Release files for man-tui 0.1.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| man_tui-0.1.1.tar.gz | 193.3 kB | Details |
Built distributions (wheels)
Total release size: 9.7 MB
Release files / man_tui-0.1.1.tar.gz
| Download URL | man_tui-0.1.1.tar.gz |
|---|---|
| Size | 193.3 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
b60bdba774ed46bf57ead212efd3b86b1c5289d90d452504697fa6fc2654d446
|
|
BLAKE2b-256 checksum How to use checksums |
79dadf4b7da962656ab7108e5e1979ef87a120e3dd5777985ad4b2d4993b5553
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.11.28 {"installer":{"name":"uv","version":"0.11.28","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
|
Release files / man_tui-0.1.1-py3-none-win_arm64.whl
| Download URL | man_tui-0.1.1-py3-none-win_arm64.whl |
|---|---|
| Size | 444.2 kB |
| Tags | Python 3 Windows ARM64 |
|
SHA-256 checksum How to use checksums |
8f1ff79eb9b7766bf0d83221af80ecb0f71886c18c101ccb653ed5a64f1c0d33
|
|
BLAKE2b-256 checksum How to use checksums |
1da0fd070c70fc367e1fe75fd1574b938efb54221a935159df10e71ed2611f36
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.11.28 {"installer":{"name":"uv","version":"0.11.28","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
|
Release files / man_tui-0.1.1-py3-none-win_amd64.whl
| Download URL | man_tui-0.1.1-py3-none-win_amd64.whl |
|---|---|
| Size | 462.1 kB |
| Tags | Python 3 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
8762f880cfbd8cccdb740657e9fab8e0ac9eaa6242828c02496eda116d36f7ad
|
|
BLAKE2b-256 checksum How to use checksums |
9babc4eff081d1abe694329e6133c611e17334dd2d6d62071e6ad0b4ed1b2ede
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.11.28 {"installer":{"name":"uv","version":"0.11.28","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
|
Release files / man_tui-0.1.1-py3-none-win32.whl
| Download URL | man_tui-0.1.1-py3-none-win32.whl |
|---|---|
| Size | 449.4 kB |
| Tags | Python 3 Windows x86-32 |
|
SHA-256 checksum How to use checksums |
5a72f9b704fd9cb1c7dabb85cfd85797bfe651e589e57e6007bb7f81d5af02f3
|
|
BLAKE2b-256 checksum How to use checksums |
6288bce23ad77507d41fcd299909ba6f6e2bf8958302f4e54648606a3411105a
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.11.28 {"installer":{"name":"uv","version":"0.11.28","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
|
Release files / man_tui-0.1.1-py3-none-musllinux_1_2_x86_64.whl
| Download URL | man_tui-0.1.1-py3-none-musllinux_1_2_x86_64.whl |
|---|---|
| Size | 700.0 kB |
| Tags | Linux musl 1.2+ x86-64 Python 3 |
|
SHA-256 checksum How to use checksums |
01c0374bbaf4e324e580f6225b261defcf4b0f233c594964587e4af77390101c
|
|
BLAKE2b-256 checksum How to use checksums |
dac9c580078520a5b44d978ee2579d57b173235a81e7c8bdf7886685cbae3c78
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.11.28 {"installer":{"name":"uv","version":"0.11.28","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
|
Release files / man_tui-0.1.1-py3-none-musllinux_1_2_i686.whl
| Download URL | man_tui-0.1.1-py3-none-musllinux_1_2_i686.whl |
|---|---|
| Size | 732.4 kB |
| Tags | Linux musl 1.2+ x86-32 Python 3 |
|
SHA-256 checksum How to use checksums |
29eeeef05b4fc104f0df826e84e012d94577789931d4e9d89daffa5ae88f20b5
|
|
BLAKE2b-256 checksum How to use checksums |
2a73d47be63dc69baf088919931f6b535c23f3de96692a015d04f701ac2ec64c
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.11.28 {"installer":{"name":"uv","version":"0.11.28","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
|
Release files / man_tui-0.1.1-py3-none-musllinux_1_2_armv7l.whl
| Download URL | man_tui-0.1.1-py3-none-musllinux_1_2_armv7l.whl |
|---|---|
| Size | 683.5 kB |
| Tags | Linux musl 1.2+ ARMv7l Python 3 |
|
SHA-256 checksum How to use checksums |
2660f11a8a3a7968a50bf808b778085fd2430264aa21b69a141defae7c73e566
|
|
BLAKE2b-256 checksum How to use checksums |
0098c233840f95893b06f6baaca49e2b2434b91a807af57f25c70722af5c9f3a
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.11.28 {"installer":{"name":"uv","version":"0.11.28","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
|
Release files / man_tui-0.1.1-py3-none-musllinux_1_2_aarch64.whl
| Download URL | man_tui-0.1.1-py3-none-musllinux_1_2_aarch64.whl |
|---|---|
| Size | 690.8 kB |
| Tags | Linux musl 1.2+ ARM64 Python 3 |
|
SHA-256 checksum How to use checksums |
2b3c6352715df6fc4b3f470441ffd623036e8b8dd7bc10db12d28073b58d512f
|
|
BLAKE2b-256 checksum How to use checksums |
8816f35fd5603f1c983aab84168bd8389bbced9e071ff7cc46304bcb6f72f252
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.11.28 {"installer":{"name":"uv","version":"0.11.28","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
|
Release files / man_tui-0.1.1-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
| Download URL | man_tui-0.1.1-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl |
|---|---|
| Size | 640.7 kB |
| Tags | Linux glibc 2.17+ x86-64 Python 3 |
|
SHA-256 checksum How to use checksums |
84322a4241620ae5a78eb677b6a323569ed149e5c6291be1e050c59d26c7bc7c
|
|
BLAKE2b-256 checksum How to use checksums |
4a498e821960caca7e8b8b8797ac6e5eeb76c88d72ca25d7fd7543a0b6002eaf
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.11.28 {"installer":{"name":"uv","version":"0.11.28","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
|
Release files / man_tui-0.1.1-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl
| Download URL | man_tui-0.1.1-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl |
|---|---|
| Size | 689.1 kB |
| Tags | Linux glibc 2.17+ IBM System/390x Python 3 |
|
SHA-256 checksum How to use checksums |
c62deefe228fd551a324f700b1ea507d1ef9ac2e47f7e8ff70325a250a5688c6
|
|
BLAKE2b-256 checksum How to use checksums |
e79fec7bccd3523cc2558614586b74334bd35227344cd22860bc7ccf1c49f349
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.11.28 {"installer":{"name":"uv","version":"0.11.28","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
|
Release files / man_tui-0.1.1-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl
| Download URL | man_tui-0.1.1-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl |
|---|---|
| Size | 773.2 kB |
| Tags | Linux glibc 2.17+ PowerPC 64-le Python 3 |
|
SHA-256 checksum How to use checksums |
b4a84d81f534c68bf1504d266c8e7762cebc546e19f21cc326d543f5bfdc3383
|
|
BLAKE2b-256 checksum How to use checksums |
5db27c6cc202d42f809fbcf4f15fae3e3408d71413ca251571a7424a9e013a51
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.11.28 {"installer":{"name":"uv","version":"0.11.28","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
|
Release files / man_tui-0.1.1-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl
| Download URL | man_tui-0.1.1-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl |
|---|---|
| Size | 703.9 kB |
| Tags | Linux glibc 2.17+ x86-32 Python 3 |
|
SHA-256 checksum How to use checksums |
9f5f63b21876ed980ff0e9f4196f8981a3850b83cc1f893b4172fe52147414e9
|
|
BLAKE2b-256 checksum How to use checksums |
bb4b26388f0501e6df7ba52fc4a19dab34e4977dffe6250eb90c72a7ed91ee5c
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.11.28 {"installer":{"name":"uv","version":"0.11.28","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
|
Release files / man_tui-0.1.1-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl
| Download URL | man_tui-0.1.1-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl |
|---|---|
| Size | 646.2 kB |
| Tags | Linux glibc 2.17+ ARMv7l Python 3 |
|
SHA-256 checksum How to use checksums |
343a4417f287f4453dd5b1e8f432f2eaace799fa4bee828a5889a4b5f2b006b9
|
|
BLAKE2b-256 checksum How to use checksums |
1f10b820f60cb766f22975ed4f23889dd56b4b9dedb85ea990dcfab028e8f7d9
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.11.28 {"installer":{"name":"uv","version":"0.11.28","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
|
Release files / man_tui-0.1.1-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
| Download URL | man_tui-0.1.1-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl |
|---|---|
| Size | 630.1 kB |
| Tags | Linux glibc 2.17+ ARM64 Python 3 |
|
SHA-256 checksum How to use checksums |
b56788b27c19005d089c67221203199f78a8d9e9344ca0bb9f49a16f7353d571
|
|
BLAKE2b-256 checksum How to use checksums |
d81ea0b7dc215093e681d1ef3f08de19a9cce449cb4144b2fed3515c1ac9037c
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.11.28 {"installer":{"name":"uv","version":"0.11.28","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
|
Release files / man_tui-0.1.1-py3-none-macosx_11_0_arm64.whl
| Download URL | man_tui-0.1.1-py3-none-macosx_11_0_arm64.whl |
|---|---|
| Size | 604.7 kB |
| Tags | Python 3 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
c2cd2fd4c4a589167a53c21d6cea1b19191d0ff4688ad2cf2a43fc2fcce5fdfe
|
|
BLAKE2b-256 checksum How to use checksums |
4c7288d4b18aaff0b4b42614134cf69265063fc344dcc3b66eff7e04c682bd0d
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.11.28 {"installer":{"name":"uv","version":"0.11.28","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
|
Release files / man_tui-0.1.1-py3-none-macosx_10_12_x86_64.whl
| Download URL | man_tui-0.1.1-py3-none-macosx_10_12_x86_64.whl |
|---|---|
| Size | 610.8 kB |
| Tags | Python 3 macOS 10.12+ x86-64 |
|
SHA-256 checksum How to use checksums |
e52d95817735cbab1c8a17a858f5a6a2a9f25bc192957ec8a6d9900e940835b9
|
|
BLAKE2b-256 checksum How to use checksums |
ebfbfa980733ed99b250a7de7520e637aacc797f74bfac9f1aa6fe8bd2d2635e
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.11.28 {"installer":{"name":"uv","version":"0.11.28","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
|