Transport in front
Keep your LiveKit agent exactly as it is. Terminate calls on our QUIC
transport and bridge the media into your existing LiveKit room. Best when
your agent is server-side and you don’t want to touch it.
Drop-in client shim
Swap one import in your browser app. Your
Room / RoomEvent / track code
keeps compiling but runs over our transport instead of your SFU. Best for
the browser leg.There is no packaged “LiveKit-Agents adapter.” You do not install a plugin
into the LiveKit runtime. The two supported paths are (1) putting our transport
in front of your unchanged agent via a bridge sidecar, and (2) the
browser-side
livekit-compat shim.
If you would rather hand us the conversation loop entirely and bring only your
models, see Keep Your Existing Runtime.Path 1 — put the transport in front of your agent
This is the lowest-risk migration: your LiveKit agent, room logic, and model plumbing stay byte-for-byte the same. What changes is the media plane in front of them. Callers (PSTN via SIP trunks, or browsers) land on TeleQuick’s single:443 QUIC/WebTransport plane; a lightweight bridge sidecar you run
next to your LiveKit deployment carries the audio between our transport and your
LiveKit room. The runtime routes a call to that bridge with a first-class
vendor-bridge step instead of driving the conversation itself.
The vendor-bridge routing is a first-class part of the runtime (its targets are
livekit, vapi, and twilio). The bridge sidecar itself is a separate
component you deploy alongside your LiveKit stack — it is not bundled into the
engine, and its exact packaging depends on your environment. This path is
“our transport + your agent,” not a turnkey plugin.Point your inbound numbers at our transport
Move the trunks that feed your LiveKit agent onto TeleQuick. Your carrier
trunk terminates on our SIP gateway; numbers are provisioned per tenant under
<workspace-id>.sip.telequick.dev. Nothing about your agent changes — only
where the call first lands.See SIP Trunking and
Number Provisioning.Run the LiveKit bridge sidecar
Deploy the bridge sidecar next to your LiveKit server. It connects to our
transport on one side and to your LiveKit room on the other, using your
existing LiveKit URL and access-token issuance. Audio is carried across as
Opus; your agent sees a normal LiveKit participant.
Route calls to the bridge
In the agent configuration for the number, select the vendor bridge
target instead of the built-in runtime. Conceptually the agent config carries
a vendor-bridge block naming LiveKit as the destination:When a call matches, the runtime hands its media to the bridge rather than
running a conversation DAG. Your LiveKit agent joins the room and answers as
it always has.
Path 2 — the drop-in client shim (Preview)
If your LiveKit usage is a browser app talking to a room, the shim exposes alivekit-client-compatible surface (Room, RoomEvent, createLocalAudioTrack,
participants, tracks) mapped onto our MoQT/QUIC transport. For the common voice
path, migration is a one-line import swap — no SFU, no ICE, no media server.
Swap the import
Point your existing
livekit-client imports at the shim. Your component code
is otherwise unchanged.How the shim maps LiveKit concepts
Under the hood the shim keeps LiveKit semantics but replaces the media plane entirely — no SFU, no ICE, and WebRTC’s transport is never used. The mic still runs through the browser’s Opus encoder, but only the encoded frames are tapped and shipped over MoQT; see One-Line WebRTC Diversion.| LiveKit concept | Runs as |
|---|---|
Room.connect(url, token) | A MoQT session over WebTransport on :443 |
| Participant identity | A room-scoped MoQT namespace (relay enforces isolation via the token) |
| Microphone track | Encoded Opus frames published as MoQT objects |
| Remote audio track | A MoQT subscription decoded with WebCodecs into a Web Audio graph |
publishData / DataReceived | A reliable MoQT data track |
What you gain, and what stays the same
What you drop
What you drop
The SFU you operate, ICE/DTLS/SRTP negotiation, TURN relays for blocked
networks, and the media server’s scaling and on-call burden. Media rides one
QUIC/WebTransport plane on
:443.What stays yours
What stays yours
Your agent logic, prompts, models, and — on Path 1 — your LiveKit room code
unchanged. On Path 2, your browser component keeps its
Room/RoomEvent
shape. We move frames; we don’t impose a runtime.Access tokens
Access tokens
Both paths read the room and identity out of your existing access token, so
your auth/token-minting service does not have to change to get audio flowing.
Related
Keep Your Existing Runtime
The transport-only on-ramps in depth — the shim and the raw MoQT primitives.
LiveKit Agent Integration
Running a LiveKit agent behind our transport, at the integration level.
Migration Overview
Choosing a path across all the products you can move off.
Migration Checklist
The wave-by-wave cutover checklist for any voice migration.