Orb is the main orb-ui component. It can run in controlled mode with a directional signal, or
through a provider adapter.
Props
States
Use these states consistently across providers so your product has one voice UI language even when the underlying SDK changes.
Themes
debug: visible state and start/stop controls while integrating.
circle: the primary animated voice orb.
bars: waveform-like audio activity.
cloud: a soft atmospheric sphere with opposing input/output scale response.
radial: a four-lobe field with an input-reactive membrane and output-reactive twist.
A string uses the theme’s balanced preset. To select another preset or change low-level values,
pass { name, preset, appearance, geometry, motion }. Override fields are specific to the selected
theme and fully typed.
See theme customization for preset semantics and every low-level field.
Application-wide visual defaults can be supplied without changing adapter ownership:
For responsive layout, set --orb-ui-size; for stable internal styling, use slotProps; for
complete artwork ownership, use renderTheme. All three retain Orb’s normalized signal contract.
See theme customization,
stable slots, and
custom renderers.
When an adapter or onStart/onStop handler is provided, visual themes include a <button type="button"> control with native keyboard activation. radial uses a separate phone button while the other clickable visuals use the artwork itself. If there is no visible label, pass aria-label.
The radial control’s cutout defaults to white. Set
--orb-ui-radial-control-surround through the typed style prop when the orb sits on another
surface:
Set interactive={false} when the orb is only a visual status surface. The adapter remains the
session controller, so external buttons can call its existing lifecycle methods.
Adapter interface
Adapters normalize provider SDK events into orb-ui signals. If a provider is not supported yet, use controlled mode first and turn that mapping into an adapter later.
inputVolume and outputVolume are stable normalized speech envelopes from 0 to 1. Orb
reads input while state is listening, output while state is speaking, and zero in other
states. See volume calibration for the provider mapping contract.
Migrating from volume
The ambiguous volume prop and OrbSignal.volume field have been removed. Put the value on the
direction that owns it:
For a custom adapter, emit inputVolume for microphone activity and outputVolume for assistant
playback. Provider adapters already do this and ship with directional calibration defaults.
Migrating callback-object adapters
orb-ui 0.5.0 removes the deprecated callback-object adapter API. Pass one complete signal to the
listener whenever state or volume changes.
Custom adapters should implement OrbAdapter; the removed AdapterCallbacks and
LegacyOrbAdapter types are no longer exported.
Last modified on July 29, 2026