Skip to content

Getting started

Self-hosting

One binary, no external dependencies to start. Run it with Docker for a quick deploy, or build from source when you need to vendor it.

To run the imageTo build from source
Docker or any OCI runtimeRust 1.79+
No external services requiredNo CGO boundary — pure Rust in the media path
docker run -p 3000:3000 \
  ghcr.io/lumyx-dev/sfu-core:latest

# signaling  ws://127.0.0.1:3000/ws
# dashboard  http://127.0.0.1:3000

Scale it out when you actually need to — a single process handles a room until concurrent peers or egress say otherwise.

cargo add lumyx-sfu

# or run the workspace binary
cargo run -p lumyx-sfu --release

Rust 1.79+. The media path has no GC and no CGO boundary, so a release build behaves the same on your hardware as it does in the published image.

Thresholds, alert destinations and remediation live in lumyx.toml next to the binary. Nothing in it is required to start — every metric below already has a sane default.

# Thresholds are yours. These are the defaults.

[alerts.packet_loss]
above = 0.02
sustained_for = "30s"
severity = "breached"
notify = ["slack:#oncall", "pagerduty"]

[remediation]
auto_audio_only = true

Full field reference: Metrics reference.

TLS termination

Put a reverse proxy in front for wss:// and https:// — the binary speaks plain ws/http.

Persistent storage

In-memory retention only survives the process. Add Postgres or object storage to keep history past that.

Prometheus scrape

Point your existing Prometheus at :3000/metrics — see the Prometheus endpoint reference.

Alert destinations

Wire Slack, PagerDuty or a webhook before traffic arrives, not after the first threshold breach.