sonn GitHub

the open audio server

One server. Every room. Your speakers.

sonn collects your music — local library, Spotify, Apple Music, Tidal, radio, even the turntable — and plays it in sync on the speakers you already own, over almost any protocol they speak. Or skip the rooms entirely and serve your content to every app in the house.

Get started

open source apache-2.0 self-hosted 4.0 beta

24

zones, one per room

192kHz

bit-perfect, delivered untouched

8

output protocols

0

cloud required

the gist

Place it next to what you already know.

sonn sits where a few products you may know sit — it just refuses to pick one lane. Whichever door you come in through, it is the same server behind it.

if you know sonos

The whole-home experience, unbranded

Grouped rooms, one app, music everywhere — without buying into one brand of speaker. sonn does the brains; the speakers you already own do the sound.

if you know plex or jellyfin

A media server, for music

Self-hosted, one place for everything you listen to, reachable from every app in the house. And unlike a media server, it can also drive the rooms itself — in sync.

if you run loxone

A drop-in Audioserver

Pair it with the Miniserver and zones, wall switches and the Loxone app just work. And if Loxone means nothing to you: nothing here requires it.

out of the box

  • Every room in perfect sync
  • Spotify, Apple Music & Tidal on devices that lack them
  • Bit-perfect delivery to the endpoint
  • AirPlay & Spotify Connect target for any zone
  • The turntable, through the whole house
  • Amplifiers wake before the first note
  • Full Loxone Audio Server, drop-in
  • HTTP API, live events and MQTT

one server, two shapes

Content server, or whole-home system. Or both.

A fresh install starts with no zones and nothing shared. What you switch on decides what it becomes — and you can change your mind later without starting over.

01 / content only

Serve your music to everything

Point your library, streaming accounts and radio at sonn, switch on how you want to reach it, and every app and device in the house can browse and play — no rooms to configure, nothing to manage per device.

  • DLNA / UPnP MediaServer — smart TVs, receivers, network speakers
  • Subsonic API — Symfonium, Amperfy, DSub and friends
  • Network drive (WebDAV) — drag albums in with Finder or Explorer
  • Built-in web player, from any browser on the network

Streaming services included — on devices that have no support for them of their own. A DLNA TV has no Apple Music or Tidal app, yet it browses and plays your accounts straight from the couch, because sonn serves them like any other content.

02 / multiroom

Or own the rooms yourself

Add fixed zones — up to 24, one per room — and sonn drives the speakers directly: named rooms, synchronized groups, one place to control the whole house.

  • Central control from the web player, Admin UI or a Loxone app
  • Group any rooms to play in perfect sync
  • Per-zone equalizer, volume limits, favorites and recents
  • Amp power switching over GPIO, USB relay or the network, per zone or shared

With the Loxone integration on, the Miniserver supplies the zones — sonn behaves as a full Loxone Audio Server.

the signal path

Your file, unchanged, at the speaker.

sonn is built around one idea: the audio that leaves your library should reach the player exactly as it was recorded. Every stage that could touch it is visible per zone — and the server does none of them unless something makes that impossible. Try it:

source

output

processing

source

Library

FLAC · 24-bit / 192 kHz

resampler

SoX · 28-bit

bypassed

equalizer

10-band

bypassed

volume

On the device

never in the stream

sendspin

Endpoint

24-bit / 192 kHz

bit-perfect

A Sendspin endpoint announces the formats it accepts, and this one accepts the source's own — so the server sends exactly that: the file's own samples arrive at the endpoint, untouched. Nothing in the chain gets a vote — and after the handoff, the chain is yours.

The player carries this reading for every zone, live — a view inside it rather than a second app: the source format, every stage that touched the audio, and the verdict. Bit-perfect, untouched, or altered — with the reason. And if you just want music: use whatever output you already have. All of it works, all of it sounds good, and none of it needs a thought about sample rates.

content

Everything you listen to, in one place.

Every source is available to every consumer of the server — the web player, Loxone, DLNA devices and Subsonic apps alike. Configure it once, reach it from everywhere.

Local library

Folders and network shares, indexed by tags into albums, artists and tracks — with cover art, and artist pictures fetched automatically.

  • Incremental indexing — a dropped file just appears
  • Add music by drag-and-drop, or over the network drive
  • Browse, search and manage from the Admin UI

Streaming services

Spotify, Apple Music, Tidal, Deezer, YouTube Music, YouTube, SoundCloud — and Music Assistant as a source, exposing its own providers.

  • Several accounts of one service can coexist
  • Each account is its own browsable service
  • Served on to Loxone, DLNA and Subsonic too

