A terminal system monitor for Linux. It shows CPU, memory, GPU, and temperatures as live line charts over time, so a sudden spike is something you can actually see instead of a number that flickers for one refresh and is gone.
Status: 0.1.0, the first release. Linux only. It works, but the surface is small on purpose.
htop is great at "what is using my machine right now." It is less good at "what
happened ten seconds ago." crabtop defaults to the second question: every panel is
a line chart against time. If you want the htop-style per-core breakdown, it is
one flag away (--cpu-cores, or -d for everything), but it is not the default.
You need a Rust toolchain. The version that ships with apt on Ubuntu is too old for the dependencies; use rustup and a current stable.
cargo install --path .That drops the crabtop binary in ~/.cargo/bin (already on your PATH if you
installed via rustup). After changing the code, re-run with --force.
No NVIDIA card, or building somewhere without NVML? Turn the GPU code off:
cargo install --path . --no-default-featurescrabtop # aggregate line charts, ~1.5s refresh
crabtop -d # every panel in its detailed form
crabtop --cpu-cores # detail one panel, leave the rest as charts
crabtop --interval 100 --history 1500 # fine-grained, ~2.5 min window| Flag | Default | What it does |
|---|---|---|
-i, --interval <ms> |
1500 |
Sampling period. Matches htop's default. Floored at 50ms. |
--history <n> |
120 |
Samples kept per chart, i.e. how far back the X axis goes. |
-d, --detailed |
off | Show the detailed view for every panel. |
--cpu-cores |
off | Per-core CPU gauges instead of the aggregate chart. |
--mem-detailed |
off | RAM/swap gauges and a sparkline. |
--gpu-detailed |
off | Per-device blocks: utilization, VRAM, temperature, power. |
--temp-detailed |
off | The full per-sensor list. |
The per-panel flags stack with -d; -d --cpu-cores is just -d.
| Key | Action |
|---|---|
q, Esc, Ctrl-C |
quit |
space |
pause/resume sampling |
+ / - |
halve / double the interval (50ms–10s) |
There are no tabs. Everything is on one screen, stacked top to bottom.
- CPU — total usage over time, with the 1/5/15-minute load average in the title. Detailed: a gauge per core with its current clock.
- Memory — RAM and swap as two lines on one chart. Detailed: gauges with absolute figures plus a history sparkline.
- GPU — two charts side by side, utilization and VRAM, one line per device. Detailed: a block per GPU with utilization, VRAM, temperature, and power.
- Thermals — the hottest CPU sensor over time. Detailed: every hwmon sensor, grouped into CPU and other.
This is Linux-only and leans on Linux interfaces directly.
Temperatures come from /sys/class/hwmon. Under WSL2 that tree is usually
empty because the Windows host does not expose sensors to the VM, so the panel
will say so rather than invent numbers. On bare metal it works.
GPU support is NVIDIA via NVML, behind the nvidia feature (on by default).
NVML normally loads libnvidia-ml.so, which does not exist on WSL — there you
only get /usr/lib/wsl/lib/libnvidia-ml.so.1. crabtop tries the plain name first
and then falls back to the versioned soname and the WSL path, so a working
nvidia-smi should mean a working GPU panel. To check detection without opening
the UI:
cargo test gpu_probe -- --nocaptureAMD and Intel GPUs are not supported yet.
cargo build --release # ./target/release/crabtop, stripped + thin LTO
cargo test # gpu_probe just prints what NVML finds; it never failsMIT. See LICENSE.