Quick start overview
OtterVoice is a session orchestration SDK, not a model gateway. You pick a runtime, inject providers, and listen to session events.
Scenario → example
Section titled “Scenario → example”| Scenario | Example | Command |
|---|---|---|
| Minimal loop (no mic / no key) | examples/node-cli |
bun run demo |
| Node + live LLM | examples/node-openrouter |
bun run examples/node-openrouter/index.ts |
| Browser full-duplex (native Audio LLM / server cascade) | examples/web |
cd examples/web && bun run start |
| Browser Audio LLM + policy gateway | examples/web-audio-llm-only |
bun run examples/web-audio-llm-only/server.ts |
| Expo app | examples/react-native-expo |
cd examples/react-native-expo && bun run start |
| Scoped short-lived tokens (supported providers only) | examples/token-broker |
bun run examples/token-broker/server.ts |
Repo: github.com/bugkiwi/OtterVoice
Recommended path
Section titled “Recommended path”- Validate UI / captions / state with mocks.
- Swap in the platform runtime (Web / Expo / Node).
- Route request/response models through a server policy gateway. Use the token broker only when the provider can issue truly scoped credentials. Never ship long-lived keys, prompts, models, or spend controls to clients.
bun add @ottervoice/core# Web: bun add @ottervoice/runtime-web# Expo: bun add @ottervoice/runtime-react-native# Node: bun add @ottervoice/runtime-node# Providers: @ottervoice/provider-deepgram | elevenlabs | openrouter | azure-speech