docs forum odio
odio logo

odio·love Revive any Raspberry Pi as an open-source audio streamer

That Pi in your drawer?
It's already a €400 streamer.

curl -fsSL https://odio.love/install | bash

Flash an SD card. Your Pi wakes up as a full streamer, ready for Home Assistant.

Embedded web UI — full dashboard (RIP Dooz Kawa)

What is odio?

Got an amp or speaker with no smart features — either it never had any, or the manufacturer dropped support? Plug a Raspberry Pi running odio into its input. It now speaks AirPlay, Spotify Connect, Bluetooth, DLNA, MPD, web radios — every modern source, on your network. Even a Pi B from 2012. Free, self-hosted, no account, no cloud.

You’ll want a DAC for a proper listening experience.

Built for makers.
Minimal Debian, user session, near-zero system changes. Nothing locked — underneath it’s still your Debian, yours to extend, break, fix, repurpose.
Open for developers.
Every node exposes a REST API. Playback, volume, sources, Bluetooth, services — all programmable over HTTP.
Any player, automatically.
The API talks to audio apps through a standard protocol. odio ships a curated stack; add or remove players — the API just sees what’s running.
UI replaces your remote.
Power, volume, play/pause, next, source. Browsing catalogs stays with Spotify, BubbleUPnP, myMPD — pick your tool.

Custom clients, automations, voice control (Piper, Whisper), parental controls your kid will learn to bypass. The API is the product. Your setup, your rules.

< 50ms
p95 response time
0 %
CPU at idle
< 20 MB
RAM

What freedom costs elsewhere

The same features. Very different terms.

Feature odio Volumio (free) Commercial
License 100% open source Partially closed source Proprietary
Price Free Freemium — Premium at €60/year €200–€2000+ device
Account required No Yes Yes
Cloud dependency None Yes (account, Premium, plugins) Yes
Minimum hardware Raspberry Pi B (armv6l, 2012) Raspberry Pi 3 Dedicated hardware only
Music library management Streamer first; optional myMPD library browser Built-in library browser Built-in (locked ecosystem)
Bluetooth A2DP ✅ Included 💰 Premium only ✅ Included
AirPlay ✅ Included ✅ Free plugin Varies
Spotify Connect ✅ Included ✅ Free plugin Varies
Qobuz ✅ Included (via upmpdcli) 💰 Premium only Varies
Tidal / Tidal Connect ✅ Included (via upmpdcli) 💰 Premium only Varies
Web radios ✅ Included (myMPD / upmpdcli) ✅ Free plugin Varies
UPnP / DLNA ✅ Included ✅ Included Varies
Multi-room ✅ Included (Snapcast) 💰 Premium only Varies
CD playback ✅ Included with metadata 💰 Premium only Varies
Source switching Not needed: all sources mix simultaneously Required: one source at a time Required: one source at a time
Network audio sink ✅ PulseAudio / PipeWire TCP
Home Assistant ✅ Native integration Unofficial community plugin Varies
Voice assistant / AI ✅ Via Home Assistant (Piper, Whisper) 💰 CORRD (Premium) 💰 or locked ecosystem
Installation Image flash or one command (curl | bash) Image flash Plug and play
Upgrade In-place via odio-upgrade; OTA UI/HA upcoming OTA / reflash between major versions Vendor-controlled OTA
Security updates ✅ Continuous (unattended-upgrades on SD images) Latest kernel at release Vendor-controlled
Long-term stability No reinstall from Buster to Trixie Reflash between major versions EOL decided by vendor

Get started

Two paths. Same destination.

Flash an image

Use Raspberry Pi Imager with a custom repository URL. Configure hostname, SSH & WiFi, then flash.

https://odio.love/odio.rpi-imager-manifest
  • Imager → Options App → Content Repository → Use custom URL
  • Available in armhf (32-bit) and arm64 (64-bit)

Install on Debian / Pi OS

Debian 13 (trixie) and Ubuntu compatible. The installer handles all dependencies and services.

curl -fsSL https://odio.love/install | bash
  • ~800 MB - ~5 min on x86, <15 min on Pi 3B+, up to 1h20 on a Pi B+ at 800 MHz

Tip: set up DAC and overclocking (armhf) in /boot/firmware/config.txt beforehand to save a reboot.

Need help? Check the documentation for detailed guides and API reference.

Compatible hardware

  • Raspberry Pi B, B+, Zero W - armv6l (800 MHz recommended)
  • Raspberry Pi 2 - armv7
  • Raspberry Pi 3, 4, 5, Zero 2 W - arm64
  • Desktop, NAS - x86-64
  • Debian 13 (Trixie)

odio is in beta — daily use is solid. Install and upgrade paths can still hit edge cases across the long tail of hardware. Try it on yours, report bugs and help grow the list.

Verified on - add yours ↗

armv6l Raspberry Pi B, Raspberry Pi B+ - Raspberry Pi OS Lite (Trixie)
armv7 Raspberry Pi 3B+ - Raspberry Pi OS Lite (Trixie 13.4)
arm64 Raspberry Pi 3B+ - Raspberry Pi OS Lite (Trixie)
x86-64 Desktop - Debian 13 Gnome, NAS - OpenMediaVault 8
other Fedora 43 x86-64 (API only/manual)

Common questions

