gander0.6.7

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.

gander in its panels layout: a system column on the left, the process table in the middle, and a live inspector on the right showing the selected process's command line, state, memory and runtime.
The panels layout, which is what gander opens in. Press L for the classic full-width htop arrangement.

What it does

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.

The inspector follows the cursor

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.

Sampling is off the render path

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.

htop's settings come with you

--import-htoprc reads an existing htoprc, and --save writes it out as gander's own TOML. Your columns and sort order survive the switch.

Scriptable without the TUI

--json, -n, --sort, --filter and --limit print process rows and exit. Nothing to parse out of a curses screen.

More to read on Linux

PSS/EPSS, PSI, zram/zswap, GPU, delay accounting and container identity are optional columns or header meters, read from /proc and /sys.

No ncurses to install

Rendered with ratatui and crossterm. There is no development header to install before the build, and no terminal library to link against.

Three ways to look at the same machine

How it compares to other process viewers

ganderhtopbtopbottom
Terminal UIyesyesyesyes
Linux / macOS / FreeBSDall three, supportedall three, supportedall three, built in CIFreeBSD unofficial
Keeps htop's keybindingsyes—nono
Imports an existing htoprcyes—nono
Selected process stays on screen with its detailsyesnonono
A layout that is not htop'spanels—yesyes
--json batch modeyesnonono

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.

Install

macOS (Homebrew)

brew install pandasir/tap/gander

Any platform with Rust

cargo install gander-bin   # the installed command is `gander`

Arch Linux

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, Fedora, RHEL

# 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

Prebuilt archives

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.

From source

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

Use

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.

Keys

F1 / h / ?Help
F2Setup
F3 / /Search
F4 / \Filter
F5 / tTree view
F6 / < >Change sort
F9 / kSend signal
F10 / qQuit
LSwitch between panels and htop
ICycle the selected header meter's mode

FAQ

Is gander an htop replacement?

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.

Does it run on Windows?

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.

Why is the crates.io package called gander-bin?

Because gander on crates.io is an unrelated, long-yanked crate. The installed command is still gander.

Why not ncurses?

It renders with ratatui and crossterm, so there is no ncurses development header to install before building.

Can I use it in scripts?

Yes. gander --json, -n, --sort, --filter and --limit run without the TUI and print one row per process.

What is the license?

GPL-2.0-or-later. gander takes its behaviour, keybindings and column semantics from htop, so keep the license compatible and credit it.