An unofficial Sonos controller built with Rust + Tauri + React. Designed as a lightweight, native-feeling replacement for the abandoned Electron-based Sonos controller on Linux desktops.
- Multi-room control — Browse and select speakers/groups from the sidebar
- Now Playing — Full playback controls (play/pause, next/prev, seek, volume)
- Queue management — View, reorder, and clear the play queue
- Music library browsing — Browse local music shares via UPnP ContentDirectory
- Music services — Browse and play from online music services:
- QQ Music — Search songs via web API, play directly on Sonos (no login required)
- TuneIn — Browse and play radio stations (anonymous access)
- Other services — Browse via SMAPI where supported
- Group management — Join/leave speaker groups
- EQ controls — Bass, treble, and loudness adjustment per speaker
- Sleep timer — Set per-speaker sleep timers
- Custom title bar — Seamless dark UI with no system chrome
- Low resource usage — ~30MB RAM (vs 300MB+ for Electron)
| Format | Architecture | Notes |
|---|---|---|
| AppImage | x86_64 | Portable, no install needed |
| .deb | x86_64 | Ubuntu / Debian |
| .rpm | x86_64 | Fedora / openSUSE |
Check the Releases page for pre-built packages.
brew tap topcheer/sonos-controller
brew install --cask sonos-controller| Format | Install |
|---|---|
| AppImage | chmod +x && ./Sonos.Controller_*.AppImage |
| .deb | sudo dpkg -i *.deb |
| .rpm | sudo rpm -i *.rpm |
| .tar.gz | tar xzf *.tar.gz && ./sonos-controller/sonos-controller |
- Rust 1.70+ (
rustup) - Node.js 18+ and npm
- System dependencies (Ubuntu/Debian):
sudo apt install libwebkit2gtk-4.1-dev build-essential curl wget file libxdo-dev libssl-dev libayatana-appindicator3-dev librsvg2-dev
- System dependencies (Fedora):
sudo dnf install webkit2gtk4.1-devel openssl-devel curl wget file libxdo-devel libappindicator-gtk3-devel librsvg2-devel gcc
git clone https://github.com/topcheer/sonos-controller.git
cd sonos-controller
npm install
npm run tauri buildOutput binaries are in src-tauri/target/release/bundle/.
npm run tauri devThe controller communicates with Sonos speakers over the local network using UPnP/SOAP:
- Device discovery — SSDP (UPnP) to find speakers on the LAN
- Playback control — AVTransport UPnP service
- Queue management — AVTransport + ContentDirectory
- Music services — SMAPI (Sonos Music API) + service-specific web APIs
- QQ Music playback — Songs found via QQ Music search API are played using
x-sonos-httpURIs with speaker-stored credentials (SA_RINCONtoken in DIDL metadata)
No configuration needed — the controller auto-discovers Sonos speakers on your network.
Music service tokens (if applicable) are stored in browser localStorage.
- Sonos S1 and S2 speakers
- Linux (X11 / Wayland)
- Tested with: Sonos One, Sonos Play:1, Sonos Play:5, Sonos Beam
- Online music service browsing depends on third-party SMAPI endpoints (some may be unreliable)
- QQ Music OAuth login page is currently broken on Sonos's side — search-and-play works as a workaround
- No Sonos Cloud API access (local network only)
- No alarm management yet
- unoffical-sonos-controller-for-linux — Original Electron-based Sonos controller that inspired this project
MIT
