Skip to content

Getting started

Introduction

Lumyx is a WebRTC SFU with observability built into the media path — one binary carries signaling, forwarding and the dashboard, and the collector reads the six metrics below off RTCP as packets pass through.

Lumyx is a selective forwarding unit (SFU) for real-time video and audio: it terminates ICE, DTLS and SRTP from every peer in a room and forwards each publisher’s tracks to the subscribers who need them, without transcoding. Clients drive it over a WebSocket with Lumyx’s own JSON signaling protocol, specified in the repository README.

What sets it apart is the second job it does on the same packets: a metrics collector sits in the media path itself, so packet loss, RTT, jitter, NACK ratio, freeze ratio and bitrate are measured directly rather than sampled from a separate exporter. Every peer gets default thresholds and alerting from the moment it connects.

Signaling, forwarding, the metrics collector and the dashboard all run inside one Rust binary — no Redis, no separate signaling service, no sidecar to scrape. It starts with no config file and no external store; you add a Postgres or object storage backend only when you need retention past the in-memory window.

peer ──ICE/DTLS/SRTP──▶ lumyx (signaling · forwarding · collector · dashboard)
                                │
                                ├─▶ RTCP read in the media path → 6 metrics
                                ├─▶ thresholds + 30s debounce → alerts
                                └─▶ /metrics (Prometheus) · dashboard :3000

Nothing is held back from the MIT repo: the SFU, all six metrics, default thresholds and the dashboard are all there.

github.com/lumyx-dev/sfu-core ↗