Key Concepts¶
This page explains the core concepts you'll encounter when using, deploying, or contributing to La Suite Meet.
Room¶
A room is a virtual meeting space. Each room has:
- A unique slug/ID used in the URL (e.g.,
meet.example.com/my-room-name) - An owner (the user who created it) with full control
- Access settings: open, authenticated-only, or invite-only
- A configuration that can include recording options, participant limits, and feature flags
Rooms are non-persistent by default — chat history and ephemeral state are not stored between sessions.
Participant¶
A participant is anyone connected to a room. Participants have:
- A role: owner, moderator, or attendee
- Media tracks: camera video, microphone audio, and optionally screen share tracks
- Metadata: display name, avatar, and connection state
LiveKit¶
LiveKit is the open-source WebRTC infrastructure that powers Meet's real-time media. It is a Selective Forwarding Unit (SFU) — unlike an MCU (Multipoint Control Unit), an SFU does not transcode media. It receives streams from senders and selectively forwards them to receivers, which is dramatically more scalable and CPU-efficient.
Meet uses LiveKit for: - All audio and video streaming - Screen sharing - In-meeting chat (via LiveKit Data Channels) - Recording (via LiveKit Egress) - Transcription (via LiveKit Agents)
SFU vs MCU¶
| SFU (LiveKit) | MCU (legacy) | |
|---|---|---|
| How it works | Forwards streams | Mixes streams server-side |
| CPU usage | Low | High |
| Scalability | High (100+ participants) | Limited |
| Client bandwidth | Each client receives N streams | Each client receives 1 mixed stream |
| Video quality | Full quality per stream | Degraded by mixing |
Token / JWT¶
LiveKit uses JSON Web Tokens (JWTs) for authentication. When a user joins a meeting:
- The Django backend generates a short-lived JWT signed with the LiveKit API secret
- This token encodes the user's identity, room name, and permissions
- The client presents this token when connecting to LiveKit
- LiveKit validates the token and grants access
Tokens are issued by the Django backend — the LiveKit server itself never needs to know about users or OIDC.
OIDC / SSO¶
Meet uses OpenID Connect (OIDC) for user authentication. Any standards-compliant OIDC provider works:
- Keycloak (bundled in the development stack)
- ProConnect (used by French government instances)
- Authentik, Dex, Auth0, Okta, Google, etc.
OIDC handles who the user is. LiveKit tokens handle what the user can do in a room.
Egress¶
LiveKit Egress is a LiveKit component that processes room output. Meet uses it for:
- Room composite recording: Records the entire room view as a video file
- Track recording: Records individual participant tracks
Egress saves output to object storage (Garage/S3). It requires: - Access to the LiveKit server - Access to Redis (shared with LiveKit) - Access to S3-compatible storage
Celery¶
Celery is a distributed task queue used in two places:
- Django backend Celery worker: Handles async tasks like sending recording notification emails
- Summary service Celery workers: Two separate workers for transcription (
transcribe-queue) and summarization (summarize-queue)
Both use Redis as the message broker.
Garage / S3¶
Meet stores binary files — recordings, uploaded files — in S3-compatible object storage. For self-hosted deployments, Garage is recommended. In production, you can also use Garage, AWS S3, Scaleway Object Storage, OVH Object Storage, or any S3-compatible service.
The Django backend uses a webhook from S3-compatible storage to detect when a recording file has been uploaded, which triggers the recording state to update in the database.
Simulcast¶
Simulcast is a WebRTC technique where a participant's browser encodes and sends the same video stream at multiple quality levels simultaneously (e.g., 1080p, 360p, 180p). LiveKit then forwards only the appropriate quality level to each receiver based on their available bandwidth. This dramatically improves quality in meetings with participants on varying network conditions.
Room configuration¶
Rooms can have a configuration object controlling:
- Whether recording is allowed
- Whether transcription is allowed
- Participant limits
- Feature flags for specific capabilities
This configuration is set by the room owner and enforced by both the backend and the frontend.