A terminal system monitor for Windows and Linux. Displays CPU, memory, disk, network, GPU, and processes in a single screen.
Requires a recent Rust toolchain.
cargo build --release
The binary is placed at target/release/ztop.
Live GPU statistics (usage, VRAM, temperature) come from:
- NVIDIA —
nvml-wrapper. Cross-platform, enabled by default. Pass--no-default-featuresto skip it. - AMD on Linux —
/sys/class/drm/card*/device/(gpu_busy_percent,mem_info_vram_*,hwmon/temp*_input). Requires theamdgpudriver. No extra dependency, always compiled on Linux. - Intel and other vendors — no driver-agnostic source; fields stay
N/A.
Adapter enumeration via wgpu is always enabled.
q Esc Ctrl-C Quit
↑ ↓ Move selection
PgUp PgDn Page up / down
Home End Jump to top / bottom
← → Scroll the name column
Mouse wheel + click Supported
s Cycle sort key (CPU → memory → PID → time → name)
r Reverse sort
t Toggle tree view
c Cycle category (all → system → user → startup → other)
/ Search Use n / N to step through matches
\ Filter Updates as you type
F9 / k Kill the selected process (confirms before sending)
F8 Send a signal by number (9, 15, 1, 2, …)
F7 Renice
Inside a prompt, Enter commits and Esc cancels.
- Renice currently reports
N/Aon both platforms. Windows usesSetPriorityClassrather than the POSIX nice scale, and the Linux side has not been wired up. The systemrenicecommand can be used as a workaround. - Load average is hidden on Windows. The kernel does not expose one.
- GPU temperature is reported for NVIDIA (any OS, via NVML) and for
AMD on Linux (via
amdgpusysfshwmon). Intel and other vendors reportN/A. - Process CPU% follows the htop convention:
100%represents one fully utilised core, so multi-threaded processes may exceed100%. Task Manager normalises against total system CPU, which is the source of the difference.
Released under the MIT License. See LICENSE for the full text.
