Skip to content

Async-friendly WebRTC implementation in Rust

License

Apache-2.0, MIT licenses found

Licenses found

Apache-2.0
LICENSE-APACHE
MIT
LICENSE-MIT
Notifications You must be signed in to change notification settings

webrtc-rs/webrtc

Repository files navigation

WebRTC.rs

License: MIT/Apache 2.0 Discord Twitter

Async-friendly WebRTC implementation in Rust

Sponsored with 💖 by

Gold Sponsors:
Recall.ai

Silver Sponsors:
Stream Chat
ChannelTalk
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: 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 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 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:

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 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!!!

About

Async-friendly WebRTC implementation in Rust

Topics

Resources

License

Apache-2.0, MIT licenses found

Licenses found

Apache-2.0
LICENSE-APACHE
MIT
LICENSE-MIT

Stars

Watchers

Forks

Sponsor this project

  •  

Packages

No packages published

Contributors 145

Languages