Radio

The TuneIn directory, Radio Paradise and your own custom streams — with artwork, through any zone and any app in the house.

  • TuneIn presets, and search across the full directory
  • Custom streams, with your own cover art

Line-in

The turntable or CD player, through any zone — carried in by the Sendspin source role on a Sonn Client next to the equipment, or pushed to a line-in's own WebSocket or TCP address.

  • Optional Shazam track recognition
  • Play, pause and skip are forwarded to the device — when it can be driven over the network
  • B&O Masterlink gives full control — play, pause, next, previous, and a Beosound 9000 even changes discs on command

Announcements & alerts

Text-to-speech and alert sounds through any zone — the music ducks, the message plays, the music returns. Built for home automation, and fully part of the API.

  • One call from your automation: POST /zones/3/announce
  • Doorbell, alarm, dinner call — TTS built in, LoxBerry TTS over MQTT if you prefer
  • Loxone-native when paired: bell, alarm, fire and TTS behave like the original

the web player

The whole house, from any browser.

The server serves its own player — open :7090 on a phone, a laptop or the wall panel and every room is there. Nothing to install, nothing to update, and it can never be out of date: it comes from the same box that plays the music.

A page per record
On a desk the sleeve is the left page and the record's own colour is the right: the artist, the name, the album it came from, what is next, and every room along the foot. The name is measured into its place, so a long one never shifts the page under it — and one record dissolves into the next rather than cutting.
Search everything at once
One search across your library and every connected service, bucketed by kind. Find a track, tap it, and it plays in the room you have selected.
A catalogue laid out like a shelf
Every service behind its own mark, with what this room played lately underneath. An artist gets a page of their records rather than a numbered list, and a library of hundreds files itself under its letters — with a rail down the side to jump.
Favourites from any row
A heart sits on everything that can play — browse results, search hits, queue entries, recents — and adds it to the zone's favourites: the same ones a Loxone wall switch or a Beoremote cycles through.
The queue, grouping and a 10-band EQ
Reorder what plays next, pull rooms into a group mid-song, shape a zone with its own equalizer — and see the true stream format of every room, down to the bit-perfect verdict.
Always in agreement
Two phones, the wall panel and the Loxone app all show the same state, live — nothing polls, and an edit made anywhere appears everywhere.
The sonn web player on a phone: the sleeve to both edges, the name under it, the transport and the room's fader
The sonn web player on a desktop: the album sleeve fills the left page, the right page carries the artist, the title, the timeline, the transport and the other rooms
the stage — the sleeve is the left page, the record's own colour the right

zones & outputs

The speakers you already own are the system.

A zone is one device in one room. sonn speaks to nearly anything that can make sound — and a zone can also receive: point AirPlay or Spotify Connect at an old amplifier, and it just works.

bedroom idle · amp off study turntable · line-in bath airplay receiver living room sendspin · 24/96 kitchen chromecast grouped · in sync sonn core 24 zones max · :7090
one server in the basement, every room in sync
SP Sendspin
CC Chromecast
SN Sonos
AP AirPlay
DL DLNA / UPnP
SC Snapcast
SQ Squeezelite
MA Music Assistant
Receivers
A receiver lets a phone or app play to a zone: the stream lands on the server, which sends it on to that zone's output. A pair of Snapcast speakers on a Raspberry Pi shows up as an AirPlay target with no support of its own — and one zone can offer them all at once. spotify connect airplay dlna line-in music assistant
Grouping
Any rooms play in sync, regrouped on the fly. The kitchen joins the terrace for dinner and leaves again after — from the app, the wall panel, or a Loxone scene.
Power management
A zone can wake its amplifier before the first note and switch it off after the music stops — a GPIO line, a USB relay, or a network switch driven over HTTP or UDP — per zone or per shared amp group, with pre-delays and off-delays so short gaps never cycle the hardware.
A Raspberry Pi becomes a room
Sonn Client is one command on a Pi: it registers itself, reports its sound cards, and waits here to be given a room. The same box can also carry the turntable in as a line-in, take a phone over Bluetooth, or serve a Bang & Olufsen remote — each switched on separately, and none of it configured on the device.
This browser is a room
The web player registers itself as a local destination: select it and play, and it plays here — driven by exactly the same controls as the hardware zones.

beoremote one

Bidirectional control with the Beoremote One.

