Real-time voice agents, in TypeScript.
pipedog runs Pipecat's frame pipelines (transport, speech-to-text, LLM, text-to-speech) on Bun, Node, Deno and Cloudflare Workers. Same classes, same frames, same wire protocols.
bunx @pipedog/cli init- Transport in
transport.input()InputAudioRawFrame - Speech-to-text
sttTranscriptionFrame - LLM
llmLLMTextFrame - Text-to-speech
ttsTTSAudioRawFrame - Transport out
transport.output()
Live demo
Talk to a pipedog agent.
Running entirely on Cloudflare: a Durable Object per call, Deepgram Flux and Aura on Workers AI, Claude Haiku 5.5 with tools. Over a WebSocket with Pipecat's own client, or WebRTC through Cloudflare Realtime.
The live demo is coming soon.
A voice agent you can talk to, running on Cloudflare Workers and Durable Objects. Until it's on, run it yourself from the repository.
examples/landing-demo- frame throughput
- 4.8–5.7×
- of Pipecat on CPython 3.13, on every runtime
- lower per-frame latency
- 10–14×
- on Bun, Node and Deno
- cold start
- ~45 ms
- on Bun, against 396 ms on CPython
- packages
- 96
- released together under @pipedog
The same 10-processor pipeline in pipedog and in Pipecat, on one machine. Methodology and full results
Top sponsor · In production
Nexi Health, a medical device AI startup, runs pipedog in production, handling 100+ calls every day.
Why pipedog
Pipecat's architecture, where your app already runs.
Runs everywhere
The core is runtime-agnostic: no node:* imports, no Buffer. Support per package is recorded from real runs, not by hand.
- Bunruns the TypeScript directly
- Node.js22 or later
- Denonpm: specifiers
- Cloudflare Workerswith nodejs_compat
Pipecat-compatible
The same frames, processors, events and wire protocols, with camelCase members. Pipecat's client SDKs (@pipecat-ai/client-js, voice-ui-kit) connect to a pipedog bot unchanged.
57 provider packages
31 LLM, 25 speech-to-text, 32 text-to-speech and 10 speech-to-speech services, plus local models on ONNX Runtime. Install only the ones you use.
- ai-sdk
- anthropic
- assemblyai
- asyncai
- aws
- azure
- baseten
- bland
- camb
- cartesia
- cerebras
- cloudflare
- crusoe
- deepgram
- deepseek
- elevenlabs
- fireworks
- fish
- funasr
- gladia
- gradium
- groq
- heygen
- hume
- inception
- inworld
- kokoro
- langchain
- meta
- minimax
- mistral
- moonshine
- nebius
- neuphonic
- novita
- nvidia
- ollama
- openai
- openrouter
- perplexity
- piper
- pocket-tts
- qwen
- resembleai
- rime
- sambanova
- sarvam
- smallest
- soniox
- speechify
- speechmatics
- together
- ultravox
- whisper
- xai
- zoom-ai
Transports & telephony
6 transports (WebSocket, SmallWebRTC, LiveKit, WhatsApp, local audio) and 8 serializers, among them Twilio, Telnyx, Plivo, Exotel, Vonage and Genesys.
Batteries included
The pipedog CLI scaffolds a project. The development runner, Pipecat Flows and evals are ported too.
Less overhead
Bundled with bun build to a few MB. Cold starts in tens of milliseconds, so a voice agent fits serverless and the edge.
A bot is a list
Processors in, frames through.
Each service is a frame processor. Put them in a Pipeline in the order audio and text should travel, hand it to a worker, and connect a client. Swap a service for another provider's, or for a local model, and the rest stays.
import { Pipeline } from "@pipedog/core/pipeline/pipeline";
import { OpenAILLMSettings } from "@pipedog/openai/base_llm";
import { OpenAILLMService } from "@pipedog/openai/llm";
import { OpenAISTTService } from "@pipedog/openai/stt";
import { OpenAITTSService } from "@pipedog/openai/tts";
// … apiKey, the transport and the context aggregators, as in the full bot
const stt = new OpenAISTTService({ apiKey });
const llm = new OpenAILLMService({
apiKey,
settings: new OpenAILLMSettings({
systemInstruction: "You are a helpful voice assistant. Keep replies short; they are spoken.",
}),
});
const tts = new OpenAITTSService({ apiKey, sampleRate: 24000 });
const pipeline = new Pipeline([
transport.input(),
stt,
aggregators.user(),
llm,
tts,
transport.output(),
aggregators.assistant(),
]);Ship a voice agent today.
The CLI writes the bot, its client and a guide for your coding agent, for the services you pick.
bunx @pipedog/cli init