Installation
go-odio-api runs on any Linux system with a D-Bus user session. Written in Go, no dependencies beyond D-Bus. Cross-compiled binaries, deb/rpm packages, and multi-arch Docker images are available.
Platform support
Section titled “Platform support”| Architecture | Package | Tested on |
|---|---|---|
| amd64 | deb, rpm, Docker | Fedora 43 Gnome, Debian 13 KDE |
| arm64 | deb, rpm, Docker | Raspberry Pi 3/4/5 (64-bit) |
| armv7hf | deb, rpm, Docker | Raspberry Pi 2/3 (32-bit) |
| armhf (ARMv6) | deb, rpm | Raspberry Pi B / B+ / Zero |
APT repository (Debian / Raspberry Pi OS)
Section titled “APT repository (Debian / Raspberry Pi OS)”curl -fsSL https://apt.odio.love/key.gpg | sudo gpg --dearmor -o /usr/share/keyrings/odio.gpgecho "deb [signed-by=/usr/share/keyrings/odio.gpg] https://apt.odio.love stable main" | sudo tee /etc/apt/sources.list.d/odio.listsudo apt updatesudo apt install odio-apiPackages (deb / rpm)
Section titled “Packages (deb / rpm)”Pre-built packages for all architectures are available as artifacts on each build workflow run.
# Debian/Ubuntu/Raspberry Pi OSsudo dpkg -i odio-api_<version>_<arch>.deb
# Fedora/RHELsudo rpm -i odio-api-<version>.<arch>.rpmDocker
Section titled “Docker”A pre-built multi-arch image is available on GHCR (amd64, arm64, arm/v7):
ghcr.io/b0bbywan/go-odio-api:latestFrom source
Section titled “From source”git clone https://github.com/b0bbywan/go-odio-api.gitcd go-odio-apitask build # builds CSS + Go binary with version from git./bin/odio-apiRequires Go 1.24+ and Task.
systemd user service
Section titled “systemd user service”The deb/rpm packages install the service automatically. If you installed from source or Docker, create ~/.config/systemd/user/odio-api.service:
[Unit]Description=Dbus api for OdioDocumentation=https://github.com/b0bbywan/go-odio-apiWants=sound.targetAfter=sound.targetWants=network-online.targetAfter=network-online.target
[Service]ExecStart=/usr/bin/odio-apiRestart=alwaysRestartSec=12TimeoutSec=30
[Install]WantedBy=default.targetsystemctl --user daemon-reloadsystemctl --user enable --now odio-api.serviceHeadless systems: enable lingering so the user session survives without an active login:
sudo loginctl enable-linger <username>Some backends (Bluetooth, Power) require additional system configuration. See Configuration for details.