Skip to main content
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