Contents

I Built rigtop, an Even More All-in-One System Monitor

This article is also available in 日本語.

I built rigtop (pronounced “rig-top”), a btop-like system monitor. It comes as a terminal UI (rigtop) and a native GUI (rigtop-gui), and so far it has been tested on Linux, Windows and macOS (Apple Silicon).

https://raw.githubusercontent.com/akivajp/rigtop/main/docs/images/rigtop-tui.png

Why I built it

  • I use btop every day. Opening btop over ssh from my Windows desktop on my Linux servers (a GPU workstation and a NAS) is part of my daily routine
  • I love how it puts everything on one screen, but over time I found a few things I wanted for the way I use it
    • Storage health: I run RAID with btrfs and mdadm, so I want per-device error counts, RAID degradation, SMART and NVMe temperatures right next to everything else
    • Which process is using GPU memory: when machine learning jobs run on several GPUs, this is what I want to know most
    • One terminal per host: I want several hosts side by side, with the ones that need attention standing out
    • Outside the terminal, too: panels that grow with the window, and longer history
  • I looked around at existing tools first. GUI monitors such as Mission Center look great, but none of them packs as much onto one screen as btop, and none of them can watch remote hosts
  • So I listed what I wanted as requirements and built it myself. I also used AI coding assistance during development

What it does

  • Like btop, it shows the CPU (total, per core, temperatures), every GPU, memory, storage, network and the process list on one screen. You can terminate or kill processes, too
  • On top of that, it adds what I was missing
    • Storage: btrfs RAID profiles and per-device error counts, mdadm status, SMART, NVMe temperatures
    • GPU: per-process VRAM and GPU utilization (NVIDIA). AMD and Intel GPUs are shown as well
    • Power and fans: total CPU + GPU power draw, and fan speeds (you can name each fan)
    • Multiple hosts: watch any number of hosts over SSH, side by side
    • Widgets: a clock, or the output of any command, in a column on the right
  • The GUI keeps btop’s layout, and you can resize and rearrange the panels by dragging

https://raw.githubusercontent.com/akivajp/rigtop/main/docs/images/rigtop-gui.png

Trying it out

Installing

  • On Linux and macOS (Apple Silicon), a one-liner installs it. It goes to ~/.local/bin, so no sudo is needed, and running it again updates to the latest release
$ curl -fsSL https://github.com/akivajp/rigtop/releases/latest/download/install.sh | sh
  • Or download an archive from Releases, extract it, and put the binaries somewhere on your PATH
  • There are a few other ways, too
$ cargo install rigtop rigtop-gui           # if you have Rust
$ sudo apt install ./rigtop_*_amd64.deb      # Debian / Ubuntu 22.04 or later (the .deb from Releases)
# Windows (Scoop)
> scoop install https://raw.githubusercontent.com/akivajp/rigtop/main/packaging/scoop/rigtop.json
  • Packaging for package managers still has a long way to go. It is not in an apt repository, winget or Homebrew yet, and since new AUR account registrations are paused, Arch users build it from the PKGBUILD in the repository for now

Running

$ rigtop          # terminal UI
$ rigtop-gui      # GUI
$ rigtop --demo   # try it out with made-up data for three hosts
  • Almost everything works without extra software or root
  • Only SMART needs root, so a root systemd timer collects it every 10 minutes into files that rigtop reads (sudo "$(command -v rigtop)" --install-collector sets it up). rigtop itself never runs as root, and it does not loosen device permissions

Watching multiple hosts

# ~/.config/rigtop/config.toml
[[hosts]]
name = "workstation"

[[hosts]]
name = "nas"
ssh = "admin@nas.local"

https://raw.githubusercontent.com/akivajp/rigtop/main/docs/images/rigtop-gui-overview.png

  • With rigtop installed on the monitored hosts too, your local rigtop starts ssh <host> rigtop --agent and receives the readings over standard input and output
    • No daemon and no open ports. SSH handles authentication and encryption, so your ~/.ssh/config, keys and ProxyJump work as usual
  • With two or more hosts, rigtop starts with an overview of all of them, and tabs switch to each host’s details
    • Items that need attention, such as storage errors or high temperatures, come first on each card. The GUI also sends desktop notifications for new alerts (Linux)

Adding widgets

  • You can put whatever you want to keep an eye on in a column on the right (the right edge of the screenshot above)
  • A widget is either the built-in clock or any command. rigtop runs the command every few seconds and shows its output: plain text, or JSON in a simple format (labels, values, gauges and colors)
[[widgets]]
name = "Clock"
builtin = "clock"

[[widgets]]
name = "Claude Code"
command = "/path/to/rigtop/contrib/widgets/claude-code/claude-code-widget"
  • So far, I have made and use these two
    • A big clock: modest, but having a clock on a monitoring screen that is always open turns out to be handy
    • Claude Code status: how much of the usage limits (5-hour and weekly) is left and when they reset, the running sessions and subagents, and whether an idle session is waiting on background work or waiting for me
      • While Claude Code works on things for me, I can see at a glance which session is waiting for my reply, and I have come to like this one a lot
      • It is in the repository under contrib/widgets/claude-code/ (the usage limits need a Pro or Max plan and Claude Code’s status line setting)

Windows

https://raw.githubusercontent.com/akivajp/rigtop/main/docs/images/rigtop-gui-windows.png

  • CPU, memory, processes, network, drives and NVIDIA GPUs work out of the box
  • Windows cannot read temperatures, fans, CPU power or drive health on its own, so rigtop reads them from LibreHardwareMonitor
    • The GUI’s “set up…” button installs and configures it for you

Looking for help

So far, it runs smoothly on these machines of mine (rigtop v0.10.0).

  • Ubuntu 26.04 (Ryzen 9 9950X3D, RTX 4090 + RTX 4000 Ada, btrfs RAID on three NVMe drives)
  • CachyOS (a laptop with a Ryzen 7 PRO 7840U)
  • Windows (Ryzen 9 8945HX + RTX 4090, with LibreHardwareMonitor)

But there is a lot I cannot check on my own.

  • macOS users: a user checked it on Apple Silicon hardware and reported a memory display bug, now fixed (v0.11.0). I don’t own a Mac myself, so sensors such as temperatures are still unchecked (and the binaries are not signed). Anything you notice helps

  • Issues: missing sensors, odd names, broken layouts, anything is welcome. For sensor problems, the output of rigtop --dump-json --pretty makes it much easier to track down the cause (it includes host and process names, so mask anything you’d rather not share)

  • Contributors: it is written in Rust. Help with packaging (AUR, winget, Homebrew, Nix and so on) is very welcome too

  • GitHub: https://github.com/akivajp/rigtop

P.S.