Graphical manager runit services. The application targets a friendly, guided user experience that balances power-user workflows with newcomers who just want to start, stop, or understand system services. While it was written for Void Linux, it should work on any disto which uses runit.
runkit-core: service discovery, status parsing, and shared domain types.runkitd: privileged helper exposed as the system D-Bus servicetech.geektoshi.Runkit1. It runs as root, executessvcommands, manages/var/servicesymlinks, and enforces polkit authorization per request.runkit: libadwaita interface that lists services, shows details, and calls into the D-Bus helper for status queries and lifecycle operations.services-merge: tiny utility used by the installer to seed and merge cached service descriptions.
- A distro utilizing runit
- GTK 4.14+ and libadwaita 1.4+ runtimes
- Rust 1.88.0 or newer (tested with 1.88.0)
- DBus
- Polkit
For Void Linux the repository ships an installer that builds release binaries and places them under /usr/libexec. It will also install any dependencies, copy icons, lay down the desktop entry, seed service descriptions, install the system D-Bus definition, and copy the polkit policy.
chmod +x start.sh
./start.sh # installs dependencies, builds, and installs binaries
./start.sh uninstall # removes the installed binariesAfter installation, you can launch directly from your application launcher or via the CLI by typing runkit.
This workspace requires the Rust 1.83+ toolchain. The GTK frontend also depends on system libraries:
sudo xbps-install -S rustup gtk4-devel libadwaita-devel glib-devel pango-devel pkg-config
rustup default stableOnce dependencies are present:
cargo build # builds every crateNote:
cargo check -p runkit(or a fullcargo build) will fail unless the GTK/libadwaita headers are installed. The helper and core crates can be compiled independently with standard Rust tooling.
After installation the system bus activates runkitd automatically. The desktop app talks to the service using the well-known name tech.geektoshi.Runkit1, so the first privileged action prompts through polkit. Users can choose between “always ask” and “reuse authorization while the app is open” in Preferences, which simply toggles the polkit action (tech.geektoshi.Runkit.require_password vs tech.geektoshi.Runkit.cached).
For local development:
- Build the helper and GUI:
cargo build --bins
- Start the D-Bus service as root (in another terminal):
sudo target/debug/runkitd --dbus-service
- Run the GUI against the service:
cargo run -p runkit
Alternatively, copy assets/dbus-1/system-services/tech.geektoshi.Runkit1.service to /usr/share/dbus-1/system-services/, set Exec to your debug path, and reload the bus.

