A cross-platform interactive process viewer for Linux, macOS and FreeBSD, written in Rust.
It reads the same process data htop reads, keeps htop's keybindings, and puts the details of the process you selected beside the list instead of on a screen you have to leave it to reach.
panels layout, which is what gander opens in. Press L for the classic full-width htop arrangement.gander shows what is running on your system and how much it costs. It runs on Linux, macOS and FreeBSD, and it keeps most of htop's keybindings, so the keys you already have in your fingers keep working.
Selecting a row fills in the panel on the right: command line, state, memory, runtime, user, threads. You do not leave the list to read it.
A background thread samples; the renderer reads a snapshot. The table does not stutter when the machine is busy, which is exactly when you are looking at it.
--import-htoprc reads an existing htoprc, and --save writes it out as gander's own TOML. Your columns and sort order survive the switch.
--json, -n, --sort, --filter and --limit print process rows and exit. Nothing to parse out of a curses screen.
PSS/EPSS, PSI, zram/zswap, GPU, delay accounting and container identity are optional columns or header meters, read from /proc and /sys.
Rendered with ratatui and crossterm. There is no development header to install before the build, and no terminal library to link against.
| gander | htop | btop | bottom | |
|---|---|---|---|---|
| Terminal UI | yes | yes | yes | yes |
| Linux / macOS / FreeBSD | all three, supported | all three, supported | all three, built in CI | FreeBSD unofficial |
| Keeps htop's keybindings | yes | — | no | no |
Imports an existing htoprc | yes | — | no | no |
| Selected process stays on screen with its details | yes | no | no | no |
| A layout that is not htop's | panels | — | yes | yes |
--json batch mode | yes | no | no | no |
The row that matters in daily use is the fifth one. htop, btop and bottom all answer "what is running" by showing you every process at once, and the details of the one you care about live on a separate screen or nowhere. gander puts the inspector beside the table, so selecting a row answers the question without leaving the list.
Longer comparisons, one per tool, are here: gander vs htop, gander vs btop, gander vs bottom. For platform-specific notes: on macOS and on FreeBSD.
brew install pandasir/tap/gander
cargo install gander-bin # the installed command is `gander`
git clone https://github.com/pandasir/gander
cd gander/packaging/aur && makepkg -si
There is no AUR package: AUR account registration has been closed since the June 2026 malicious-packages incident, and there is no manual process to create one. This builds the same PKGBUILD that would have been published.
# Debian, Ubuntu, Linux Mint
curl -fsSL https://pandasir.github.io/gander/gander.gpg \
| sudo gpg --dearmor -o /usr/share/keyrings/gander.gpg
echo "deb [signed-by=/usr/share/keyrings/gander.gpg] https://pandasir.github.io/gander stable main" \
| sudo tee /etc/apt/sources.list.d/gander.list
sudo apt update && sudo apt install gander
Every release ships .tar.gz archives for macOS (Apple Silicon and Intel), Linux (x86_64 and arm64, glibc and static musl), and FreeBSD, each with a .sha256 file. See GitHub Releases.
Requires Rust 1.89 or newer. No ncurses or libcurses development headers.
git clone https://github.com/pandasir/gander
cd gander
cargo install --locked --path crates/bin
gander # interactive TUI
gander --delay 500 # sample every 500 ms
gander -n 5 -d 1000 # five text samples
gander --json --limit 10 # one JSON sample
gander --sort PERCENT_MEM --limit 20 # top 20 by memory
gander -F "python|node" # filter command lines
gander --import-htoprc ~/.config/htop/htoprc --save
Filter terms are case-insensitive fixed strings separated by |; they are not regular expressions. Run gander --help for all options.
F1 / h / ? | Help |
F2 | Setup |
F3 / / | Search |
F4 / \ | Filter |
F5 / t | Tree view |
F6 / < > | Change sort |
F9 / k | Send signal |
F10 / q | Quit |
L | Switch between panels and htop |
I | Cycle the selected header meter's mode |
Yes and no. It reads the same /proc data and keeps htop's keys, so it drops into the way you already work, and --import-htoprc copies your htop settings over. But the default layout is deliberately not htop's, because a full-width table with the details on a second screen is not the only way to read a process list.
No. The three backends are /proc (Linux), sysctl/Mach/libproc (macOS) and sysctl/libkvm (FreeBSD). There is no Windows backend, and the columns that depend on Linux kernel interfaces (PSS, PSI, zram, delay accounting, containers) are Linux only.
gander-bin?Because gander on crates.io is an unrelated, long-yanked crate. The installed command is still gander.
It renders with ratatui and crossterm, so there is no ncurses development header to install before building.
Yes. gander --json, -n, --sort, --filter and --limit run without the TUI and print one row per process.
GPL-2.0-or-later. gander takes its behaviour, keybindings and column semantics from htop, so keep the license compatible and credit it.