https://github.com/webrtc-rs/webrtc
Async-friendly WebRTC implementation in Rust
https://github.com/webrtc-rs/webrtc
async rtc rust webrtc
Last synced: 4 months ago
JSON representation
Async-friendly WebRTC implementation in Rust
- Host: GitHub
- URL: https://github.com/webrtc-rs/webrtc
- Owner: webrtc-rs
- License: apache-2.0
- Created: 2019-08-15T06:18:40.000Z (almost 7 years ago)
- Default Branch: master
- Last Pushed: 2026-02-01T03:50:58.000Z (5 months ago)
- Last Synced: 2026-02-01T09:48:15.816Z (5 months ago)
- Topics: async, rtc, rust, webrtc
- Language: Rust
- Homepage: https://webrtc.rs
- Size: 13.5 MB
- Stars: 4,911
- Watchers: 75
- Forks: 462
- Open Issues: 2
-
Metadata Files:
- Readme: README.md
- Funding: .github/FUNDING.yml
- License: LICENSE-APACHE
Awesome Lists containing this project
- awesome-rust-list - WebRTC.rs - rs/webrtc?style=social"/> : A pure Rust implementation of WebRTC. [webrtc.rs](https://webrtc.rs/) (Image and Video Processing)
- awesome-webrtc - WebRTC.rs - Pure Rust implementation of WebRTC stack, which rewrites Pion stack in Rust. (Miscellaneous / Tool)
README
Async-friendly WebRTC implementation in Rust
Sponsored with 💖 by
Silver Sponsors:
Bronze Sponsors:
AdrianEddy
## Overview
WebRTC.rs is an async-friendly WebRTC implementation in Rust, originally inspired by and largely rewriting the Pion
stack. The project is currently evolving into a clean, ergonomic, runtime-agnostic implementation that works with any async runtime (Tokio, async-std, smol, embassy).
**Architecture:**
- **[rtc](https://github.com/webrtc-rs/rtc)**: Sans-I/O protocol core with complete WebRTC stack (95%+ W3C API compliance)
- **webrtc** (this crate): Async-friendly API with runtime abstraction layer
**📖 Learn more:** Read our [architecture blog post](https://webrtc.rs/blog/2026/01/31/async-friendly-webrtc-architecture.html) for design details and roadmap.
### 🚨 Important Notice: v0.17.x Feature Freeze & v0.20.0+ Development
**v0.17.x is the final feature release of the Tokio-coupled async WebRTC implementation.**
#### Current Status (February 2026)
- **v0.17.x branch**: Receives **bug fixes only** (no new features). Use this for Tokio-based production applications.
- **Master branch**: Under active development for **v0.20.0** with new Sans-I/O architecture and runtime abstraction.
#### **What's Changing in upcoming v0.20.0+?**
The new architecture will address critical issues in v0.17.x:
- ❌ Callback hell and Arc explosion
- ❌ Resources leak in callback
- ❌ Tight Tokio coupling (cannot use async-std, smol, embassy)
**v0.20.0+ will provide:**
✅ **Runtime Independence**
- Support for Tokio, async-std, smol, embassy via Quinn-style runtime abstraction
- Feature flags: `runtime-tokio` (default), `runtime-async-std`, `runtime-smol`, `runtime-embassy`
✅ **Clean Event Handling**
- Trait-based event handlers with native `async fn in trait`
- No more callback Arc cloning or `Box::new(move |...| Box::pin(async move { ... }))`
- Centralized state management with `&mut self`
✅ **Sans-I/O Foundation**
- Protocol logic completely separate from I/O (via [rtc](https://github.com/webrtc-rs/rtc) crate)
- Deterministic testing without real network I/O
- Zero-cost abstractions
#### **How to Provide Feedback**
We're actively designing v0.20.0+ and welcome your input:
- Review the [architecture blog post](https://webrtc.rs/blog/2026/01/31/async-friendly-webrtc-architecture.html)
- Join discussions on [GitHub Issues](https://github.com/webrtc-rs/webrtc/issues)
- Chat with us on [Discord](https://discord.gg/4Ju8UHdXMs)
**For production use:** Stick with v0.17.x branch until v0.20.0+ is stable.
**For early adopters:** Follow master branch development and provide feedback!
## 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 ). 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!!!