Skip to content

Sonos SDK

Control Sonos speakers with a clean, synchronous Rust API. No async required.
use sonos_sdk::prelude::*;
fn main() -> Result<(), SdkError> {
let sonos = SonosSystem::new()?;
let speaker = sonos.speaker("Kitchen").unwrap();
speaker.play()?;
let vol = speaker.volume.fetch()?;
println!("Playing at {}%", vol);
Ok(())
}

Sync-first

All methods are synchronous. No async runtime, no .await, no executor setup. Just call and go.

Three access patterns

get() for cached values, fetch() for live network reads, watch() for reactive event streams.

DOM-like API

Access properties directly on speaker objects. Navigate fluently between speakers and groups.

Zero-config events

Event infrastructure initializes lazily on first watch() call. Automatic firewall fallback to polling.