Introduction
pipedog is an unofficial TypeScript port of Pipecat, the framework for real-time voice and multimodal conversational AI.
pipedog is an unofficial TypeScript port of Pipecat, the open source Python framework (by Daily, BSD-2-Clause) for building voice and multimodal AI agents. Pipecat orchestrates AI services, network transports and audio processing for ultra-low latency conversations; pipedog brings the same architecture to Bun, Node, Deno and Cloudflare Workers.
Unofficial, 0.x
pipedog is a community port. It is not affiliated with or endorsed by Daily or the Pipecat project. The core runtime, most providers, Pipecat Flows, evals and the CLI are ported; Daily and a few providers (NVIDIA, Simli, Tavus) are not yet. Everything is tested against mocks and recorded protocol vectors, not yet against the live providers. See the roadmap.
Quickstart
Run a pipeline with a custom frame processor in a few lines.
Coming from Pipecat (Python)
How Pipecat's Python API maps to pipedog.
Core concepts
Frames, frame processors, pipelines, workers and cancellation.
Runtimes & compatibility
What runs where: Bun, Node, Deno, Cloudflare Workers.
Services
LLM, speech-to-text, text-to-speech and realtime providers, one page each.
Frameworks
Mount a voice agent in SvelteKit, Hono, Bun, Next.js, TanStack Start and more.
Development runner
Pipecat's main() runner: the prebuilt client, WebRTC and phone calls.
Telephony
Phone bots on Twilio, Telnyx, Plivo, Exotel, Vonage and Genesys.
How it works
Like Pipecat, pipedog orchestrates work in a pipeline: a series of frame processors that handle real-time audio, text and video frames. In a typical voice conversation:
- A transport receives audio from the user (browser, phone, ...).
- Speech recognition converts speech to text in real time.
- An LLM generates a response from the conversation context.
- Speech synthesis converts the response back to speech.
- The transport streams the audio back to the user.
A PipelineWorker runs a pipeline and a WorkerRunner runs workers: one for a simple bot, or
many that talk to each other over a shared message bus for multi-agent setups.
Relation to Pipecat
pipedog tracks a pinned upstream Pipecat commit and ports it module by module, test by test. The goal is that someone who knows Pipecat can read pipedog code (and these docs) without a dictionary:
- Same names. Classes, frames, module paths and file names are the same as upstream:
src/pipecat/processors/frame_processor.pybecomes@pipedog/core/processors/frame_processor. - Same event names.
"on_pipeline_started","on_client_ready", ... are unchanged strings. - camelCase members.
push_frame()ispushFrame(),audio_in_sample_rateisaudioInSampleRate. - Options objects. Python keyword arguments become one options object:
new TextFrame({ text: "hi" }). - Seconds. Durations and timeouts stay in seconds, so upstream configs carry over.
- asyncio semantics. Tasks, cancellation, queues and events behave like Python's
asyncio, through@pipedog/asyncio. - Deprecated APIs are not ported. Things upstream marks as deprecated (for example the
PipelineTask/PipelineRunneraliases) are left out.
The upstream test suite is ported 1:1, and is how behavioral parity is proven.
Compatibility with Pipecat clients (RTVI)
pipedog keeps Pipecat's wire protocols unchanged: RTVI messages, serializers and dict keys
on the wire are byte-for-byte what Pipecat sends. A protocol is not an API, so nothing there is
camelCased. That means Pipecat's client SDKs (@pipecat-ai/client-js, the React voice-ui-kit, the
prebuilt UIs) can talk to a pipedog bot unchanged. PipelineWorker adds RTVI support
automatically unless you pass enableRtvi: false.
Status
The core runtime (frames, processors, pipelines, workers, bus, observers, RTVI, base services and
transports) is ported in full, with its upstream test suite. So are the main providers: OpenAI,
Anthropic, Google, Azure, AWS (including Nova Sonic), Deepgram, Cartesia, ElevenLabs, Inworld,
Ultravox, xAI, about 30 more speech providers (AssemblyAI, Speechmatics, Gladia, Soniox, Rime, Fish,
Hume, Sarvam and others) and 16 OpenAI-compatible providers, with the WebSocket, SmallWebRTC, LiveKit, WhatsApp
and local audio transports, HeyGen avatars, six telephony serializers (Twilio, Telnyx, Plivo,
Exotel, Vonage, Genesys) and the development runner. Pipecat Flows, evals, the
pipedog CLI, the RNNoise filter, the soundfile mixer, HTTP Smart Turn, the
MCP client and the keyless local speech models (Whisper, Moonshine,
FunASR, Kokoro, Piper, Pocket TTS) are ported too. In all, 622 of upstream's 667 modules (93%) and
305 of its 340 test files are ported, across 87 packages.
Provider services are tested against mock servers and recorded protocol vectors, and the examples run end to end against mock APIs. Testing against the real providers is the next phase, so treat pipedog as 0.x software: try it, and report what breaks.
Services lists every provider, ported or coming soon, and the
roadmap says what isn't ported yet. The generated
porting status (porting/STATUS.md) lists every package, how much of
it is ported, and which runtimes it is verified on.
License
pipedog is BSD-2-Clause, like Pipecat. The original Pipecat code is Copyright (c) 2024–2026 Daily; the port is Copyright (c) 2026 pipedog contributors. Parts of these docs are adapted from the Pipecat documentation (Copyright (c) 2024–2025 Daily, BSD-2-Clause), with every Python example rewritten in TypeScript against the pipedog API.
pipedog is an unofficial community TypeScript port of Pipecat. It is not affiliated with or endorsed by Daily or the Pipecat project.
Portions adapted from the Pipecat documentation, Copyright (c) 2024–2025 Daily, BSD-2-Clause (see apps/docs/LICENSE-pipecat-docs).