Sonora

Sonora

Docker app from Sonora's Repository

Overview

Sonora is a self-hosted web controller for Sonos S1 and S2 systems. Control every Sonos speaker from any browser on any device, Linux included, with nothing to install on the devices themselves. Grouping, volume, EQ, sleep timers, alarms, music services, local libraries, Sonos Favorites and playlists are all there, along with lyrics, a "This browser" room that plays through the page itself, an S2 upgrade advisor, diagnostics, a choice of themes and twenty languages. It talks to your speakers on your own network; signing in to Sonos is optional. Sonora is not affiliated with Sonos, Inc.
Sonora

A self-hosted web controller for Sonos systems

license: AGPL-3.0-only Sonos: S1 and S2 Python 3.11 or newer FastAPI: backend React: 19 Vite: 8

Support Sonora

Sonora - The open source Sonos™ web controller you've always wanted. | Product Hunt


Sonora gives you more ways to play.

📚 Features | 🎨 Themes | 🚀 Get Started | 💙 Contributions | 👏🏻 Credits | 🔒 License


Sonora

Sonora is the Sonos controller you've always wanted.

Liquid Glass theme: Home, Now Playing and a music service

Sonora's browser-based approach finally brings desktop control to Linux users and web control to all Sonos devices.

Most features included in Sonos' desktop and web apps are included in Sonora...plus some new ones!

A human designed Sonora and Claude Code built it.

Sonora is not affiliated with Sonos, Inc. and was created by an enthusiastic end user.


📚 Features

  • 🔊 S1 and S2 in one controller
    • Control every Sonos speaker ever made from a single app. (Room groupings and music services remain separate.)
  • 🖥️ Any browser, any screen
    • Responsive design. No client to install. Linux users finally have a way to play!
  • 🎨 Theme engine
    • Sonora comes with several themes, including three relatively close recreations of Sonos' own Windows, Mac, and web apps.
  • 🎵 All your music
    • Enjoy streamed music services, local libraries, Sonos Favorites, and all your old playlists.
  • 🎤 Lyrics
    • Follow along with the words to whatever's playing, timed to the music where possible,
  • 🏠 Every room
    • Grouping, volume, EQ, sleep timers, and alarms are all included.
  • 📱 A new virtual speaker: "This browser"
    • Play audio through your browser as if it were one more room.
  • 🧭 S2 upgrade advisor
    • Find out what it would take to upgrade your system to S2 or S2.1.
  • 🌐 VPN-Friendly
    • Control speakers when you're away from home over your existing VPN connection
  • 🩺 Diagnostics
    • View response times and radio conditions for every room to troubleshoot connection issues.
  • 🏡 Local first
    • Talks to your speakers on your own network. Signing in to Sonos is optional, as it is on their apps.
  • 🗣️ Multilingual
    • Twenty languages.
  • ⚖️ AGPL-3.0-only
    • Because free software should stay that way.
  • 🤖 Guaranteed Non-Slop
    • I built this because I wanted it for myself. I use it daily, and it is good.

🚀 Get Started

Sonora needs to be installed on your home network on any machine that has access to your Sonos devices. Sonora is lightweight and runs well on even an older Raspberry Pi.

Docker is the recommended way to run Sonora: one command to install, one to update, and nothing else to set up on the machine.

If you run Home Assistant or Unraid, Sonora can also be installed as an app there.

Images are provided for linux/amd64 and linux/arm64. Sonora is lightweight enough to run on an older Raspberry Pi.

Install With Docker (recommended)

Install Sonora

  • Install Docker Engine with Docker Compose
    • If you're on macOS, enable Host Networking within Docker Desktop - it's disabled by default.
  • Download docker-compose.yml into a folder of its own.
  • Then, from the folder holding docker-compose.yml:
docker compose up -d

Find it at http://localhost:50205. (Get it?)

Future Updates

From the same folder:

docker compose pull && docker compose up -d
Install in Home Assistant

You'll need Home Assistant OS or a Supervised install. Container and Core installs can't run apps, so use Docker there instead.

Install Sonora

  • In Home Assistant, go to Settings > Apps and choose Install App.
  • Open the ⋮ menu at the top right, choose Repositories, and add https://github.com/Bretteroo/Sonora.
  • Find Sonora in the store, then install and start it.
  • Turn on Show in sidebar.

Sonora then appears in Home Assistant's sidebar for every user. Phones and other computers can also open it directly at http://homeassistant.local:50205, without signing in to Home Assistant.

Future Updates

Home Assistant offers each new Sonora release as an app update, alongside its own updates.

