// the find
webrtc-rs/webrtc
Async-friendly WebRTC implementation in Rust
A Rust WebRTC implementation ported from Pion (Go). Currently at an awkward transition point: v0.17.x is frozen for bug fixes only, and the architecture is being overhauled for v0.20.0 with a Sans-I/O core and runtime-agnostic async layer. Target audience is Rust developers who need peer-to-peer data channels or media streaming without depending on a C library like libwebrtc.
The move to a Sans-I/O core (the separate 'rtc' crate) is the right call — protocol logic decoupled from I/O means deterministic testing and no fake network in unit tests. Runtime abstraction via feature flags (tokio/async-std/smol/embassy) is something most async Rust crates still don't bother with. The example coverage is genuinely broad: data channels, simulcast, RTP forwarding, insertable streams, disk I/O — not just hello-world. 95%+ claimed W3C API compliance with interop tests against both its own rtc crate and a separate webrtc implementation gives some confidence the protocol layer isn't guessing.
You shouldn't ship this in production right now — v0.17.x is in maintenance and v0.20.0 is still in design with no release date. The old callback API was bad enough that the README dedicates a section to listing its failures (Arc explosion, resource leaks, callback hell), which means anyone on v0.17.x is already living with those. The project is a port from Go (Pion), not a ground-up design, so some of the structural debt is inherited. Documentation beyond examples is thin — there's no guide for common real-world setups like TURN configuration, simulcast with dynamic layers, or connection recovery.