🌐 Website · 📝 Blog · 📞 P2P Demo · 🎥 SFU Demo · 🎙 Discord
We build the full WebRTC network/protocol ecosystem in Rust — from low-level RTC protocols up to a browser-ready SFU, signaling server, and streaming ingest/egress. Everything is dual-licensed MIT / Apache-2.0.
Our cores are Sans-I/O: pure state machines with no sockets, no threads, and no clock of their own. The caller owns all I/O. That buys deterministic tests without a network, an async layer that isn't welded to one runtime, and — as it turns out — a media server built from the very same trait.
- sansio — the small
sansio::Protocoltrait everything else is written against. - rtc — the Sans-I/O WebRTC core: ICE · STUN · TURN · mDNS · DTLS · SCTP · DataChannel · SRTP · RTP/RTCP · SDP.
- webrtc — the async, runtime-agnostic
PeerConnectionAPI on top ofrtc. - sfu — a Selective Forwarding Unit media server for group calls on top of
rtc, live at sfu.rs. - apprtc — signaling server and reference web app; P2P is live at appr.tc, and SFU signaling is next. 🚧
- whip — WebRTC-HTTP Ingestion Protocol, for pushing streams into the stack. 🚧
- whep — WebRTC-HTTP Egress Protocol, for pulling streams out of it. 🚧
🚧 = in progress. Everything else is published on crates.io:
WebRTC
AppRTC
SFU
RTC
Media
Interceptor
DataChannel
RTP
RTCP
SRTP
SCTP
DTLS
mDNS
STUN
TURN
ICE
SDP
Shared
SansIO
Contributors and pull requests are always welcome, and there is plenty that is well-scoped and open — simulcast, publish/subscribe, and congestion control in sfu, the WHIP/WHEP crates, plus interop and performance work everywhere. Sans-I/O means you can usually test your change without a network. Come say hi on Discord.
Built with 💖 and supported by our sponsors:
github.com/sponsors/webrtc-rs
·
opencollective.com/webrtc-rs
·
patreon.com/WebRTCrs