Install on Unraid

Install Sonora

  • In Unraid, open the Apps tab. If it offers to install Community Applications, do that first.
  • Search for Sonora and click Install.
  • Click Apply. The defaults suit most servers.
  • Open http://your-server:50205, or choose WebUI from Sonora's icon on the Docker tab.

Future Updates

On the Docker tab, click Check for Updates, then apply update next to Sonora.

Install Without Docker

You'll need:

  • Python 3.11 or newer, with its venv module. On Debian, Ubuntu and Raspberry Pi OS that's a separate package: sudo apt install python3-venv.
  • Node.js 20.19 or newer (or 22.12 or newer), to build the interface.
  • git.

Install Sonora

sudo mkdir /opt/sonora
sudo chown $USER: /opt/sonora
git clone https://github.com/Bretteroo/Sonora.git /opt/sonora
cd /opt/sonora/app/frontend
npm ci
npm run build
cd /opt/sonora
python3 -m venv .venv
.venv/bin/pip install --require-hashes -r app/requirements.lock

Future Updates

cd /opt/sonora && git pull
cd app/frontend && npm ci && npm run build
cd /opt/sonora && .venv/bin/pip install --require-hashes -r app/requirements.lock
sudo systemctl restart sonora

Test it

cd /opt/sonora/app && /opt/sonora/.venv/bin/python -m backend

Find it at http://localhost:50205 (Get it?).

This keeps its data (sign-ins, themes) in ~/.config/sonora. The systemd service below keeps its own in /var/lib/sonora, so you'll sign in once more after switching to it.

Make it persistent with systemd

Here's how to start Sonora when the machine boots (and keep it running) with systemd.

If your OS doesn't use systemd, ask a robot how to do this.

Save this as /etc/systemd/system/sonora.service:

[Unit]
Description=Sonora
After=network-online.target
Wants=network-online.target

[Service]
DynamicUser=yes
StateDirectory=sonora
Environment=SONORA_DATA_DIR=/var/lib/sonora
WorkingDirectory=/opt/sonora/app
ExecStart=/opt/sonora/.venv/bin/python -m backend
Restart=on-failure
ProtectSystem=strict
ProtectHome=yes
PrivateTmp=yes

[Install]
WantedBy=multi-user.target

Then sudo systemctl daemon-reload && sudo systemctl enable --now sonora.

Find it at http://localhost:50205

To use a different port, add Environment=SONORA_WEB_PORT=<port> to the [Service] section.

Settings and Firewalls

Sonora reads these from the environment when it starts. In docker-compose.yml they go under environment:, where SONORA_WEB_PORT is already set; in the systemd unit, as Environment= lines.

You shouldn't have to set any of these, ever, unless you've got some really unique shenanigans goin' on.

Variable Default What it does
SONORA_WEB_PORT 50205 The port the page is served on.
SONORA_WEB_HOST 0.0.0.0 The address to listen on. The default is every one.
SONORA_EVENT_PORT 50206 The port the speakers connect to with live updates. 0 picks any free port.
SONORA_DATA_DIR ~/.config/sonora Where sign-ins, installed themes and caches are kept. /data in Docker.
SONORA_ALLOWED_HOSTS Extra names Sonora answers to, comma-separated, such as a reverse proxy's or a tunnel's (sonora.example.net, or .example.net for every name under it). Addresses, localhost, .local names and the machine's own name already work.
SONORA_LOG_LEVEL INFO How much goes in the log.

If the machine running Sonora has a firewall, it needs to let in:

  • TCP 50205 (or your SONORA_WEB_PORT) from the devices you control it from.
  • TCP 50206 (or your SONORA_EVENT_PORT) from the speakers. Without it Sonora still works, but it won't see changes made elsewhere until you reload.
  • UDP from the speakers, which is how they answer when Sonora looks for them.

Docker's network_mode: host is required for the same reason: the speakers have to be able to reach Sonora, not just the other way round.

🎨 Themes

Sonora ships several themes. Six of them, Hi-Fi, Liquid Glass, Material Girl, Severed, Solarized, and Sonofuture, come in both light and dark.

You can make your own themes, too! THEMES.md shows how.

Coromar
Sonora's own default: light concrete, navy glass, tilt-up concrete walls, and stacked stone veneers. Inspired by the seaside office building Sonos calls home.

Coromar theme: Home, Now Playing and a music service

Coromar theme on a phone: Home and the full-screen player
Sedona
Red rocks and a mesa horizon against a desert skyline. Gaze at sedimentary rock while you listen to progressive rock.

Sedona theme: Home, Now Playing and a music service

