The WebRTC Open-Source ecosystem is huge and continues to grow day after day. It covers a lot of things: Browsers, desktops, mobile devices, servers, IoT, etc…
From a single library that offers one WebRTC function like recording an audio file to a full communication platform ready to be deployed, you have quite everything you need. As a developer, it is like doing the shopping at the supermarket!
On my own, and for more than one year, I started to enumerate some great WebRTC libraries I found over time. The goal was not to make a list, but rather I was interested in discovering new things and comparing different solutions. I was often asked “what solution should I use for doing…” and most of the time the topic was new to me too :-) so this was a way to discover new libraries and open source components.
Recently, I have ordered this list of WebRTC Open-Source into a top 100 and thought that it could be interesting to share it. This is not a “Hall of Fame” nor the list of nominees for the “Oscar” but just a list of WebRTC Open source software that covers most of the worries of today.
Note: I lied a little, there are less than 100 libraries listed :-)
This Top 100 is split into several categories:
For each category, I tried to order the open-source by following the number of stars in GitHub and the growth during the past year (since August 2022).
I also tried to build my own WebRTC-Developers quadrant for each category. Remember, I’m not from Gardner 😎 nor an analyst, this is my perception today and a way of opening up discussions, getting feedback and maybe looking at other projects I might have missed. 🙈
This first part targets the existing WebRTC stacks. I already cover the stacks more in details in the article Did I choose the right WebRTC stack?.
Here are some additional details for each stack.
Stacks | Stars | Growth | Usage |
---|---|---|---|
LibWebRTC | ? | ? | C/C++ Browsers Mobile Desktop |
Pion | 11k | High | Go Server IoT |
React-Native WebRTC | 4,3k | Medium | JavaScript Mobile |
Flutter | 3,7k | Medium | Dart Mobile |
AIORTC | 3,5k | Medium | Python Server IoT |
WebRTC.rs | 3,2k | Very High | Rust Server |
Node-WebRTC (2) | 2,6k | = | Node.js Server |
LibDataChannel | 1,2k | Very High | Node.js Server |
SipSorcery | 1,1k | Very High | C# Desktop Server Unity/Xbox |
RawRTC (1) | 0,36k | Low | C/C++ Native |
Werift (3) | O,33k | Very High | Node.js Server |
Even if we can’t compare with the original LibWebRTC, there is a significant growth of other stacks that run outside of the browser and in environments less accessible for the Google’s stack.
Pion is the one who tracts most of the interest. Sean DuBois, the original author behind Pion has succeeded to build a great community and there is some exciting new use cases that emerged recently such as adding the possibility to stream live using WebRTC in OBS Add WebRTC (WHIP) output support. If I have the opportunity, this is the one I would like to use. But I need to first learn Go.
For the others, at ALE, we use SipSorcery among others for our Rainbow C# SDK. It allows our developers to build native applications for Desktop and Server with WebRTC capabilities. Such as audio/video P2P and group calls as well as hybrid calls through our WebRTC Gateway or our Rainbow Hub Cloud PBX. We have also some great projects targeting the Metaverse/VR/AR world through Unity.
For our Rainbow mobile applications as well as our mobile SDK, we use LibWebRTC. We also offer a React-Native SDK for those who want but as RT mobile applications are complicated to develop (native call integration, background mode, push, …), we prefer using a native language for our UCaaS clients and optimize them for each platform for providing the best possible experience.
(1) RawRTC is inactive (2) Node-WebRTC is inactive (3) Werift is not complete and at the same level as others.
Complete solutions are WebRTC-based collaborative and/or video platforms that offer both the server side and end-user applications. Here, IT/DevOps rather than development skills are required. Some are not based on video at all, but all use WebRTC or part of WebRTC to work.
And the details:
Media Platforms | Stars | Growth | Usage |
---|---|---|---|
Rocket.chat | 36,1k | High | JS/Node.js Collaboration and Communication/Chat OmniChannel + Video (using Jitsi/BBB/…) |
WebTorrent | 28,1k | Medium | JS/Node.js WebTorrent/Video Streaming |
Mattermost | 26,1k | High | Go(Pion)/JS Collaboration and Communication Video platform |
Jitsi Meet | 20,1k | Medium | Java/JS/Native WebRTC conference server to host + applications and SDK |
SnapDrop | 16k | Medium | JS/PWA Share files like AirDrop |
Tinode | 10,5k | Medium | Go (server) JS/Swift/Android/Python Instant messaging server |
BigBlueButton | 8k | Low | Freeswitch/Kurento Virtual Classroom Software (integrated to Moodle) |
ShareDrop | 6,7k | High | JavaScript Files sharing like AirDrop |
WebWormHole | 1,7k | Low | WebAssembly/Go Data sharing |
OpenVidu | 1,6k | Low | Kurento Video platform with ready to integrate video components |
Briefing | 1,2k | Low | Node.JS/Web based on Simple-Peer/IOS client Mesh conference server |
Galene | 0,8k | Medium | Go (Pion)/JS Easy to deploy SFU Video Server with JS client (Android in progress) |
Rocket.chat and MatterMost are the open-source communication platforms with the most of integrated features. If you need more than a video server, there are the leaders.
BBB is a great alternative for Education. In France, the government has decided to use it for our children: [French Ministry of education chooses bigbluebutton](https://bigbluebutton.org/2023/01/11/french-ministry-of-education-chooses-bigbluebutton/.
For developers who want to control the low WebRTC layers, Jitsi (Born in Alsace) is the easiest solution to deploy while being completely integrable, customizable and tunable (WebRTC).
This category targets the Open-Source libraries that offer a complete Media Server which is a server that allows several users to have real-time interactions together using at least audio, vidéo, sharing and instant messages.
Media Servers | Stars | Growth | Usage |
---|---|---|---|
SimpleRealtime Server | 22,3k | Low | C/C++ HLS/WebRTC/RTMP Publish (push) and subscribe (play) server model |
Janus | 7,3k | High | C/C++ SFU/SIP Gateway General purpose based on plugins |
MediaMTX | 7,2k | High | Go SRT/WebRTC/RTSP/RTMP Media broker |
MediaSoup | 5,4k | High | C++/Rust/Node.js SFU Client and server |
LiveKit | 5,3k | Very High | Go with Pion SFU SDK for a lot of platforms |
Pion Ion (1) | 3,8k | Medium | Go/Flutter SFU Several SDKs |
Ant-Media | 3,8k | High | Java HLS/RTMP/RTSP/WebRTC SDK for all platforms |
Kurento NEW Kurento (2) | 3k | Flat | C++ SFU/MCU media transmission, processing, recording, and playback and computer vision |
Licode | 3k | Flat | C++/Node.js MCU Streaming and recording |
Jitsi-VideoBridge | 2,7k | Low | Java/Kotlin SFU</br/>Highly scalable |
Freeswitch | 2,5k | Low | C/C++ PBX/IVR/Conferences Interconnect Phone and WebRTC |
WebRTC-Streamer | 2,3k | Medium | C++ V4L2/RTSP/WebRTC Streamer accepting multiple formats, to Web, Jitsi, Janus |
OvenMediaEngine | 2,2k | Flat | C/C++ WebRTC, SRT, RTMP, RTSP, and MPEG2-TS over HTLS Sub-Second Latency Streaming Server for large scale |
Kamailio | 1,9k | Flat | C/C++ VoIP/SIP Gateway, WebRTC Open Source SIP Server with WebRTC to interconnect with PBX |
Go2RTC | 1,8k | Medium | Go Ultimate camera streaming application with support RTSP, RTMP, HTTP-FLV, WebRTC, MSE, HLS, MP4, MJPEG, HomeKit, FFmpeg |
Asterisk | 1,6k | Low | C PBX/PSTN/VoIP/WebRTC Open Source PBX and telephony toolkit |
MiroTalk SFU | 1,4k | Medium | C++/Node.js SFU Based on MediaSoup) |
RTSPToWeb | 1,3k | Medium | Go RTSP/WebRTC converts your RTSP streams to formats consumable in a web browser |
Medooze | 1,2k | Low | C++ (+ Node.js/Go integration) MCU WebRTC Media Server |
Membrane | 1k | Low | Elixir/C++ SFU/Processing/Transcoding Advanced multimedia processing framework |
Ion-SFU | 0,86k | Medium | Go SFU Low dependencies SFU. Used by Livekit |
Broadcast-box | 0,32k | Medium | Go Broadcast server using Whip |
JellyFish | 0,05k | Low | Elixir RTSP/HLS/WebRTC Based on Membrane |
InLive Hub SFU | 0,02k | Low | Go SFU Based on Pion |
This list mixes well-established WebRTC pur server implementation, servers originated from VoIP systems, and newcomers leveraged by the Pion Stack. Others are streaming servers that have added a WebRTC compatibility.
There is a real push for the Golang language. A second reason to learn this language :-)
Finally, depending on your needs, you’re spoilt for choice.
(1) Pion Ion seems inactive since mid 2022 (2) Kurento: This git seems inactive since late 2022
A TURN server is additional equipment (needed or not) to let users behind complex networks to connect to your solution.
I already write an article and the existing TURN servers in Coturn, the fragile colossus. Here is the list again
TURN servers | Stars | Growth | Language |
---|---|---|---|
Coturn | 9,5k | Very High | C/C++ |
Pion Turn | 1,5k | Medium | Go |
Turn-RS | 0,2k | Low | Rust |
Eturnal | 0,2k | Medium | C/Erlang |
Violet | 0,1k | Medium | C |
Without any doubt, if you need a robust TURN server, Coturn is the most used and deployed server. And despite a difficult period, Coturn is now again, a strong open-source with several contributors (thib-ack from ALE is one of them :-).
If you’re looking for an alternative, a solution could be Eturnal from ProcessOne. Pion Turn is not a ‘ready-to-configure’ Turn server but rather a toolkit for building your own Turn server integrated to your solution.
A signaling server is a server that exchanges all the messages needed to have a P2P or a conference call between two or more participants. It includes the messages needed to negotiate the call, to manage the call and finally to end the call. Often, WebRTC signaling messages are mixed with pur features messages within this server.
Difficult to define a quadrant here as major players use their own signaling methods and protocols.
Signaling servers | Stars | Growth | Usage |
---|---|---|---|
ActivityPub-Mastodon | 43,4k | Very High | Ruby/Node.js Social network server |
Matrix-Synapse | 11,2k | Low | Python Open protocol for decentralised, secure communications |
Simple-Peer (1) | 6,9k | Medium | Node.js/JS P2P and Mesh |
Ejabberd/Jingle (3) | 5,6k | Medium | Erlang/OTP Robust, Ubiquitous and Massively Scalable Messaging Platform (XMPP, MQTT, SIP Server) |
Matrix-Dendrite | 4,8k | Low | Go Open protocol for decentralised, secure communications Matrix second generation |
PeerJS | 3,9k | Low | Node.js/JS P2P signaling server |
OpenFire/XMPP | 2,7k | Low | Java Real time collaboration (RTC) server |
SIP.js | 1,7k | Low | SIP, JS WebRTC/SIP signaling library |
OpenEasyRTC | 0,31k | Flat | Node.js Rooms, Chat |
Protoo-Client (2) | 0,2k | Low | Node.js Minimalist and extensible Node.js signaling framework |
There are not a lot of dedicated signaling servers even if it is outside the scope of the WebRTC standardization. This is because Media servers often come with their own signaling protocol or mechanism.
Only survive some actors that emerged at the beginning of WebRTC where developers had nothing to start with, such as SIP.js, Simple-Peer, PeerJS and OpenEasyRTC…
At the opposite, existing “standardized” protocols such as XMPP with Jingle or new ones such as Matrix are alternative to dissociating Media servers and signalisation.
And, to try to federate all, decentralized servers based on ActivityPub could be a new way to handle the signaling part.
(1) Simple-Peer seems inactive since Feb, 2022 (2) Protoo seems inactive since Jan, 2021 (3) At least with XEP-0166 Jingle
Here are the other interesting libraries I found for some use cases I had.
No quadrant here. Just some cool libraries!
Libraries | Stars | Growth | Usage |
---|---|---|---|
WebRTC Samples | 13,1k | High | JS Samples demonstrating WebRTC JS API |
RecordRTC (1) | 6k | Medium | JS P2P recording |
adapter.js | 3,5k | Low | JS WebRTC Shime library |
WebTTY | 2,6k | Low | Go Share a terminal session |
GStreamer/webrtcsink/webrtcbin | 1,8k | Low | C pipeline-based multimedia framework |
aioquic | 1,3k | Medium | Quic/Python Quic and HTTP/3 protocol library |
WebRTC Camera | 1k | High | Home Assistant Home Assistant custom component for viewing almost any camera stream in real time using WebRTC |
WebRTC-CLI | 0,2k | Low | Go WebRTC command-line peer. |
PeerMetrics | 0,05k | Low | JS Collect stats for peer connections |
WebRTC Issue Detector | 0,04k | Low | JS Diagnostic tool and troubleshooter for WebRTC |
WebRTCMetrics | 0,02k | Low | JS Aggregate stats received from the WebRTC stack |
Stats Gatherer | 0,02k | Low | JS Collecting stats for webrtc connections |
I was mostly focused on Web libraries due to my development, but WebRTC is used in many ways here.
(1) RecordRTC seems inactive since Apr, 2022
As seen, if you need to add real-time interactions and video based into your product, the WebRTC open-source ecosystem and community are huge and should answer to your need.
But as with other recent technologies, it has taken some time for them to reach maturity, so there are a large number of promising old projects, much used but now abandoned for other, more popular ones. The problem is that some production solutions still use them today and need to find developers to rework/migrate the codebase to an open-source supported.
On my own, I will regularly update my list of these WebRTC open-source components for a future Top 100 in 2024.