Install the latest version with a single command:
bash <(curl -fsSL https://raw.githubusercontent.com/rebootless/vitals/main/install.sh)The installer automatically:
- Installs the required build dependencies
- Clones the notcurses source (release pinned by
NOTCURSES_VERSIONinsetup.sh) - Builds the project
- Installs
vitalsto/usr/local/bin - Installs the required libraries under
/usr/localand registers them with the dynamic linker
Safe to run multiple times.
Remove vitals and the notcurses files installed alongside it with a single command:
bash <(curl -fsSL https://raw.githubusercontent.com/rebootless/vitals/main/uninstall.sh)The uninstaller:
- Reads the manifest left by
install.shand removes every file it installed (binary, notcurses libraries/headers/pkgconfig files) - Prunes any directories left empty
- Removes the
/etc/ld.so.conf.dentry added for the notcurses libraries and refreshes the linker cache - Asks before deleting your saved config at
~/.config/vitals
If vitals was installed a different way (no manifest present), it falls back to a best-effort removal of the vitals binary and matching notcurses libraries.
Build from Source (click to expand)
Clone the repository:
git clone https://github.com/rebootless/vitals.git
cd vitalsPrepare the build environment:
chmod +x setup.sh
./setup.shBuild:
cmake -B build -DCMAKE_BUILD_TYPE=Release
cmake --build build -j$(nproc)Install:
sudo cmake --install build
dirname "$(grep -m1 'libnotcurses\.so' build/install_manifest.txt)" | sudo tee /etc/ld.so.conf.d/usr_local_lib.conf
sudo ldconfigRun Without Installing (click to expand)
git clone https://github.com/rebootless/vitals.git
cd vitals
chmod +x setup.sh
./setup.sh
cmake -B build -DCMAKE_BUILD_TYPE=Release
cmake --build build -j$(nproc)
LD_LIBRARY_PATH="$(pwd)/build/notcurses" ./build/vitalsNote
Symbol Mirroring is experimental and may render incorrectly depending on your environment.
Mirrored glyphs require font and Unicode 13+ wcwidth support.
Terminal emulators may handle these glyphs differently.
The Linux TTY (TERM=linux) does not support them.
| Panel | Data source | Metrics |
|---|---|---|
| CPU | /proc/stat, /sys/devices/system/cpu/cpu*/cpufreq/ |
CPU usage, per-core activity, frequency, history |
| GPU | /sys/class/drm, /sys/class/hwmon, nvidia-smi |
GPU utilization, VRAM, temperature, power |
| Memory | /proc/meminfo |
RAM and swap usage |
| Network | /proc/net/dev |
Per-interface RX/TX throughput |
| Storage | /proc/diskstats, statvfs() |
Filesystem usage and disk I/O |
| Thermal | /sys/class/thermal, /sys/class/hwmon |
CPU, GPU, and motherboard temperatures |
Note
The GPU panel is displayed only when a supported device is detected. Otherwise, the CPU panel expands to use the available space.
| Key | Action |
|---|---|
q |
Quit |
Esc |
Open the settings menu |
Tab |
Select the next option |
↑ / ↓ |
Change the selected value |
Enter |
Save changes and close |
Esc (in settings) |
Discard changes and close |
vitals --self-testChecks, without a terminal, that every data source vitals reads (CPU, memory, GPU, storage, network, thermal sensors, system info) is available and returns sane values. It prints one line per component — OK, SKIP (optional hardware that isn't present, e.g. no GPU) or FAIL — and exits with 0 unless something failed, so it can be used in CI.
- Linux (kernel ≥ 4.x)
- GCC or Clang with C++20 support
- CMake ≥ 3.21
- Internet access (required to download notcurses during setup)
Linux buffers disk writes in RAM, then flushes them in batches. So downloads may show steady Network traffic while Storage stays idle.
Licensed under the GNU General Public License v3.0. See the LICENSE file for details.

