Skip to main content

Documentation 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.

olcRTC has a two-layer architecture. The auth provider (auth.provider) decides which service hosts the WebRTC room and how credentials are obtained. The transport (net.transport) decides how tunnel bytes are placed inside that WebRTC session. You pick one provider and one transport independently, then combine them based on what works in your network.
SOCKS5 client
  → olcrtc cnc  (auth provider + transport)
    → WebRTC/SFU service
      → olcrtc srv
        → internet

Auth Providers

Jitsi

FieldValue
auth.providerjitsi
Enginejitsi (internal/engine/jitsi)
RegistrationNone required
Room ID formatFull URL: https://<host>/<room>
The Jitsi provider joins a Jitsi MUC via the XMPP/Jingle/colibri-ws stack. It parses the room URL you supply, extracts the host and room name, and connects using the zarazaex69/j library.Key behaviour: Jitsi’s Jicofo conference controller only sends a Jingle session-initiate once at least one other participant is present. This means both srv and cnc must be running and in the same room before the tunnel is established. If you open a room URL in a browser first, Jicofo may remove the empty conference. Let olcRTC itself be the first two participants.Public instances: A list of public Jitsi Meet instances is maintained in docs/examples/jitsi.instances.yaml in the repository. Any self-hosted Jitsi Meet instance without authentication also works — use the full URL https://HOST/ROOM.
Always test which Jitsi instance is reachable in your network before deploying. Open the instance URL in a browser; if the page loads, the host is accessible. Different instances may be blocked differently depending on your ISP or country.
Minimal config (server):
mode: srv
auth:
  provider: jitsi
room:
  # Check docs/examples/jitsi.instances.yaml for public instances
  id: "https://meet.example.org/REPLACE_ME_WITH_ROOM_ID"
crypto:
  key: "REPLACE_ME_WITH_64_HEX_CHARS"
net:
  transport: datachannel
  dns: "8.8.8.8:53"
data: data

Engines (Internal)

The engine is the low-level SFU/signaling implementation. You normally select the engine implicitly by choosing a provider. The term carrier may appear in logs as a historical synonym for the chosen auth/provider path.
EnginePackageCapabilitiesUsed by
livekitinternal/engine/livekitData packets, video tracks via LiveKit SDKwbstream, none
goolominternal/engine/goolomTelemost/Goolom signaling, publisher/subscriber PeerConnectiontelemost
jitsiinternal/engine/jitsiJitsi MUC/Jingle/colibri-ws, datachannel + video tracks via pionjitsi
internal/engine/builtin binds auth.provider to the correct engine at runtime.

Transports

datachannel

The datachannel transport uses the engine’s native byte/data path. For the Jitsi engine this is the colibri-ws bridge channel (EndpointMessage{raw} broadcast over the JVB WebSocket). For LiveKit this is the data packet API (PublishDataPacket).
PropertyValue
MechanismNative byte path of the engine
ReliabilityReliable, ordered
Max payload12 KiB per message
Extra YAML fieldsNone
When to use: datachannel is the simplest and fastest transport. It has the lowest latency and is the recommended starting point with Jitsi.
WbStream + datachannel does not work in the normal guest flow. Guest tokens have canPublishData=false. The SCTP data channel opens, but data is silently dropped. Use vp8channel, seichannel, or videochannel with WbStream unless you have a moderator token.
No extra YAML configuration is needed:
net:
  transport: datachannel

Compatibility Matrix

Transporttelemostwbstreamjitsi
datachannel⚠️
vp8channel⚠️
seichannel⚠️
videochannel⚠️
Legend:
  • ✅ Works (passes E2E tests)
  • ❌ Does not work / not supported (fails E2E tests)
  • ⚠️ Unstable (may work, may not)
Notes:
  • telemost datachannel: DataChannel was removed from Telemost.
  • telemost seichannel: Not supported by Telemost.
  • wbstream datachannel: Fails in guest flow (canPublishData=false); requires a moderator token to work.
  • jitsi video transports: Jicofo requires additional protocol steps to route video — unstable in practice; prefer datachannel or vp8channel with Jitsi.

Speed Ranking

From fastest to slowest:
RankTransportReason
1datachannelDirect native byte path, no encoding overhead
2vp8channelKCP over VP8 frames, minimal encoding overhead
3seichannelH264 SEI embedding, ACK/retry overhead
4videochannelFull video encoding via ffmpeg, highest overhead

Start with jitsi + datachannel — no registration required, works on any self-hosted or public Jitsi Meet instance. Use wbstream + vp8channel as a stable alternative for production scenarios.
Use caseProviderTransportNotes
Getting started, self-hostedjitsidatachannelNo registration, simplest setup
Production, commercialwbstreamvp8channelStable, no special rights needed
Telemost userstelemostvp8channelOnly stable combination for Telemost
WbStream fallbackwbstreamseichannelWhen vp8channel is unavailable
Experimental / last resortwbstreamvideochannelRequires ffmpeg

Build docs developers (and LLMs) love