(Disclaimer: I used AI to help me build this. The design decisions are mine, and I reviewed and tested and edited it extensively)
Hello everyone.
I’m in the process of slowly migrating to Qubes OS, and one of the things that I really miss is the good old multiload-ng panel plugin. The Qubes design requires a completely different approach to implement the same functionality, so I wrote it from scratch, primarily in Rust (with a bit of C and Python where necessary).

The following charts are available:
- Whole-machine CPU
- Per-qube CPU
- RAM (not just Xen-allocated RAM, but also the amount actually used inside all running Linux qubes)
- Per-qube RAM
- Network traffic (collected from
sys-netby default; configurable) - Per-qube swap
- Disk IO
Charts can be reordered and enabled/disabled individually; all colors are configurable.
Architecture: the project runs two systemd services and an XFCE panel plugin in dom0. The two-service split is to avoid parsing VM-influenced data in a privileged service.
- The collector service runs as root in dom0, reads Xen and dom0 statistics, and scrapes metrics from Linux qubes. It stores raw outputs (without parsing them);
- The parser service runs as a separate unprivileged service (still in dom0), parses the inputs and stores the final snapshot;
- The XFCE panel plugin reads the final snapshot and draws the charts.
Nothing needs to be installed in the qubes.
The qubes metrics scraping is optional and can be disabled - we can still have most of the charts. Qube scraping is needed to make the data richer: the actual RAM usage (not just xen-allocated amount), swap usage, and network traffic.
See more notes about security on the project page (link below).
For those who want to try it: see installation instructions in the readme. You can either use a prebuilt rpm from the latest release, or build it from source.
Github: dimonomid/multiload-qubes