Help & Tutorials
Everything you need to know about LiveKit and this dashboard.
Quick Start
Get up and running in 5 steps.
Check the Dashboard
The main dashboard shows you an overview of your LiveKit server: active rooms, participants, and ingress streams. If the sidebar shows "LiveKit: Online", you're connected.
Create a Room
Go to Rooms and click "Create Room". Give it a name (e.g., "my-room"). Rooms are where participants meet — they're created on-demand and disappear when empty.
Generate a Token
Go to Tokens, enter your room name and a participant identity (e.g., "user-01"), then click Generate. This JWT token is what clients use to connect.
Test with LiveKit Meet
After generating a token, click "Open in LiveKit Meet" to join the room in your browser. You'll see your camera and can test audio/video in real time.
Set Up Ingress (Optional)
Ingress lets you bring in external streams (RTMP from OBS, WHIP from browsers). Go to Ingress to create an ingress endpoint and start streaming into a room.
Pro tip: You can test everything without any external clients. Generate a token and use the "Open in LiveKit Meet" link — it works right in your browser.
Key Concepts
Understand the building blocks of LiveKit.
A virtual space where participants meet. Rooms are created on-demand and automatically close when the last participant leaves (unless configured to stay open). Each room has a unique name.
Anyone connected to a room. Each participant has an identity (like a username) and can publish/subscribe to audio, video, and data tracks.
A JWT (JSON Web Token) that authenticates a participant. Contains the room name, identity, and permissions (can publish, can subscribe). Tokens expire after a set time (TTL).
A stream of media — audio from a microphone, video from a camera, or a screen share. Participants publish tracks and subscribe to tracks from others.
A way to bring external media into a LiveKit room. Supports RTMP (from OBS, streaming software) and WHIP (browser-based). The ingress converts the stream into LiveKit tracks.
The opposite of ingress — exports media out of LiveKit. Can record rooms to files, stream to platforms like YouTube/Twitch, or capture individual tracks.
Step-by-Step Guides
Detailed walkthroughs for common tasks.
The fastest way to verify your LiveKit setup is working.
- Go to Rooms and create a room called
test-room - Go to Tokens and generate a token for
test-roomwith identityuser-1 - Click "Open in LiveKit Meet" — allow camera/mic access
- Open a second browser tab, generate another token with identity
user-2 - Open that token in LiveKit Meet too — you should see both participants
- Check the Rooms page — the room should show 2 participants
Tip: Use an incognito window for the second participant to avoid session conflicts.
Send your OBS output into a LiveKit room.
- Go to Ingress and click "Create Ingress"
- Choose RTMP as the input type
- Enter a name, room name, and participant identity for the stream
- Copy the RTMP URL and Stream Key from the created ingress
- In OBS: Settings → Stream → Service: Custom
- Paste the RTMP URL as Server and Stream Key as Stream Key
- Click "Start Streaming" in OBS
- Your OBS output now appears as a participant in the LiveKit room
Tip: RTMP ingress runs on port 1935. Make sure this port is open in your firewall.
How to integrate LiveKit tokens into your own app.
The Token Generator on this dashboard is great for testing, but in production your app server should generate tokens. Here's the pattern:
- Install the LiveKit Server SDK for your language (Node.js, Python, Go, Ruby, etc.)
- Use your API Key and API Secret to create an
AccessToken - Set the participant identity, room name, and permissions
- Sign the token and return it to your client
- The client uses this token to connect via the LiveKit Client SDK
Never expose your API Secret to the client. Token generation must happen server-side.
What you see when you click on a room.
- Room name: The unique identifier for the room
- Participants: List of everyone currently in the room with their identity
- Duration: How long the room has been active
- Created: When the room was first created
- Metadata: Any custom data attached to the room (JSON format)
Rooms auto-delete when empty (unless configured otherwise). The participant list updates in real-time.
Feature Guide
What every section of the dashboard can do.
- Active rooms count — See how many rooms currently have participants
- Participant count — Total participants across all rooms
- Ingress status — Number of active and configured ingress streams
- Quick actions — Shortcuts to create rooms and generate tokens
- Server health — Real-time LiveKit connection status in the sidebar
- List all rooms — See every room on the server with participant counts
- Create rooms — Create rooms with custom names, max participants, and metadata
- Room details — Click a room to see participants, tracks, and connection info
- Delete rooms — Remove rooms and disconnect all participants
- RTMP ingress — Create RTMP endpoints for OBS and streaming software
- WHIP ingress — Create WHIP endpoints for browser-based streaming
- Stream URLs — Get the RTMP/WHIP URL and stream key for each ingress
- Delete ingress — Remove ingress endpoints when no longer needed
- Custom identity — Set the participant name/identity embedded in the token
- TTL options — Choose token lifetime from 1 hour to 30 days
- Permission control — Toggle publish, subscribe, and data publishing permissions
- Token inspection — View the decoded JWT payload to verify contents
- LiveKit Meet link — One-click link to test your token in a real video call
- SSO via Authentik — Dashboard is protected by Authentik forward auth (auth.spacemusic.tv)
- Group-based access — Access controlled via spacemusic-admins, spacemusic-studio, and spacemusic-viewers groups
- API key/secret — All LiveKit API calls use your server's API key and secret
- TLS encryption — All traffic is encrypted via HTTPS (Let's Encrypt certificates)
Frequently Asked Questions
20 answers to common questions.
LiveKit is an open-source platform for real-time audio, video, and data communication. Think of it like Zoom or Google Meet, but you host it yourself and can build custom apps on top of it. It handles all the complex WebRTC networking so you can focus on your application.
This dashboard is a management interface for your LiveKit server. It lets you see active rooms, create/delete rooms, manage ingress streams (for bringing in RTMP/WHIP feeds), generate access tokens, and monitor your server's health — all from a web browser.
Generate a token on the Tokens page with your room name and identity. Then use that token in a LiveKit client (web SDK, React component, mobile SDK, or the "Open in LiveKit Meet" button). The token authenticates you and tells LiveKit which room to join.
A Room is the virtual space where people meet. A Token is the "key" that lets someone enter that room. You create a room first, then generate tokens for each participant who needs to join. One room can have many tokens (one per participant).
By default, rooms are automatically cleaned up when the last participant disconnects. If you want a room to persist, you can set "Empty Timeout" to 0 when creating it, but this is rarely needed since rooms are lightweight and can be recreated instantly.
Ingress is how you bring external media streams into a LiveKit room. For example, you can stream from OBS (using RTMP) or from a browser (using WHIP) into a LiveKit room, where other participants can watch it. This is great for live events, presentations, or broadcasting.
Create an RTMP ingress on the Ingress page. You'll get an RTMP URL and a stream key. In OBS, go to Settings → Stream → Custom, paste the RTMP URL as the server and the stream key. Hit "Start Streaming" and your OBS output will appear in the LiveKit room.
WHIP (WebRTC-HTTP Ingestion Protocol) is a standard for sending media to a server using WebRTC. Unlike RTMP which requires special software, WHIP can work directly from a web browser. It's lower latency than RTMP and is the modern way to ingest streams.
Egress is the opposite of Ingress — it exports media out of LiveKit. You can use it to record a room to a file, stream a room to YouTube/Twitch, or capture individual participant tracks. Egress is configured on the server side and isn't yet managed from this dashboard.
"Can Publish" lets the participant send audio/video/screen. "Can Subscribe" lets them receive others' streams. "Can Publish Data" lets them send arbitrary data messages (like chat). A viewer might only need Subscribe; a presenter needs Publish + Subscribe.
TTL (Time to Live) is how long a token stays valid. After expiry, the participant is disconnected and needs a new token. Short TTLs (1-6 hours) are more secure for live sessions. Longer TTLs (7-30 days) are convenient for testing or persistent connections.
LiveKit Meet (meet.livekit.io) is a free web app by LiveKit for testing video calls. When you generate a token, the "Open in LiveKit Meet" button creates a link with your server URL and token pre-filled, so you can instantly join the room and test audio/video.
The dashboard checks your LiveKit server every 30 seconds. If it shows Offline, it means the dashboard can't reach LiveKit. Common causes: LiveKit containers aren't running, the LIVEKIT_URL environment variable is wrong, or there's a network issue between the dashboard container and the host.
The dashboard runs in a Docker container, while LiveKit runs on the host machine (network_mode: host). "localhost" inside a container refers to the container itself, not the host. The Docker bridge gateway IP (172.21.0.1) is how containers reach the host — that's why LIVEKIT_URL uses this IP instead of localhost.
LiveKit uses several ports: 7880 (HTTP API + WebSocket signaling), 7881 (WebRTC TCP), 3478/UDP (TURN), 5349 (TURN TLS), 1935 (RTMP ingress), 8080 (WHIP ingress), and 50000-60000/UDP (WebRTC media). The dashboard only needs access to port 7880.
Access is managed through Authentik at auth.spacemusic.tv. Add users to the appropriate group (spacemusic-admins, spacemusic-studio, or spacemusic-viewers) to grant access. The Stream application in Authentik controls who can reach this dashboard.
Yes, the dashboard supports multiple simultaneous sessions. Everyone logs in with the same password and gets their own session cookie. Actions by one user (creating rooms, deleting ingresses) are visible to others after refreshing.
WebRTC (Web Real-Time Communication) is the browser technology behind video calls. It handles peer-to-peer audio/video/data connections with encryption. LiveKit uses WebRTC under the hood but adds a server (SFU) in the middle to handle many participants efficiently.
SFU (Selective Forwarding Unit) is a server that sits in the middle of a video call. Instead of everyone sending their video to everyone else (mesh), participants send to the SFU, which selectively forwards streams to others. This is much more efficient for calls with many participants. LiveKit is an SFU.
The official LiveKit documentation is at docs.livekit.io. The GitHub organization is github.com/livekit. For client SDKs, check out livekit/client-sdk-js (web), livekit/client-sdk-swift (iOS), and livekit/client-sdk-android.
About
SpaceMusic LiveKit Dashboard
A management interface for our self-hosted LiveKit server, built with SvelteKit and deployed via /dev/push.
Jan Henrik Hansen
Idea & Direction
Armin Seltz
Design & Execution
Claude Opus 4.6
Code