A modern minimal circular system monitor widget for KDE Plasma 6.
Clean 270° ring gauges driven by KSysGuard sensors, themed via the current Plasma color scheme. Built from scratch as a learning project for QML/Qt Quick.
- CPU — usage (with optional per-core concentric inner rings) and temperature
- Memory — RAM and swap (zram included)
- GPU — usage and temperature
- Disk — per-partition usage rings; mounted removable drives are shown automatically
Temperatures render as a half-arc and can optionally be merged into their usage ring; the unit follows your locale (°C / °F).
- Themed to your desktop — follows the current Plasma color scheme, or set custom accent and text colors with separate light- and dark-mode values.
- Layout — horizontal or vertical, with adjustable track / arc / text opacity.
- Reorder & toggle — drag rings to reorder, click to show or hide, all from the config dialog.
- Update notifications — an in-widget badge when a newer release is published on GitHub (can be turned off in settings).
- Standalone build — a native Qt/QML binary for non-KDE desktops (see below).
The easiest way — no terminal, and Plasma will offer updates:
- Right-click the desktop or a panel → Add Widgets…
- Click Get New Widgets… → Download New Plasma Widgets.
- Search for Ring Monitor, then Install.
It's then available in the Add Widgets panel. The widget is published on the KDE Store at https://www.opendesktop.org/p/2360410 — you can also browse the page there directly.
If you've cloned the repo (e.g. to run an unreleased version), install the package straight from the working tree:
kpackagetool6 -t Plasma/Applet -i .Then add "Ring Monitor" via Plasma's "Add Widgets" panel. Use
kpackagetool6 -t Plasma/Applet -u . to update an existing install.
A native Qt/QML build runs the same rings as a frameless desktop widget
on non-KDE desktops, with no Plasma shell, libksysguard, or KConfig
dependency (issue #7).
It reads metrics directly from /proc, sysfs, and NVML.
Status: work in progress. On wlroots / KWin Wayland the widget runs as a native
wlr-layer-shellbottom-layer surface (no Alt+Tab, click pass-through, survives a desktop click); on X11, GNOME-Wayland, XFCE, and other EWMH stacking WMs it runs as a Conky-style always-on-bottom window (via XWayland on Wayland-GNOME). Tiling WMs are out of scope for now.
The easiest path — one file, no toolchain, no runtime dependencies
(Qt 6 + Kirigami are bundled, and it's built on an older glibc for broad
distro compatibility). Download Ring_Monitor-<version>-x86_64.AppImage
from the
latest release,
then:
chmod +x Ring_Monitor-*-x86_64.AppImage
./Ring_Monitor-*-x86_64.AppImageNVIDIA GPU support works out of the box (the binary dlopens
libnvidia-ml.so.1 at runtime); AMD/Intel GPUs are read from sysfs.
First launch needs the executable bit. Browsers don't preserve it on download, so the file arrives
rw-rw-r--and a double-click in the file manager does nothing (silently — issue #101). Thechmod +xabove fixes it; in a file manager it's Properties → Permissions → Allow executing as program. On XFCE / Thunar a double-click may still do nothing even after that, because those desktops ship no default handler for theapplication/vnd.appimageMIME type — run it from the terminal as shown, or install AppImageLauncher.
Once it's running, right-click → Settings → About → "Show in
application menu". Ring Monitor writes a launcher to
~/.local/share/applications/ pointing at the AppImage (no root, no
system-wide change), so it shows up in your launcher and survives
moves of the AppImage as long as the path stays put. Untick it to
remove the entry. The neighbouring "Start automatically on login"
toggle works the same way via ~/.config/autostart/.
Prefer building yourself (or your system lacks FUSE for AppImages)?
Build dependencies: CMake ≥ 3.16, a C++17 compiler, Qt 6.6+
(Core Gui Qml Quick QuickControls2; 6.6 for the Shape.CurveRenderer
the rings use), xcb (dev headers) and
pkg-config. NVIDIA GPU support needs no build dependency — the standalone
binary dlopens libnvidia-ml.so.1 at runtime (absent → the GPU ring
simply stays at 0, so the build runs on AMD/Intel boxes too).
# Fedora
sudo dnf install cmake gcc-c++ qt6-qtdeclarative-devel qt6-qtbase-devel libxcb-devel pkgconf
# Debian / Ubuntu
sudo apt install cmake g++ qt6-declarative-dev qt6-base-dev libxcb1-dev pkg-config
# Arch
sudo pacman -S cmake gcc qt6-declarative qt6-base libxcb pkgconfBuild and run:
cmake -B build -DCMAKE_BUILD_TYPE=Release
cmake --build build
./build/ring-monitor-standaloneRight-click the widget for settings. To start it on login, enable
"Start on login" in those settings — it writes
~/.config/autostart/dev.manuacl.ringmonitor.desktop (no system-wide
install step is required).
Symlink the repo into Plasma's plasmoid path so edits hot-reload:
ln -s "$PWD" ~/.local/share/plasma/plasmoids/dev.manuacl.ringmonitorEnable the pre-commit hook (qmlformat + qmllint + 500-line size cap):
git config core.hooksPath .githooksRun the test suite (Node logic + QML runtime):
tests/run-all.shYou need qt6-qtdeclarative-devel + kf6-kirigami for qmllint,
qmlformat, and qmltestrunner. Windowed Plasma preview (still the
Plasma build, not the standalone binary):
plasmawindowed dev.manuacl.ringmonitorIn-depth docs live under docs/ (start at the
index):
architecture.md— file roles,core→platformslayeringcomponents.md— visual components + platform adapterslogic-modules.md— pure JS modulesconfig-dialog.md— Plasma config-dialog gotchasadding-a-metric.md— step-by-steptesting.md— Node + QML test runnersdevelopment.md— symlink, journal, toolingreleasing.md— release flow + KDE Store upload