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)
Licensed under the GNU General Public License v3.0. See the LICENSE file for details.

