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
The seven expansion integrations are available in
orb-ui@0.10.0 and later. Their tests use real SDK types and synthetic events; no credential-based live
provider test has been run. The individual guides document current SDK versions and limits.
All public previews use local fixtures. For live applications, authenticate and limit your own
backend, keep provider secrets server-side, and mint short-lived browser session credentials.
The public site has no provider proxy or owner-funded voice endpoint.
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 Live, 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 GPT-Live uses native browser WebRTC. Exchange the SDP offer through your server:createOpenAIRealtimeAdapter({ getClientSecret }); the two APIs have
different endpoints and event lifecycles.
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.
Advanced options stay optional
The adapter guides document alternate transports, existing-session modes, runtime overrides, and audio calibration hooks. Those options are escape hatches. Start with the first example in each guide and add advanced configuration only when your application already owns that part of the provider lifecycle.Migrating calibration overrides in 0.8.0
TheoutputVolumeCalibration option remains, but its fields have changed. Replace the old
noiseFloor, gain, exponent, attack, and release object with optional amplitude and
envelope overrides:
amplitude.silenceFloor: raw activity treated as silenceamplitude.speechReference: raw ordinary speech mapped to0.5amplitude.speechPeak: raw strong speech mapped to1envelope.riseTimeMsandenvelope.fallTimeMs: milliseconds to move 90% toward a new target
inputVolumeCalibration accepts the same new shape independently.
Update any public type or constant imports:
Use
VolumeCalibrationOverrides for a partial configuration and PROVIDER_VOLUME_CALIBRATIONS
for the shipped provider-specific defaults. Diagnostic samples now expose mapped instead of
shaped, along with raw, normalized, and elapsedMs.
Controlled integrations must also replace the removed volume field
with inputVolume and outputVolume.
Before choosing a provider, use the React voice agent UI guide to plan
the listening, thinking, speaking, error, accessibility, and recovery behavior shared by every
integration.
- Vapi
- ElevenLabs
- LiveKit
- Pipecat
- OpenAI GPT-Live
- OpenAI Realtime
- Gemini Live
- Custom integrations and controlled mode