heos

Crates.ioheos
lib.rsheos
version0.3.0
created_at2025-10-10 20:30:51.001857+00
updated_at2025-12-21 23:57:36.582088+00
descriptionRust bindings for HEOS ecosystem API
homepage
repositoryhttps://github.com/debroejm/heos-rs
max_upload_size
id1877545
size392,159
James De Broeck (debroejm)

documentation

README

HEOS-rs

License Crates.io Docs

These bindings are based on the published HEOS control protocol specifications found on Denon's website.

At the time of writing, the latest version is 1.17, found here: https://rn.dmglobal.com/usmodel/HEOS_CLI_ProtocolSpecification-Version-1.17.pdf

If that links gets stale and no longer works, a newer version may be able to be found here: https://support.denon.com/app/answers/detail/a_id/6953/~/heos-control-protocol-%28cli%29

Getting Started

use heos::{ConnectError, HeosConnection};
use std::time::Duration;

#[tokio::main]
async fn main() -> Result<(), ConnectError> {
    let connection = HeosConnection::connect_any(Duration::from_secs(10)).await?
        .init_stateful().await?;
    
    for playable in connection.playables().await {
        // Do something
    }
    
    Ok(())
}

Async Compatibility

This library uses Tokio under the hood in order to spawn asynchronous tasks, as well as manage IO via e.g. TCP sockets. All async methods and functions need to be called from within a Tokio runtime. If you are using smol/async-std, you can use async-compat in order to wrap your futures with a layer that provides a Tokio runtime.

Roadmap

  • Attempt to add support for WASM
  • Improve the HEOS Control app
Commit count: 0

cargo fmt