A fast, keyboard-first terminal UI for browsing Linux/macOS man pages
Project description
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
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distributions
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file man_tui-0.1.1.tar.gz.
File metadata
- Download URL: man_tui-0.1.1.tar.gz
- Upload date:
- Size: 193.3 kB
- Tags: Source
- Uploaded using 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}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b60bdba774ed46bf57ead212efd3b86b1c5289d90d452504697fa6fc2654d446
|
|
| MD5 |
4f5f7e3f6163c08c6ba4f768d800c86e
|
|
| BLAKE2b-256 |
79dadf4b7da962656ab7108e5e1979ef87a120e3dd5777985ad4b2d4993b5553
|
File details
Details for the file man_tui-0.1.1-py3-none-win_arm64.whl.
File metadata
- Download URL: man_tui-0.1.1-py3-none-win_arm64.whl
- Upload date:
- Size: 444.2 kB
- Tags: Python 3, Windows ARM64
- Uploaded using 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}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8f1ff79eb9b7766bf0d83221af80ecb0f71886c18c101ccb653ed5a64f1c0d33
|
|
| MD5 |
71ab89eb98463f5ea55e172f9e3ab028
|
|
| BLAKE2b-256 |
1da0fd070c70fc367e1fe75fd1574b938efb54221a935159df10e71ed2611f36
|
File details
Details for the file man_tui-0.1.1-py3-none-win_amd64.whl.
File metadata
- Download URL: man_tui-0.1.1-py3-none-win_amd64.whl
- Upload date:
- Size: 462.1 kB
- Tags: Python 3, Windows x86-64
- Uploaded using 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}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8762f880cfbd8cccdb740657e9fab8e0ac9eaa6242828c02496eda116d36f7ad
|
|
| MD5 |
b72e065780a1dfd7f41598a2a1af4aad
|
|
| BLAKE2b-256 |
9babc4eff081d1abe694329e6133c611e17334dd2d6d62071e6ad0b4ed1b2ede
|
File details
Details for the file man_tui-0.1.1-py3-none-win32.whl.
File metadata
- Download URL: man_tui-0.1.1-py3-none-win32.whl
- Upload date:
- Size: 449.4 kB
- Tags: Python 3, Windows x86
- Uploaded using 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}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
5a72f9b704fd9cb1c7dabb85cfd85797bfe651e589e57e6007bb7f81d5af02f3
|
|
| MD5 |
f71d9d8406fdfc4bcde0fb1b27f2ec59
|
|
| BLAKE2b-256 |
6288bce23ad77507d41fcd299909ba6f6e2bf8958302f4e54648606a3411105a
|
File details
Details for the file man_tui-0.1.1-py3-none-musllinux_1_2_x86_64.whl.
File metadata
- Download URL: man_tui-0.1.1-py3-none-musllinux_1_2_x86_64.whl
- Upload date:
- Size: 700.0 kB
- Tags: Python 3, musllinux: musl 1.2+ x86-64
- Uploaded using 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}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
01c0374bbaf4e324e580f6225b261defcf4b0f233c594964587e4af77390101c
|
|
| MD5 |
e2d12828d9019869b6907ae4fa85ef06
|
|
| BLAKE2b-256 |
dac9c580078520a5b44d978ee2579d57b173235a81e7c8bdf7886685cbae3c78
|
File details
Details for the file man_tui-0.1.1-py3-none-musllinux_1_2_i686.whl.
File metadata
- Download URL: man_tui-0.1.1-py3-none-musllinux_1_2_i686.whl
- Upload date:
- Size: 732.4 kB
- Tags: Python 3, musllinux: musl 1.2+ i686
- Uploaded using 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}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
29eeeef05b4fc104f0df826e84e012d94577789931d4e9d89daffa5ae88f20b5
|
|
| MD5 |
e9ae49317a7d75971e8010f10a69ad67
|
|
| BLAKE2b-256 |
2a73d47be63dc69baf088919931f6b535c23f3de96692a015d04f701ac2ec64c
|
File details
Details for the file man_tui-0.1.1-py3-none-musllinux_1_2_armv7l.whl.
File metadata
- Download URL: man_tui-0.1.1-py3-none-musllinux_1_2_armv7l.whl
- Upload date:
- Size: 683.5 kB
- Tags: Python 3, musllinux: musl 1.2+ ARMv7l
- Uploaded using 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}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
2660f11a8a3a7968a50bf808b778085fd2430264aa21b69a141defae7c73e566
|
|
| MD5 |
1c794a92dce71c483d3d30dc5bef94ef
|
|
| BLAKE2b-256 |
0098c233840f95893b06f6baaca49e2b2434b91a807af57f25c70722af5c9f3a
|
File details
Details for the file man_tui-0.1.1-py3-none-musllinux_1_2_aarch64.whl.
File metadata
- Download URL: man_tui-0.1.1-py3-none-musllinux_1_2_aarch64.whl
- Upload date:
- Size: 690.8 kB
- Tags: Python 3, musllinux: musl 1.2+ ARM64
- Uploaded using 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}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
2b3c6352715df6fc4b3f470441ffd623036e8b8dd7bc10db12d28073b58d512f
|
|
| MD5 |
ee7026b49ec157902c2e3a6a6fb5e0f1
|
|
| BLAKE2b-256 |
8816f35fd5603f1c983aab84168bd8389bbced9e071ff7cc46304bcb6f72f252
|
File details
Details for the file man_tui-0.1.1-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.
File metadata
- Download URL: man_tui-0.1.1-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
- Upload date:
- Size: 640.7 kB
- Tags: Python 3, manylinux: glibc 2.17+ x86-64
- Uploaded using 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}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
84322a4241620ae5a78eb677b6a323569ed149e5c6291be1e050c59d26c7bc7c
|
|
| MD5 |
0f06e1eb8777d3a3b5a47cb633524146
|
|
| BLAKE2b-256 |
4a498e821960caca7e8b8b8797ac6e5eeb76c88d72ca25d7fd7543a0b6002eaf
|
File details
Details for the file man_tui-0.1.1-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl.
File metadata
- Download URL: man_tui-0.1.1-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl
- Upload date:
- Size: 689.1 kB
- Tags: Python 3, manylinux: glibc 2.17+ s390x
- Uploaded using 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}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c62deefe228fd551a324f700b1ea507d1ef9ac2e47f7e8ff70325a250a5688c6
|
|
| MD5 |
7b1b2b52fe2a5555cd5241b3afce261e
|
|
| BLAKE2b-256 |
e79fec7bccd3523cc2558614586b74334bd35227344cd22860bc7ccf1c49f349
|
File details
Details for the file man_tui-0.1.1-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl.
File metadata
- Download URL: man_tui-0.1.1-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl
- Upload date:
- Size: 773.2 kB
- Tags: Python 3, manylinux: glibc 2.17+ ppc64le
- Uploaded using 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}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b4a84d81f534c68bf1504d266c8e7762cebc546e19f21cc326d543f5bfdc3383
|
|
| MD5 |
b24aa3a5b44dfd1fc871219f7f00a40e
|
|
| BLAKE2b-256 |
5db27c6cc202d42f809fbcf4f15fae3e3408d71413ca251571a7424a9e013a51
|
File details
Details for the file man_tui-0.1.1-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl.
File metadata
- Download URL: man_tui-0.1.1-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl
- Upload date:
- Size: 703.9 kB
- Tags: Python 3, manylinux: glibc 2.17+ i686
- Uploaded using 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}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
9f5f63b21876ed980ff0e9f4196f8981a3850b83cc1f893b4172fe52147414e9
|
|
| MD5 |
6c42f2b31f8b306b25c6653d0f68539a
|
|
| BLAKE2b-256 |
bb4b26388f0501e6df7ba52fc4a19dab34e4977dffe6250eb90c72a7ed91ee5c
|
File details
Details for the file man_tui-0.1.1-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl.
File metadata
- Download URL: man_tui-0.1.1-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl
- Upload date:
- Size: 646.2 kB
- Tags: Python 3, manylinux: glibc 2.17+ ARMv7l
- Uploaded using 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}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
343a4417f287f4453dd5b1e8f432f2eaace799fa4bee828a5889a4b5f2b006b9
|
|
| MD5 |
ec414758ec06a4c4685deb65b3a8635e
|
|
| BLAKE2b-256 |
1f10b820f60cb766f22975ed4f23889dd56b4b9dedb85ea990dcfab028e8f7d9
|
File details
Details for the file man_tui-0.1.1-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.
File metadata
- Download URL: man_tui-0.1.1-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
- Upload date:
- Size: 630.1 kB
- Tags: Python 3, manylinux: glibc 2.17+ ARM64
- Uploaded using 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}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b56788b27c19005d089c67221203199f78a8d9e9344ca0bb9f49a16f7353d571
|
|
| MD5 |
d6207ed4d9613aff98e65cd40bcd473e
|
|
| BLAKE2b-256 |
d81ea0b7dc215093e681d1ef3f08de19a9cce449cb4144b2fed3515c1ac9037c
|
File details
Details for the file man_tui-0.1.1-py3-none-macosx_11_0_arm64.whl.
File metadata
- Download URL: man_tui-0.1.1-py3-none-macosx_11_0_arm64.whl
- Upload date:
- Size: 604.7 kB
- Tags: Python 3, macOS 11.0+ ARM64
- Uploaded using 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}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c2cd2fd4c4a589167a53c21d6cea1b19191d0ff4688ad2cf2a43fc2fcce5fdfe
|
|
| MD5 |
ccde8e17e2ce16249c30dc2fb555ae8f
|
|
| BLAKE2b-256 |
4c7288d4b18aaff0b4b42614134cf69265063fc344dcc3b66eff7e04c682bd0d
|
File details
Details for the file man_tui-0.1.1-py3-none-macosx_10_12_x86_64.whl.
File metadata
- Download URL: man_tui-0.1.1-py3-none-macosx_10_12_x86_64.whl
- Upload date:
- Size: 610.8 kB
- Tags: Python 3, macOS 10.12+ x86-64
- Uploaded using 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}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e52d95817735cbab1c8a17a858f5a6a2a9f25bc192957ec8a6d9900e940835b9
|
|
| MD5 |
01bf90909cf776a242185148b3d22e62
|
|
| BLAKE2b-256 |
ebfbfa980733ed99b250a7de7520e637aacc797f74bfac9f1aa6fe8bd2d2635e
|