{"slug": "show-hn-streamcore-open-source-realtime-voice-infrastructure-for-ai", "title": "Show HN: StreamCore – Open-source realtime voice infrastructure for AI", "summary": "StreamCore, an open-source realtime voice infrastructure for AI, launched on Hacker News, offering a single Go binary that handles WebRTC transport, adaptive turn-taking, barge-in, streaming STT/LLM/TTS, NAT traversal, and session state, while allowing developers to bring their own agent. The project, which runs streamcore.ai, supports browsers, phones, backends, telephony, and embedded devices, and includes SDKs for TypeScript, React Native, Go, and Rust.", "body_md": "**Talk to your AI over WebRTC — with interruption, streaming speech, and NAT traversal handled.**\n\nOne Go binary. Bring your own agent.\n\nNo install, no signup — browser mic, and you can cut it off mid-sentence.\n\n[ Live demo](https://streamcore.ai) ·\n\n[·](#quick-start)\n\n**Quick start**[·](/streamcoreai/streamcore-server/blob/main/docs)\n\n**Docs**[·](#sdks-and-examples)\n\n**SDKs**[·](/streamcoreai/streamcore-server/blob/main/docs/roadmap.md)\n\n**Roadmap**[·](https://discord.gg/xKGFaGWawT)\n\n**Discord**[简体中文](/streamcoreai/streamcore-server/blob/main/README.zh-CN.md)\n\nAnyone can demo a voice agent. Then a real caller talks over it, pauses mid-sentence, dials in from behind a firewall that blocks UDP, or waits three seconds for the first word — and the demo stops being a product.\n\nStreamCore is the layer that handles all of that. It owns the latency-sensitive media path between your users and your AI: **WebRTC transport, adaptive turn-taking, barge-in, streaming STT/LLM/TTS, NAT traversal, session state, and realtime events** — across browsers, phones, backends, telephony, and embedded devices.\n\nWhat it deliberately does *not* own is your agent. Keep your prompts, tools, models, and business logic exactly where they are — [four supported ways](#bring-your-own-agent), no fork required.\n\nBuilt with it: voice agents, realtime copilots, live translation, AI-hosted audio rooms, embedded voice devices, and phone applications.\n\n** streamcore.ai runs this repo.** Open it, hit\n\n*Start Conversation*, and interrupt the agent while it is talking. Per-turn STT, LLM, and TTS latency is on screen while you do it.\n\nPrefer a recording? [Watch the walkthrough](https://www.loom.com/share/ee079aca75aa4fa1ba6a5e51302fbd56).\n\n**Two terminals, five minutes, and you are talking to it.** Needs Go 1.25+ (or Docker) and API keys for an STT, LLM, and TTS provider. No keys? Run it [fully local](/streamcoreai/streamcore-server/blob/main/docs/quickstart.md#fully-local-no-api-keys) with Ollama + VibeVoice.\n\n```\ncp config.toml.example config.toml   # add your provider credentials\ngo run .\n```\n\nThe server listens on `:8080`\n\n; clients connect to `http://localhost:8080/whip`\n\n.\n\nThen talk to it from a browser:\n\n```\ngit clone https://github.com/streamcoreai/examples.git\ncd examples/typescript && npm install && npm run dev\n```\n\nOpen [http://localhost:3000](http://localhost:3000) and start talking.\n\nDocker, TURN ports, and production notes: [Quick start guide](/streamcoreai/streamcore-server/blob/main/docs/quickstart.md).\n\nTransport |\nWebRTC audio over WHIP (\n|\n\n**Connectivity*** and*TCP 3478 — no external coturn. A network handover or NAT rebind is recovered by ICE restart on the same session, so the conversation survives it**Turn-taking****Interruption****Streaming****Sessions & events****Reach**[SIP telephony](https://github.com/streamcoreai/sip-server), and[ESP32](https://github.com/streamcoreai/esp32)endpointsFull capability list: [Capabilities](/streamcoreai/streamcore-server/blob/main/docs/capabilities.md).\n\nListed so the table above stays honest — unticked items are real gaps today, not soon-shipping promises. Ticked ones shipped recently and stay listed for a release or two so you can see what moved:\n\n-\n**Session reconnection (server)**— a dropped connection recovers on the same session via ICE restart, so the conversation and the running pipeline survive it -\n**Client-driven reconnection**— the TypeScript, React Native, Go and Rust SDKs recover a network change automatically: ICE restart first, then a resume redial if the connection failed -\n**Session resume**— a drop past the point ICE restart can help is recovered by redialling with a single-use token, reattaching to the running conversation. Every SDK runs restart-then-resume as one ladder, so a backgrounded phone rejoins the same conversation -\n**Panic recovery**— a panic in one call's goroutines now ends that call alone: it recovers, logs the stack, and the session is reaped like any other ended call -\n**Session cap**—`server.max_sessions`\n\nbounds live sessions globally; past it,`POST /whip`\n\nreturns 503 with`Retry-After`\n\n. Resumes are exempt -\n**Env-var secrets**— every API key and secret can come from the environment (`OPENAI_API_KEY`\n\n,`STREAMCORE_JWT_SECRET`\n\n, …) instead of`config.toml`\n\n. See[Configuration](/streamcoreai/streamcore-server/blob/main/docs/configuration.md#secrets-from-environment-variables) -\n**Metrics export**—`/health`\n\nand timing events exist, no Prometheus/OpenTelemetry -\n**Structured logging**—`log.Printf`\n\ntext today, no JSON logs carrying`session_id`\n\n-\n**Versioned releases**— a Docker image ships to GHCR on each GitHub release, but no version in the binary and no tagged standalone binaries yet -\n**Horizontal scaling**— sessions live in process memory, so the server is single-node; reconnection and resume need sticky routing or an external store to work behind a load balancer -\n**HTTP agent endpoint**—`llm.provider = \"agent\"`\n\nPOSTs each turn to an agent you host in any language; replies stream back as speech -\n**Persistent memory**— the built-in runtime forgets callers between sessions; BYO agents can already persist their own\n\nFull TODO list, including ecosystem items: [Roadmap / TODO](/streamcoreai/streamcore-server/blob/main/docs/roadmap.md). Want one of these? Say so in [Discord](https://discord.gg/xKGFaGWawT) — demand reorders the list.\n\nStreamCore starts one layer below prompt-and-tool frameworks: the media path. Your intelligence stays yours, five ways —\n\n**Tool call**— plugins (Python/TS/JS) or native Go tools call into your existing backend** Your agent**— set`llm.provider = \"agent\"`\n\nand each turn is POSTed to an HTTP endpoint you host, in any language**Your models**— point`llm.provider = \"ollama\"`\n\nat any Ollama-compatible URL you run**Your code**— implement one small Go interface; the whole media path works unchanged** Built in**— or use StreamCore's optional agent runtime with tools, skills, RAG, and history\n\nDetails and code: [Bring your own agent](/streamcoreai/streamcore-server/blob/main/docs/bring-your-own-agent.md) · [Agent runtime](/streamcoreai/streamcore-server/blob/main/docs/agent-runtime.md).\n\nProviders: Deepgram, AssemblyAI, OpenAI, Cartesia, ElevenLabs, MiniMax, Speechify, Ollama, VibeVoice (local), xAI Grok Voice (speech-to-speech), pgvector/Supabase for retrieval. See [Providers](/streamcoreai/streamcore-server/blob/main/docs/providers.md).\n\n| Page | What's in it |\n|---|---|\n|\n\n[Capabilities](/streamcoreai/streamcore-server/blob/main/docs/capabilities.md)[Bring your own agent](/streamcoreai/streamcore-server/blob/main/docs/bring-your-own-agent.md)`llm.Client`\n\ninterface[Agent runtime](/streamcoreai/streamcore-server/blob/main/docs/agent-runtime.md)[Providers](/streamcoreai/streamcore-server/blob/main/docs/providers.md)[Configuration](/streamcoreai/streamcore-server/blob/main/docs/configuration.md)`config.toml`\n\nreference[Protocol](/streamcoreai/streamcore-server/blob/main/docs/protocol.md)[Architecture](/streamcoreai/streamcore-server/blob/main/docs/architecture.md)Connect from anywhere — every SDK speaks the same WHIP + DataChannel protocol:\n\nReact Native / Expo (`@streamcore/react-native-sdk`\n\n) is built but not yet published to npm.\n\nPlugin SDKs: `@streamcore/plugin`\n\nand `streamcore-plugin`\n\nin [plugin-sdk](https://github.com/streamcoreai/plugin-sdk). Runnable browser, CLI, and TUI apps: [examples](https://github.com/streamcoreai/examples).\n\nThank you! Interested in sponsoring? Reach out for logo placement on GitHub + demo page.\n\nRead [CONTRIBUTING.md](/streamcoreai/streamcore-server/blob/main/CONTRIBUTING.md) first — it covers running the server locally, the four checks CI runs before you push, and the extra care the timing-sensitive media path needs. Good places to start: [ good first issue](https://github.com/streamcoreai/streamcore-server/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22) and\n\n[.](https://github.com/streamcoreai/streamcore-server/issues?q=is%3Aissue+is%3Aopen+label%3A%22help+wanted%22)\n\n`help wanted`\n\nClient SDKs, the SIP bridge, examples, and the ESP32 firmware live in their own repos under [ streamcoreai](https://github.com/streamcoreai) — send those changes there.\n\nFound a vulnerability? Don't open a public issue — report it privately through the [Security tab](https://github.com/streamcoreai/streamcore-server/security/advisories/new). [SECURITY.md](/streamcoreai/streamcore-server/blob/main/SECURITY.md) covers scope, response targets, and the settings that matter on a public address — JWT auth on `/whip`\n\nabove all.\n\nApache 2.0. See [LICENSE](/streamcoreai/streamcore-server/blob/main/LICENSE).", "url": "https://wpnews.pro/news/show-hn-streamcore-open-source-realtime-voice-infrastructure-for-ai", "canonical_source": "https://github.com/streamcoreai/streamcore-server", "published_at": "2026-08-28 14:38:05+00:00", "updated_at": "2026-08-28 14:48:22.331810+00:00", "lang": "en", "topics": ["ai-infrastructure", "ai-tools", "developer-tools", "artificial-intelligence"], "entities": ["StreamCore", "Hacker News", "WebRTC", "Go", "TypeScript", "React Native", "Rust", "Ollama"], "alternates": {"html": "https://wpnews.pro/news/show-hn-streamcore-open-source-realtime-voice-infrastructure-for-ai", "markdown": "https://wpnews.pro/news/show-hn-streamcore-open-source-realtime-voice-infrastructure-for-ai.md", "text": "https://wpnews.pro/news/show-hn-streamcore-open-source-realtime-voice-infrastructure-for-ai.txt", "jsonld": "https://wpnews.pro/news/show-hn-streamcore-open-source-realtime-voice-infrastructure-for-ai.jsonld"}}