A few months ago I introduced go-odio-api here, a Go daemon that turns any Linux machine into a controllable multimedia hub with a native HA integration. Since then, it grew into odio: a complete open source audio streamer built on top of that API, based on a setup I’ve been using for years and documented on medium.
An odio node is an AirPlay 2 receiver, a Spotify Connect device, a Bluetooth speaker, a UPnP/DLNA renderer (with Tidal and Qobuz support), a CD player with metadata, a USB media player, a Snapcast multi-room client, and a PulseAudio network sink. All running in a systemd user session on standard Debian, no root, no cloud, no account. The whole ecosystem is multiple repositories, each usable independently: the API, the installer, the HA integration, the PWA, the disc player daemon, and more. Everything is open source under MIT or BSD 2-Clause: code, CI pipelines, documentation.
I’m building this in the same spirit as the Open Home Foundation: privacy, choice, and sustainability. odio runs on a Pi B+ from 2014, and the first user feedback I got was someone recycling their Pi 1 from 2012. Free software keeping old hardware alive instead of generating e-waste.
What’s new
Flash images. odio is now available directly through Raspberry Pi Imager. Open Imager → Options → Content Repository → Use custom URL → https://beta.odio.love/odio.rpi-imager-manifest. Pick armhf or arm64, configure hostname and SSH, flash, boot. No terminal, no curl, no Ansible. Your Pi comes up with the full stack running: MPD, PulseAudio, Bluetooth, AirPlay, Spotify Connect, UPnP/DLNA, Snapcast, and the odio API with its embedded web UI.
The curl | bash installer is still there for existing Debian systems and non-Pi hardware.
Complete documentation. docs.odio.love covers installation, architecture, every feature, every use case, and the full API reference. Each component is documented independently.
Since the first post: SSE for real-time push updates (no more polling), MPRIS players as HA entities, Bluetooth speaker with commercial-like pairing, Zeroconf auto-discovery, embedded web UI at 0% idle CPU, and the odio PWA for multi-node management.
Looking for beta testers
odio is in open beta. It already has a few declared users, beside me. If you have a Raspberry Pi and a DAC (HAT or USB) collecting dust somewhere, flash the image and see what happens. Being comfortable with Linux and a terminal helps, but even pure UX feedback is valuable: what felt confusing, what worked on first try, what didn’t. Tested so far on Pi B+, Pi 3B+, and several x86-64 setups. The more setups, the better. Feel free to share your experience right here.
Music Assistant
For those of you running Music Assistant: I documented the integration paths at docs.odio.love/guides/music-assistant. AirPlay via shairport-sync and DLNA via upmpdcli are both auto-discovered by Music Assistant with zero configuration on either side. I don’t run Music Assistant myself (my NAS doesn’t have the resources), so this is based on MA’s documented capabilities and hasn’t been validated end-to-end.
The Bluetooth path interests me in particular: Music Assistant could in theory drive an odio node as a Bluetooth speaker via odio-ha’s media player entities and the HA player provider, or with ha-bluetooth-audio-manager. If someone runs both and wants to try any of these paths, I’d love the feedback.
Roadmap
The roadmap is mostly in my head for now, but it doesn’t have to stay that way. It’s already evolving based on user feedback: a user proposed web radio browsing and favourites with detailed user stories and integration questions, and that’s now on the radar. If you want to help, there are many ways beyond code: testing, docs, sharing your setup. See docs.odio.love/guides/community