Sedona theme on a phone: Home and the full-screen player
Outrun
A synthwave sunset, neon, lasers, and a nostalgic feeling. Quintessential Outrun.

Outrun theme: Home, Now Playing and a music service

Outrun theme on a phone: Home and the full-screen player
Solarized
Ethan Schoonover's famous palette for nerds.

Solarized theme: Home, Now Playing and a music service

Solarized theme in dark: Home, Now Playing and a music service

Solarized theme on a phone: Home and the full-screen player, light and dark
Hot Dog Stand
For the OGs. Windows 3.1's most infamous contribution to the world of UX. Ketchup, mustard, and a side of eye strain. Not recommended.

Hot Dog Stand theme: Home, Now Playing and a music service

Hot Dog Stand theme on a phone: Home and the full-screen player
Liquid Glass
The visual design language made popular by Apple. Modern and clean. Floating panels of frosted, specular glass above a drifting mesh wallpaper, capsule controls, and concentric corners.

Liquid Glass theme: Home, Now Playing and a music service

Liquid Glass theme in dark: Home, Now Playing and a music service

Liquid Glass theme on a phone: Home and the full-screen player, light and dark
Sonofuture
The Sonos controller reimagined. Every room at a glance, with drag-to-group, and settings arranged by task. Every capability of the desktop apps, on shorter paths.

Sonofuture theme: Home, Now Playing and a music service

Sonofuture theme in dark: Home, Now Playing and a music service

Sonofuture theme on a phone: Home and the full-screen player, light and dark
Hi-Fi
Your house as a rack of audio components: a turning record, a glowing display, knobs, and a cassette deck for the queue. Brushed silver by day, black anodized at night.

Hi-Fi theme: Home, Now Playing and a music service

Hi-Fi theme in dark: Home, Now Playing and a music service

Hi-Fi theme on a phone: Home and the full-screen player, light and dark
Material Girl
Built on Google's Material 3 Expressive design system. Shape-shifting covers, a floating player tinted by what's playing, and wavy lines in all the right places.

Material Girl theme: Home, Now Playing and a music service

Material Girl theme in dark: Home, Now Playing and a music service

Material Girl theme on a phone: Home and the full-screen player, light and dark
Severed
A desk terminal for doing mysterious and important work. Soothing scanlines and a phosphor glow pour over your music library. Uniquely suited for macrodata refinement.

Severed theme: Home, Now Playing, and a music service

Severed theme in dark: Home, Now Playing, and a music service

Severed theme on a phone: Home and the full-screen player, light and dark
Sonos Web
A recreation of Sonos' own web player, brought into the future (or is it the past?) with support for S1.

Sonos Web theme: Home, Now Playing and a music service

Sonos Web theme on a phone: Home and the full-screen player
Sonos macOS Desktop
A web recreation of the Sonos desktop controller for macOS.

Sonos macOS Desktop theme: Home, Now Playing and a music service

Sonos macOS Desktop theme on a phone: Home and the full-screen player
Sonos Windows Desktop
A web recreation of the Sonos desktop controller for Windows.

Sonos Windows Desktop theme: Home, Now Playing and a music service

Sonos Windows Desktop theme on a phone: Home and the full-screen player

Three generations of hardware

Sonos launched its first devices in 2005. They were, and still are, awesome.

In 2020 Sonos announced the move to "S2", a minimum hardware spec paired with a new, separate control app.

In August 2025 there was another split, marked by a new "S2.1" (my term) hardware tier. As of August 2025, only S2.1 devices receive new features.

