| Crates.io | rice-proto |
| lib.rs | rice-proto |
| version | 0.1.1 |
| created_at | 2025-08-14 05:29:04.336923+00 |
| updated_at | 2025-08-14 13:23:40.740083+00 |
| description | ICE (RFC8445) implementation protocol |
| homepage | |
| repository | https://github.com/ystreet/librice |
| max_upload_size | |
| id | 1794459 |
| size | 519,415 |
Repository containing an (sans-IO) implementation of ICE (RFC8445) protocol written in the Rust programming language.
The current status is that there is enough of the implementation to sucessfully communicate with STUN/TURN servers and/or a browser (Chrome or Firefox) in a WebRTC scenario. The STUN implementation is relatively mature. More work is needed on the ICE layer for efficiency and API experience. Initial TURN support has been implemented and some TURN-related RFCs are currently in progress. Supporting more scenarios is part of the near and long term future roadmap.
A few reasons: reusability, testability, and composability.
Without being bogged down in the details of how IO happens, the same sans-IO implementation can be used without prescribing the IO pattern that an application must follow. Instead, the application (or parent library) has much more freedom in how bytes are transferred between peers. It is possible to use a sans-IO library in either a synchronous environment or within an asynchronous runtime.
A sans-IO design also allows easy testing of any specific state the sans-IO implementation might find itself in. Combined with a comprehensive test-suite, this provides assurance that the implementation behaves as expected under all circumstances.
For other examples of sans-IO implementations, take a look at:
In order to build a C API, we use cargo-c to build and install to a relevant installation prefix.
Once cargo-c has been installed with:
cargo install cargo-c
Installation can be performed using:
cargo cinstall --prefix $PREFIX
And be used e.g. by rice-c for exposing a rust API of the C ABI.