Skip to content

Roadmap

Beep runs on stock upstream Galene, end to end, verified against a production container image and Postgres. What follows is what isn't done.

Where things stand

Area State
Meeting flow (join, media, chat, kick) Works. make e2e-all — 3 specs
Contract portability Proven. make e2e-alt — the ~220-line alt-backend passes the guest specs
Presence Works. Operator /ws connection; join and leave times persisted
Admin surface Works. Server-rendered UI, audit rows, kick, force-end
Deploy kit Works. compose.prod.yml + Caddy; SFU image builds pinned upstream
Recording Not wired up. See below
Plugins Scaffolded (Pluggy); no reference plugin
Metrics Nothing

1. Recording

The largest genuine gap. Galene can record to disk, and the operator connection can issue groupaction/record — but upstream emits no signal when the diskwriter finishes, so the backend can't learn that a recording is ready without polling the recordings directory.

Needed: start/stop through the operator, a completion strategy, storage (the recordings table and Artifact model already exist), and a retention policy.

2. Multi-room scale

The backend holds one WebSocket per active room. Fine at meeting scale, unmeasured beyond it. Measure at ~100 concurrent rooms before promising anything; the cheap mitigation is to hold a connection only for rooms that actually need presence or moderation.

3. Per-room configuration

Every room under the meetings/ parent inherits the same description — same max-clients, same recording policy. Per-user permissions still vary, because they come from the token. If per-room settings become a requirement, that means writableGroups plus upstream's /galene-api/v0/ CRUD surface — or reviving the descriptionStore patch, which is the one scenario where that work would earn its place.

4. Metrics

Nothing today. Upstream's .stats is coarse and explicitly unstable, so anything real would be instrumented in the backend: meetings started, participant-minutes, operator socket health (already surfaced on /admin/status), chat throughput.

5. Plugins

Pluggy hookspecs exist and the dispatcher fires them on participant_joined / participant_left. No reference plugin ships, so the extension story is unproven end to end. A transcription or attendance-export plugin would be the honest test.

6. Upstream contribution

An 11-test patch against upstream Galene is prepared and green — stats/ and limit/ had no tests at all. See notes/v3/patches/upstream-0001-tests.patch. Beyond that, the LiveKit BUNDLE finding in notes/v3/report-m3.md is worth sending regardless of whether any code is.

Not planned

  • Forking Galene. Settled; see notes/v3/upstream-gap-check.md.
  • LiveKit client-SDK compatibility. Architecturally blocked at the WebRTC transport layer — one peer connection per stream (Galene) versus one bundled subscriber PC (LiveKit), which RFC 8843 BUNDLE won't let you bridge. Would require a Galene core refactor.