Things people keep asking on Reddit, GitHub, and DMs.

How does odio differ from Volumio, moOde, or other Pi audio distros?

odio is not a custom distro: it’s a stack of services that installs on top of your existing Raspberry Pi OS Lite. It runs on every Pi from the original B (700 MHz single core, 32-bit) to the Pi 5, exposes power and Bluetooth as Home Assistant entities, plays inserted CDs and USB drives automatically with metadata, and ships a documented HTTP API you can build your own UIs on. See how it stacks up against commercial alternatives.

Which Raspberry Pi models are supported?

All of them. Pi B / B+ / Zero W (armv6l), Pi 2 (armv7), Pi 3 / 4 / 5 / Zero 2 W (arm64). x86-64 desktops and NAS running Debian 13 are also supported. The full hardware matrix is in the install section above.

Do I need to flash a new SD card?

No. odio installs on top of an existing Raspberry Pi OS Lite (Trixie) with a single curl install command. You keep your SSH keys, your hostname, and anything else you already run on the Pi. Pre-built Raspberry Pi Imager images are available if you prefer to start fresh.

Where does my music library live?

Mount it at /media/USB/<music> via NFS, SMB, or local storage. MPD picks it up automatically. If the library lives on a NAS, you can also stream straight to odio via AirPlay, Snapcast, UPnP, or PulseAudio TCP without copying anything: see the features section for the full protocol list. The MPD guide walks through library mount details.

Can odio run in Docker?

No, not as a real install target. Docker is used in CI to test the install playbook on x86_64, arm64, and armhf (via qemu), but the supported install path stays bare-metal Pi OS. The core API (go-odio-api) ships its own docker-compose if you want to embed just the brain into your setup. Containerizing the full audio stack is open territory, contributions welcome.

Does it work with Plex, Jellyfin, Music Assistant, or Navidrome?

Yes, in different ways. Music Assistant connects via the AirPlay, Snapcast, UPnP, or Spotify Connect endpoints odio exposes. Navidrome works through MPD’s library scan. Plexamp can run as a third-party extension in odio’s user session. Per-stack guides cover each integration.

Is odio free? What's the license?

Yes, free and open source under BSD-2-Clause. No accounts, no telemetry, no paid tier: see the comparison with commercial streamers for what that means in practice. Every component (API, installer, Home Assistant integration, web app, CD player, docs) is public on GitHub.

odio·love

In 2016, I almost bought a smart amp. The ones with the inputs I needed — phono included — were expensive, and one thought kept nagging me: the day the manufacturer decided my hardware wasn’t worth supporting anymore, that money would be gone. So I bought a dumb amp instead. A €35 Raspberry Pi B+, a HiFiBerry DAC, a wooden box. I’d do the smart part myself — a free machine between the amp and the rest of the world, where no one else held the lease.

Over the years I tried everything: Volumio, RuneAudio, Mopidy, Pi MusicBox. Three times Volumio. Each time the same story: Locked appliances, Bluetooth that barely worked, audio cracks, half-broken setups. Never quite right. Never quite mine.

During the first COVID lockdown, I finally stopped tweaking other people’s system and built what I actually wanted. The Pi B+ is still running. It’s 2026.


Hardware doesn’t become obsolete. Someone decides it is.

In 2022, Sonos pushed a software update that permanently degraded its older speakers, hardware that worked perfectly the day before. Not a technical necessity. A choice. Pay for new hardware or accept a worse product you already bought.

Two years later, a mandatory app rewrite silently removed dozens of features overnight. Same hardware. Same network. Alarms gone. Local library, gone. The product you bought runs on software you don’t control, updated on a schedule you didn’t choose.

And it’s not always a software update. A Marantz A/V receiver from 2012 still plays, still amplifies, still has its web radio menu — but the directory service behind it now charges a yearly fee to add a single station. A PURE Evoke radio became a dumb radio overnight when its directory was shut down. The hardware never broke. The backend did, on purpose.

Every mandatory account to stream audio inside your own home is a lock you didn’t choose. Every €60/year subscription for Bluetooth, a 25-year-old protocol, is a rent on something you already own. Every dropped Pi model is a device that becomes e-waste not because it stopped working, but because a roadmap said so.

Every streaming session has become data, to be collected, profiled, monetized. It’s not a side effect, it’s their model. For the entire lifetime of your device.

odio is a refusal. Not of progress, but of the model where someone else holds the keys to what you own and use that to steal and sell your data. A DAC plugged into a thirty-year-old amp, a Pi bought last decade, still running in 2026 because every layer is replaceable, every protocol is open, and nothing in the stack depends on a company staying alive or benevolent. That same hardware now speaks AirPlay, Spotify Connect, Tidal, and talks to Home Assistant through an API that didn’t exist in January 2026. Free software is not just a philosophy here. It is the engineering condition for durability and sustainable hardware, and the only foundation on which you can keep building without starting over.

Keeping a 10+ yo board alive in 2026 is not nostalgia. The most sustainable device is the one already manufactured.

Built in the open

odio exists because the tools it depends on — MPD, PulseAudio, Shairport Sync, Snapcast, upmpdcli — were built by people who chose openness. The same deal applies here.

Every line is readable. Every binary is reproducible. Bug reports, patches, and opinionated configuration choices are all welcome.