Overview
WebRTC.rs is an async-friendly WebRTC implementation in Rust, originally inspired by and largely rewriting the Pion stack. The project is under active development and should be considered early stage; please refer to the Roadmap for planned milestones and releases. The Examples demonstrate how to build media and data-channel applications using webrtc-rs.
🚨 Important Notice: v0.17.x Release and Future Direction
v0.17.x is the final feature release of the Tokio-coupled async WebRTC implementation.
- v0.17.x branch: A dedicated branch will be created for v0.17.x that will receive bug fixes only (no new features).
- Master branch: Will transition to a new Sans-IO based architecture built on top of webrtc-rs/rtc.
Why this change?
The project is shifting toward a Sans-IO WebRTC implementation that decouples the protocol logic from any specific async runtime. This new architecture will:
- ✅ Support multiple async runtimes (Tokio, smol, async-std, etc.)
- ✅ Provide a clean, protocol-centric Sans-IO core via webrtc-rs/rtc
- ✅ Enable a truly runtime-agnostic, async-friendly WebRTC implementation in Rust
If you need Tokio-specific stability, please use the v0.17.x branch. If you want to adopt the new runtime-agnostic approach, follow development on the master branch.
Features
Building
All webrtc dependent crates and examples are included in this repository at the top level in a Cargo workspace.
To build all webrtc examples:
cd examples
cargo test # build all examples (maybe very slow)
#[ or just build single example (much faster)
cargo build --example play-from-disk-vpx # build play-from-disk-vpx example only
cargo build --example play-from-disk-h264 # build play-from-disk-h264 example only
#...
#]
To build webrtc crate:
cargo build [or clippy or test or fmt]
Open Source License
Dual licensing under both MIT and Apache-2.0 is the currently accepted standard by the Rust language community and has been used for both the compiler and many public libraries since ( see https://doc.rust-lang.org/1.6.0/complement-project-faq.html#why-dual-mitasl2-license). In order to match the community standards, webrtc-rs is using the dual MIT+Apache-2.0 license.
Contributing
Contributors or Pull Requests are Welcome!!!