pipedog is an unofficial community port of Pipecat, not affiliated with Daily.
Pipecatported to TypeScript, API-compatible

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
bot.tsnew Pipeline([ … ])
  1. Transport intransport.input()
    InputAudioRawFrame
  2. Speech-to-textstt
    TranscriptionFrame
  3. LLMllm
    LLMTextFrame
  4. Text-to-speechtts
    TTSAudioRawFrame
  5. Transport outtransport.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.

nexi-health.com

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.

pyfrom pipecat.pipeline.worker import PipelineWorker
tsimport { PipelineWorker } from "@pipedog/core/pipeline/worker"

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
  • google
  • 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.

Docs for your agent

llms.txt, every page as Markdown, and @pipedog/mcp, a local MCP server with these docs and every package's API.

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.

bot.ts (excerpt)
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