start() and stop() methods. The adapter converts
provider events into idle, connecting, listening, thinking, speaking, and error signals,
including normalized input and output volume when the provider exposes audio.
Compare providers and integration styles
Choose based on who should own the session:
- If your app already uses Vapi or Pipecat’s browser client, wrap that existing client.
- If you want orb-ui to own browser media and connection lifecycle, use OpenAI Realtime or a managed ElevenLabs or LiveKit setup.
- If the provider requires an app-owned SDK connection, use Gemini Live’s
connectcallback. - If your application already normalizes session state, use controlled mode.
- If the mapping will be shared across screens or projects, build a custom
OrbAdapterusing the signal architecture guide.
orb-ui/adapters
only when your app already owns a Room, token source, custom connection fetcher, or runtime helpers.
The three connection shapes
Most adapters fit one of three small patterns.Wrap an existing provider client
Vapi and Pipecat already have a browser client. Pass that client to orb-ui:Let orb-ui own the browser session
OpenAI Realtime uses native browser WebRTC, so the only required integration seam is a fresh client secret:Let the official SDK open the session
Gemini Live session creation stays in the application because@google/genai is an app-owned,
optional dependency. orb-ui receives the connected session through one callback:
activityDetection: 'server' only when the Gemini session keeps
automatic activity detection enabled.