| Crates.io | heos |
| lib.rs | heos |
| version | 0.3.0 |
| created_at | 2025-10-10 20:30:51.001857+00 |
| updated_at | 2025-12-21 23:57:36.582088+00 |
| description | Rust bindings for HEOS ecosystem API |
| homepage | |
| repository | https://github.com/debroejm/heos-rs |
| max_upload_size | |
| id | 1877545 |
| size | 392,159 |
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
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(())
}
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.