Client Integration

Relay only mints tokens — the realtime media path is pure LiveKit. Join rooms with the standard LiveKit client SDKs by pointing them at the { token, url } Relay returns. No proprietary client, no lock-in.

Whatever platform you ship on, the pattern is the same: your server calls POST /v1/tokens, hands the resulting token and url to the client, and the client connects with the official LiveKit SDK.

JavaScript / React

Use livekit-client directly, or @livekit/components-react for prebuilt React components and hooks.

client.js
import { Room } from "livekit-client";

const room = new Room();
await room.connect(url, token); // { token, url } from Relay
await room.localParticipant.enableCameraAndMicrophone();

Reference: LiveKit JavaScript SDK.

Flutter

Add the livekit_client package and connect:

main.dart
final room = Room();
await room.connect(url, token); // { token, url } from Relay

Reference: LiveKit Flutter SDK.

Swift (iOS)

Add the LiveKitClient Swift package and connect:

RoomView.swift
let room = Room()
try await room.connect(url: url, token: token) // { token, url } from Relay

Reference: LiveKit Swift SDK.

Kotlin (Android)

Add the livekit-android dependency and connect:

MainActivity.kt
val room = LiveKit.create(appContext = applicationContext)
room.connect(url, token) // { token, url } from Relay

Reference: LiveKit Android SDK.

Full SDK reference

Relay's tokens work with every LiveKit client SDK. For the complete client reference, see docs.livekit.io.