The fastest way to get olcRTC running is through the bundledDocumentation Index
Fetch the complete documentation index at: https://mintlify.com/openlibrecommunity/olcrtc/llms.txt
Use this file to discover all available pages before exploring further.
srv.sh and cnc.sh scripts. Everything runs inside a Podman container — the scripts clone the source, build the binary inside a container, generate a config, and launch the process. No manual Go installation or build toolchain is required on the host. All you need upfront is git and curl; Podman is installed automatically if it is missing.
olcRTC is in Beta. Always verify that the video call service you choose is accessible in your network before relying on it.
Prerequisites
git
curl
Podman (optional — auto-installed by the script)
You do not have to install Podman manually. The script installs it automatically if it is missing. To install it yourself:SWAP (machines with less than 4 GB RAM)
If the machine has less than 4 GB of RAM, the container build may run out of memory and crash. Enable a swap file before proceeding:Full Workflow
Generate a shared encryption key
This key encrypts all tunnel traffic. Generate it once on any machine and keep it — you will paste the same value on both the server and the client.The key is also saved automatically to
~/.olcrtc_key after the first server run and reused on subsequent runs.Run srv.sh on the server machine
On the machine whose internet connection the traffic should exit through (VPS, remote server, home PC):The script installs Podman if needed, builds the binary in a container, and then asks a series of interactive questions.
Pick any public or self-hosted Jitsi Meet instance that opens in your browser. A list of known public instances is in Press Enter to use the default (Press Enter if the server connects to the internet directly. Enter Press Enter to accept the defaults (Press Enter on all — the defaults are optimal for most networks.This string becomes the label embedded in the
srv.sh flags
| Flag | Effect |
|---|---|
--branch=<name> | Use a different repository branch instead of master |
--no-cache | Purge the Go cache (~/.cache/olcrtc) before building — forces a clean rebuild |
Prompt: Carrier selection
| Choice | Notes |
|---|---|
jitsi | Default and recommended. Stable on datachannel, no registration required, easy to self-host. |
telemost | Yandex Telemost. Requires Yandex account registration. Note: Telemost removed datachannel support — use vp8channel or videochannel. |
wbstream | WbStream (stream.wb.ru). Requires WbStream registration. Use vp8channel, seichannel, or videochannel. |
Prompt: Transport selection
| Choice | Notes |
|---|---|
datachannel | Default and fastest. Lowest latency. Stable with Jitsi. |
vp8channel | Works with Telemost and WbStream; fast but higher latency than datachannel. |
seichannel | Works with WbStream; slow but low latency. |
videochannel | Works with WbStream reliably and Telemost when possible; slowest and highest latency. |
Prompt: Jitsi server URL (jitsi carrier only)
docs/examples/jitsi.instances.yaml.Prompt: Room options (jitsi carrier only)
- Auto-generate (recommended) — the script picks a random room name on the chosen server.
- Specific — enter a room name (
myroom) or a full URL (https://meet.example.org/myroom).
Prompt: DNS server
8.8.8.8:53). Change only if you have a specific requirement (e.g., 77.88.8.8:53 for Yandex DNS).Prompt: SOCKS5 egress proxy
y if the server itself should route its outbound connections through an external SOCKS5 proxy, then provide the address and port.Prompt: Transport-specific settings — videochannel
- qrcode — QR codes; configurable resolution; stable but slower.
- tile — tile codec; requires 1080×1080 resolution; Reed-Solomon support; faster but less stable.
none / nvenc). Press Enter to accept the defaults.Prompt: Transport-specific settings — vp8channel
25 FPS, batch size 1).Prompt: Transport-specific settings — seichannel
Prompt: Config comment/label
olcrtc:// URI. Press Enter to use the default or type a custom label.Read the server output
After a successful start, the script prints everything you need to configure the client:Save the Room ID/URL, the encryption key, and the
olcrtc:// URI. You will need the Room ID and key when running the client. The key is also saved to ~/.olcrtc_key and reused automatically on subsequent server runs.Run cnc.sh on the client machine
On your local machine (laptop, home PC):Answer the same questions as on the server. Carrier, transport, and Room ID must match the server exactly. When the script asks for the encryption key:Paste the 64-character hex key printed by Press Enter for IP and port — the proxy starts on
srv.sh.SOCKS5 binding
127.0.0.1:8808. If you want password protection, enter a username; the script will then ask for a password. When binding to an address outside 127.*, a username and password are required.After a successful start:Container Management
View running containers
Follow logs
Stop a specific container
Stop all olcRTC containers at once
Updating a Running Instance
A running container does not update itself — it keeps the binary that was built when it started. To move to the latest code:--no-cache is optional but guarantees a completely clean rebuild. Use the same carrier, transport, Room ID, and key as before. The server key in ~/.olcrtc_key is reused automatically.
Multiple Instances on One Machine
Each run ofsrv.sh or cnc.sh creates a container with a unique name (olcrtc-server-<random>), so multiple instances do not conflict:
cnc.sh for each server, using a different SOCKS5 port for each: