finds.dev← search

// the find

meetecho/janus-gateway

★ 9,111 · C · GPL-3.0 · updated Jun 2026

Janus WebRTC Server

Janus is a general-purpose WebRTC server written in C, maintained by Meetecho — the same team that co-authored the WebRTC spec. It handles the signaling and media plane (ICE, DTLS-SRTP, RTP/RTCP) and exposes functionality through a plugin system, so you build your video room, SIP gateway, or streaming endpoint as a plugin rather than forking the core. Target audience is teams who need a self-hosted, protocol-level WebRTC server with full control over media routing.

- Plugin architecture is genuinely well-thought-out: VideoRoom, AudioBridge, SIP, Streaming, and scripting plugins (Lua/Duktape) ship in-tree, so you have working reference implementations before writing a line of custom code.

- Security hygiene is above average for a C project — OSS-Fuzz integration with a corpus of crash inputs checked in, Coverity scan badge, and SECURITY.md all present. The fuzzers cover RTP, RTCP, and SDP parsers specifically, which are the attack surface that bites WebRTC servers.

- Transport layer is genuinely flexible: REST, WebSockets, RabbitMQ, MQTT, and Nanomsg are all first-class, each independently optional at compile time. You're not forced into a specific message bus.

- Active maintenance from the original authors — last push June 2026 on a repo that's been going since ~2014. The multistream branch (current main) completed a non-trivial protocol migration without abandoning the 0.x line.

- The dependency list is brutal: libnice (must compile from source because distro packages are broken), libsrtp2, usrsctp, libwebsockets — each with their own version gotchas and manual build steps. Getting a clean first build on a fresh Linux box takes most of a day.

- No Windows support at all, and WSL is explicitly the only workaround. If any part of your team runs Windows dev environments, this is a constant friction point.

- The JavaScript client library (janus.js) is a single 3000-line file with globals and a callback-heavy API that hasn't kept pace with modern browser JS patterns. You'll end up wrapping it or replacing it.

- Scaling beyond a single node requires you to build your own solution — there's no built-in clustering or federation. The VideoRoom plugin supports RTP forwarding between instances, but orchestrating it is entirely your problem.

View on GitHub → Homepage ↗

// want more like this?

We dig through GitHub every week and send a few repos picked for what you actually care about — each with an honest take like this one.

Get finds in your inbox → Search again →