BluOS controller · Bluesound, NAD and PSB · Linux, macOS and Windows

Your music,
your way…

A fast, native controller for BluOS players. Your library and every service the player offers, cover art throughout, every room grouped how you like — on all three desktops, from one small application.

Rust throughout · Slint for the interface

no webviewno Electronno accountno telemetry

The window

Azzurro
AZZURRO
Home Favorites Search Presets Bluetooth HDMI ARC Library Radio Radio Paradise TuneIn
My Stations Settings Help
Halve Moon Local Music
Lantern Season Halve Moon Album · 2024 · 9 tracks · 41:18 Play all Shuffle
Lantern Season2024 Blue Hour2022 Paper Boats2021 Sightlines2019 Winter Almanac2017
1Long Way RoundHalve MoonHR 2Lantern SeasonHalve MoonHR 3Harbour LightsHalve MoonCD 4Stray CurrentHalve MoonCD
Play Queue 11 tracks · 51:34
  • Lantern SeasonHalve Moon HR 3:58
  • Blue HourThe Ninth Wave CD 5:21
  • Paper BoatsIvo Anhalt MQA 4:30
  • CadenceMarta Reyes HR 4:12
  • SightlinesOyster Club CD 6:02
  • Winter AlmanacField Notes CD 3:44
  • Harbour LightsHalve Moon CD 4:41
  • Stray CurrentHalve Moon CD 3:27
  • Slack WaterThe Ninth Wave CD 4:58
  • Bell TowerMarta Reyes HR 5:33
  • The UndertowOyster Club CD 5:08
Save Edit Clear
Lantern Season Halve MoonHR
1:24/3:58
38
The window, rebuilt here in HTML from the geometry in ui/app-window.slint. Pick a track, or open the player list from the pill — the colour behind everything is taken from the sleeve. The music is invented; the layout is not.

Open it. Your speakers are there.

No pairing, no account, no setup screen. Azzurro finds every BluOS player on your network and remembers them, so one that was switched off last night is waiting when you come back.

It moves when you do.

Press play and the window has already changed. Change the volume from the remote, or from someone else's phone, and it changes here too — not a second later, not on a refresh.

A real application.

Written in Rust and drawn natively. There is no browser hidden inside it, no Electron, no Qt — which is why it starts instantly, sits at a few tens of megabytes, and does nothing at all while you are not using it.

Your whole library, and every service on the player.

Artists, albums, songs, genres, composers, folders and playlists, with cover art throughout. Your radio services, your presets, your inputs. Long lists jump to a letter from the keyboard or the alphabet down the side, so two thousand songs is a keystroke rather than a scroll.

The room takes its colour from the sleeve.

Every cover washes the window in its own colour — a red sleeve and a green one feel different from across the room, before you are close enough to read anything. Light and dark themes, and it follows the one your desktop is already using.

One speaker, a few, or the whole house.

Group rooms from the player list — one at a time, or everything at once. Each keeps its own volume, so the kitchen can be loud while the bedroom is not.

The same app on all three.

Linux, macOS and Windows, from one codebase — not a port and not a web page in a frame. On Linux each speaker also appears to the desktop as its own media player, so your media keys work.

Version 0.1.0.

Signed checksums for everything. The macOS build is notarised by Apple; the Windows build carries its own C runtime, so it needs nothing else.

Linux, as a Flatpak bundle for x86_64 or aarch64. It carries its own runtime, so it does not care what your distribution ships.

flatpak install --user azzurro-v0.1.0-x86_64.flatpak

macOS, signed and stapled, so it opens on first launch:

brew install --cask jzbz/azzurro/azzurro

Windows, from the package manager it already has:

winget install Azzurro.Azzurro

Every release ships a SHA256SUMS signed with my key. Check it before you trust any of the above — it is the one artefact that survives a compromise of the rest.

gpg --verify SHA256SUMS.asc SHA256SUMS && sha256sum -c SHA256SUMS

Or build it. Rust 1.85 or newer; on Debian and Ubuntu the Slint crates want two development packages present.

sudo apt-get install -y libfontconfig-dev libxkbcommon-dev
cargo run --bin azzurro

bluosctl is the same protocol crate with a command line on it, and the fast way to try something against real hardware.

cargo run --bin bluosctl -- discover