Capabilities

August 11, 2026 · View on GitHub

English | 简体中文

Capabilities

What the media runtime does today. Anything not here is in Roadmap, not in the product yet.

Use StreamCore to build:

  • voice agents
  • realtime copilots
  • live translation
  • AI-hosted audio experiences
  • embedded voice devices
  • phone and communication applications
  • custom realtime AI products

The problem StreamCore solves

Building an agent demo is easy. Building reliable realtime media infrastructure around it is not.

Once a prototype has to become a product, the hard parts are not prompts:

ProblemWhat StreamCore does today
WebRTC connectivityPion-based peer, full ICE gathering, WHIP signaling over a single HTTP POST
NAT traversalBuilt-in STUN/TURN server — no external coturn container
Audio transportOpus over RTP in both directions, decode/encode handled for you
Turn-takingAdaptive VAD that tracks each call's noise floor, plus a debounce that merges a caller's mid-sentence pauses into one turn
InterruptionBarge-in on a faster VAD profile: agent audio ducks first, backchannels ("mm-hm", "yeah okay") are filtered out, and a confirmed interrupt cancels in-flight LLM and TTS
Streaming provider integrationStreaming STT, streaming LLM, and chunk-streaming TTS so audio starts before synthesis finishes — wired end to end
Session stateServer-generated session IDs, multi-peer sessions, lifecycle and teardown
Realtime eventsDataChannel events for transcript, response, agent state, and latency timings
Client integrationSDKs for TypeScript, React Native, Python, Go, and Rust
TelephonySIP bridge component that transcodes PCMU ↔ Opus and connects over WHIP
AuthOptional JWT auth on /whip with a short-lived token endpoint
Overload and fault isolationPer-IP rate limiting plus a global max_sessions cap (503 with Retry-After), and per-call panic isolation — one broken call can no longer take down the process
SecretsEvery API key and secret injectable as an environment variable, so keys stay out of images and config files
Latency visibilityDataChannel timing events, plus a per-turn latency breakdown (endpointing, merge, embedding, vector search, LLM, TTS) in the logs

How it fits

┌───────────────────────────────────────────────┐
│              Applications                     │
│ Voice agents · Copilots · Translation · Rooms │
└───────────────────────┬───────────────────────┘
                        │ SDKs and realtime events
┌───────────────────────▼───────────────────────┐
│           StreamCore Media Runtime            │
│                                               │
│ WebRTC · RTP · Opus · Sessions · Interruption │
│ VAD · Streaming audio · Network traversal     │
└───────────────┬───────────────────┬───────────┘
                │                   │
       ┌────────▼────────┐  ┌───────▼──────────┐
       │ AI and speech   │  │ Application and  │
       │ services        │  │ agent backends   │
       │ STT · TTS · LLM │  │ Tools · APIs     │
       └─────────────────┘  └──────────────────┘

StreamCore can run a complete speech-to-agent-to-speech pipeline, but that is only one way to use it.

Realtime media capabilities

Transport and connectivity

  • Bidirectional Opus audio over WebRTC (sendrecv)
  • WHIP signaling (RFC 9725) — one HTTP POST for SDP exchange, no persistent signaling socket
  • Full ICE gathering on both sides, no trickle ICE
  • ICE restart over PATCH /whip/{sessionId} — a network handover or NAT rebind is recovered on the same connection, so the conversation, the pipeline, and the LLM client all survive it
  • Idle sessions reaped after a configurable grace period, so a client that vanishes mid-call is collected without cutting short one that is reconnecting
  • Session resume for drops past the point ICE restart can help — a redial carrying a single-use token reattaches to the running conversation. Every SDK runs the two as a ladder (restart while recoverable, redial once not), so a backgrounded phone or a slept laptop rejoins the same conversation rather than starting a new one
  • Built-in STUN/TURN server using Pion (UDP and TCP 3478, relay range 50001–60000) — TCP so callers behind UDP-blocking firewalls still connect
  • Optional JWT auth on /whip, with POST /token issuing 1-hour tokens
  • /health endpoint and graceful shutdown with a forced-exit safety net

Media path

  • Opus decode → PCM → pipeline → PCM → Opus encode → RTP
  • Energy-based VAD with configurable onset/offset frame counts, adapting to each call's noise floor so a quiet caller on a clean line and a caller beside a road both register
  • Barge-in on a faster VAD profile: agent audio ducks while the caller talks over it and recovers if the interruption turns out to be a backchannel
  • Turn debounce that merges consecutive final transcripts, so "I want to… um… book a table" is answered once, not twice
  • Sentence-boundary chunking so TTS starts before the LLM finishes, and chunk-level streaming so audio plays before a sentence is fully synthesized
  • Optional per-utterance delivery tags — the model may prefix a sentence with [warm], [empathetic], [calm], or [excited], which map to provider voice controls and are never spoken aloud
  • Thinking sound — an optional tone played through the RTP stream while a slow tool runs (500 ms grace period)

Sessions and events

  • Server-generated session IDs, in-memory session manager
  • Multiple peers per session, each with an inbound or outbound direction
  • DataChannel events channel for transcript, response, state, and timing
  • Per-turn latency breakdown logged when pipeline.debug = true, separating endpointing, turn merge, embedding, vector search, LLM, and TTS
  • Inbound DataChannel messages routed into the pipeline (used today for camera image chunks)

Clients

  • TypeScript (@streamcore/js-sdk), Python (streamcore), Go (github.com/streamcoreai/go-sdk), Rust
  • React Native / Expo (@streamcore/react-native-sdk) — built, not yet published to npm

Supported endpoints

Endpoint typeStatusHow
BrowserAvailableTypeScript SDK over WHIP
MobileAvailableReact Native / Expo SDK (react-native-webrtc peer dependency)
Backend service / workerAvailableGo, Python, or Rust SDK
CLI and TUIAvailableGo and Rust examples
Telephony (SIP)Availablesip-server bridges PCMU/RTP ↔ Opus/WHIP, inbound and outbound
Embedded deviceExperimentalESP32-S3 firmware in esp32 speaking WHIP directly

AI integrations

AI integrationProviders
Streaming STTDeepgram, AssemblyAI, OpenAI, VibeVoice (local)
LLMOpenAI, Ollama (local or self-hosted), or your own HTTP agent endpoint (agent)
Streaming TTSCartesia, Deepgram, ElevenLabs, MiniMax, Speechify, VibeVoice (local)
Speech-to-speechxAI Grok Voice (replaces STT + LLM + TTS in one model)
Retrievalpgvector, Supabase
Custom toolsPython / TypeScript / JavaScript plugins, native Go tools

Credentials and per-provider caveats: Providers.