Skip to content

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 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

  1. Validate UI / captions / state with mocks.
  2. Swap in the platform runtime (Web / Expo / Node).
  3. 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.
Terminal window
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