Sonora controls speakers from all three generations. A wall still exists between S1 and S2 speakers, though. (You can't group rooms across systems and streaming service links remain independent across systems.)

Sonos Platforms Through The Years

Some S1 speakers can be software-upgraded to S2. You'll need to use an official Sonos S1 controller to do so. Here's how.

🪄 Sonos Upgrade Advisor

Sonora includes an upgrade advisor that will help you understand:

  • Which S1 devices can be upgraded to S2 via software
  • Which devices would need to be replaced for S2 support
  • How to go all-in on S2.1 if you'd like to try to future-proof your system.

Make sure you're sitting down - it'll show the MSRP cost estimates to do so. 🫠

🧐 Why Sonora exists

When I switched from Windows to Linux years ago, I lost a native desktop Sonos controller. Without realizing it, I mostly stopped using my Sonos devices as a result.

I sit in front of a computer for several hours a day, and context-switching to jump on my phone and drill through menus to play music was just annoying enough that I eventually stopped bothering.

I waited patiently for over a decade for Sonos to release a Linux desktop controller, scouring GitHub for any mature open source options every few months, finding none.

Then Claude Code came along and changed everything. Claude helped me build the Sonos controller I'd always wanted in about two months.

Sonora is platform agnostic and controls both S1 and S2 devices from any OS with a browser. I've been meticulous in working to recreate as much of Sonos' smooth interface as possible, and have included a theming engine so you can make Sonora look (and behave) however you'd like.

Sonos has built something wonderful, and Sonora helps even more of the world experience it. I'm really proud of it! I hope you like it.

Using Sonora

It's really not that hard. You'll figure it out!

Music services

To play a service that needs an account login, like AccuRadio or Spotify:

  1. Add the service in Sonos' own app in the Sonos S1 or S2 controller (or both).
  2. Add the service a second time, this time in Sonora using the same credentials. (Sonora will prompt you to do this for each unlinked account.)

Anonymous services that don't require logins (like Audacy) only need step 2.

[!NOTE] A notable few music services will not allow themselves to be used with apps like Sonora. SoundCloud is one example. For services like these, you can navigate their menus and initiate playback with an official Sonos controller, but will have only basic playback controls with Sonora.

Virtual Room

You'll see a room called "This browser". That's just what it sounds like - a virtual speaker for streaming audio to your browser.

This is experimental; many services will only permit streaming to a Sonos device.

💙 Contributions

Issue reports are welcome. If you find a bug, open an issue and say which theme you were using, which system (S1 or S2), which music service, what you did, and what you saw. Screenshots help!

My goal for Sonora is for it to feel every bit as polished as an official Sonos product.

There are many streaming services, each sending out a variety of content types (live streams, playlists, individual tracks, albums, podcasts, audiobooks, etc) and testing across all of them has taken up the bulk of development time. I'm sure there are still some lingering display issues or bugs out there, but with over 100 streaming services supported by Sonos, I can't subscribe to everything. Your reports help!

👏🏻 Credits

“I love that people are experimenting enough to build third-party solutions when we haven’t shipped something ourselves yet.”
- Sonos CEO Tom Conrad, Jan 28, 2026

  • Sonora stands on the shoulders of giants. It is a functional synthesis of Sonos research from others that have come before. These projects documented how the speakers worked long before Sonora existed.

  • Sonos has been working tirelessly to create hardware and the software that drives it for over 20 years. Their early decision to create a (relatively) open platform with a local-first design allows Sonora, and tools like it, to exist and function.

  • The themes that follow Sonos' apps were made by using and measuring them. They contain none of Sonos' code, artwork, or translations.

  • Service logos, product pictures, and cover art are fetched while Sonora runs and belong to their owners.

  • Lyrics come from LRCLIB, a free, community-run library. Big ups to the LRCLIB project.

🔒 License

This project is licensed under AGPL-3.0-only: the GNU Affero General Public License, version 3, and no later version. The full text is in LICENSE.

Sonora is not affiliated with, endorsed by, or supported by Sonos, Inc. "Sonos" is a trademark of Sonos, Inc.

Media gallery

1 / 3

Requirements

Host networking (set by this template). Sonora finds the speakers by multicast, and the speakers connect back to it on the event port, so it must be on the same network as the speakers. It uses ports 50205 and 50206 on the server; if either is taken, set others in the template's Web port and Event port settings.

Related apps

Details

Repository
ghcr.io/bretteroo/sonora:latest
Last Updated2026-10-31
First Seen2026-10-31

Runtime arguments

Web UI
http://[IP]:[PORT:50205]/
Network
host
Shell
bash
Privileged
false

Template configuration

DataPathrw

Sign-ins, installed themes and caches.

Target
/data
Default
/mnt/user/appdata/sonora
Value
/mnt/user/appdata/sonora
Web portVariable

The port the page is served on. With host networking there is no port mapping, so change the port here. If you change it, edit the WebUI link under Advanced View to match.

Target
SONORA_WEB_PORT
Default
50205
Value
50205
Event portVariable

The port the speakers connect to with live updates. 0 picks any free port.

Target
SONORA_EVENT_PORT
Default
50206
Value
50206
Allowed host namesVariable

Extra names Sonora answers to, comma-separated, such as a reverse proxy's (sonora.example.net, or .example.net for every name under it). Addresses, localhost, .local names and the server's own name already work.

Target
SONORA_ALLOWED_HOSTS
Log levelVariable

How much goes in the log: DEBUG, INFO, WARNING or ERROR.

Target
SONORA_LOG_LEVEL
Default
INFO
Value
INFO