Radio stations and room favourites appear directly as playable items on the remote's screen — the server builds the list, the remote plays from it. Every coloured and dot button starts something in the room, and play, pause and skip route to whatever is playing, including a line-in device that can be driven.

Volume stays on the device itself, so it keeps working even when the server is briefly unreachable. The remote pairs over Bluetooth with a Sonn Client in the room — a Raspberry Pi, one command — which serves the menu and forwards the keys; once it runs, you only pick which remote belongs to which zone. A Beoremote Essence works there too.

A Bang & Olufsen Beoremote One, close up: the display lists the sources
beoremote one — the list on it comes from the server
The sonn Admin UI Zones screen: four zones named Living room, Kitchen, Study and Bedroom, each with AirPlay, Spotify Connect and DLNA receiver chips
zones — one per room, receivers on every one

loxone

A drop-in Loxone Audio Server.

Not an add-on that talks to Loxone — a complete Audioserver implementation. Pair it with a Miniserver and it behaves like the real thing: zones, sources, favorites, alerts and the native Loxone app, with up to 24 zones — the same ceiling as the original.

  1. Choose Loxone integrated under Zones — the server starts listening immediately.
  2. Add the Audio Server in Loxone Config with the serial and host from the Admin UI.
  3. Deploy and reboot the Miniserver. The icon turns green, and your zones arrive.

Non-Spotify services are presented to the Miniserver as virtual Spotify accounts — the only vocabulary Loxone clients have for them. Everywhere else they keep their own name. Disconnecting takes effect without a restart, and your own zones return.

home assistant & your own tools

And it plays well with the rest of the house.

An optional MQTT surface publishes every zone as retained topics — whole objects as JSON, single fields as plain scalars — so Home Assistant, Node-RED or a KNX gateway consume it with no code at all. Control works the same way: publish a value, done.

# state, retained — connect late, see everything
sonn/zones/3                {"name":"Kitchen","state":"playing",…}
sonn/zones/3/state          playing
sonn/zones/3/track/title    Song

# control — a value, or a relative nudge
mosquitto_pub -t 'sonn/zones/3/set/volume' -m '+5'
mosquitto_pub -t 'sonn/zones/3/cmd' -m '{"power":"on","volume":40}'
A native Home Assistant integration is on the roadmap. Today, HA already talks to sonn over MQTT and the HTTP API — the native component will make it one-click.

for builders

An API where curl is a first-class client.

Commands are plain HTTP, and reading state never requires polling: subscribe to the event stream once and you are told about every change. No handshake, no correlation ids, no SDK to install — a five-line shell script is a complete integration.

# What is playing everywhere?
curl http://server:7090/api/v1/zones

{
  "id": 3,
  "name": "Kitchen",
  "state": "playing",
  "track": { "title": "Song", "artist": "Artist", "coverUrl": "…" },
  "output": { "protocol": "sendspin", "format": { "sampleRate": 192000, "bitDepth": 24 } }
}

Open by design

Apache-2.0, on GitHub. The public API is documented down to the field, and the web player is built on it and nothing else — if the contract can't carry a real player, that's a bug.

Events over polling

Two tabs, a wall panel and the Loxone app all agree, because everyone renders the same zone.changed. An edit made anywhere shows up everywhere, with no code of yours involved.

MQTT too

Same state, second surface: retained topics a Miniserver or KNX gateway can read without parsing JSON. Both run at once and cannot disagree — they publish from the same source.

get started

Running before the coffee is.

One container on the always-on machine you already have — a Raspberry Pi, a NAS, a mini-PC. Host networking so it can discover your speakers, and one folder that holds everything: back up that folder and you have backed up the install.

quick start
# one file, one command — the compose file lives in the repo
curl -LO https://raw.githubusercontent.com/sonn-audio/core/main/docker-compose.yml
docker compose up -d

Then open http://<server-ip>:7090, create your admin account, and walk the three steps: Content — add your music. Access — switch on how to reach it. Zones — only if you want rooms. Steps one and two are already a working audio server.

port carries when
7090 Admin UI, web player, API, Subsonic, WebDAV, DLNA, audio streams always
7091 Loxone native app protocol loxone on
7095 Loxone Miniserver protocol loxone on
Prefer bare metal? It runs directly on Node.js 20+ — clone, npm install, npm run build, npm start.

open source · self-hosted · yours

Your music deserves a server this good.

No subscription, no cloud dependency, no speakers to replace. Everything runs on your own network — pull the internet cable, and your library keeps playing.