Pipecat UI
Blocks

Console

Development preview of a workbench for debugging and testing Pipecat agents — connect flow, media, transcripts, metrics, and live events in one drop-in block.

Open in Storybook

The console is a multipurpose template for debugging and testing Pipecat agents. Drop it into a route, point it at your bot, and you have a complete workbench without building any UI: the connect flow with device controls, bot audio and video, live conversation transcripts, per-service metrics, session info, and a raw RTVI event stream. Use it as your local debugging page during bot development, a shared test harness on staging, or the starting point for your own operator console.

Opens the live console block in a fullscreen overlay. No bot is required — connecting without one demos the real-message error banner.

Installation

The console is a development preview and is not currently published in the @pipecat registry. The source remains in packages/registry/src/blocks/console for local development. The usage examples below describe that local source.

Transport packages are not installed with the block — they load on demand. Install the one for your transportType:

TransportInstall
smallwebrtc (default)npm install @pipecat-ai/small-webrtc-transport
dailynpm install @pipecat-ai/daily-transport
websocketnpm install @pipecat-ai/websocket-transport
moqnpm install @pipecat-ai/moq-transport

A missing package doesn't crash the console — it surfaces in the error banner with the exact install command.

Usage

The console is a drop-in: it builds its own client via usePipecatApp and renders its own PipecatClientProviderdo not nest it inside another provider. Give it a sized container (it fills its parent):

import { Console } from "@/components/pipecat/console/console";

export default function DebugPage() {
  return (
    <div className="h-dvh">
      <Console
        connectParams={{ endpoint: "/api/start" }}
        layoutPersistenceKey="my-console"
      />
    </div>
  );
}

What you get: a header with the connect flow (hover the button to see the resolved connection URL), resizable bot-media / conversation+metrics / info panes over a collapsible live events strip on desktop, and the same panels as bottom tabs on mobile — one tree, so every prop reaches both layouts. Connection errors show their real message in a dismissible banner.

Theming and the header slot

The console owns no theme. It renders off semantic tokens, so it follows your app's light/dark class automatically; drop your own toggle (or any app-specific actions) into headerSlot:

import { useTheme } from "next-themes";

function ThemeToggle() {
  const { resolvedTheme, setTheme } = useTheme();
  return (
    <Button
      variant="ghost"
      size="icon-sm"
      aria-label="Toggle theme"
      onClick={() => setTheme(resolvedTheme === "dark" ? "light" : "dark")}
    >
      <SunMoonIcon />
    </Button>
  );
}

<Console headerSlot={<ThemeToggle />} />;

Key props

PropTypeDescription
transportType"smallwebrtc" | "daily" | "websocket" | "moq"Transport backing the client (default "smallwebrtc").
connectParams / startBotParams / startBotResponseTransformerConnect flow, forwarded to usePipecatApp.
connectOnMountbooleanConnect automatically (default false).
initDevicesOnMountbooleanInitialize devices on load (default true).
titleText / logo / noLogo / headerSlotHeader content; headerSlot renders before the connect button.
noUserAudio / noUserVideo / noScreenControlbooleanHide device controls.
noBotAudio / noBotAudioControls / noAudioOutputbooleanBot audio pane / its volume control / playback entirely.
noBotVideobooleanBot video pane — default true (most voice bots have no video).
noConversation / noMetrics / noEvents / noStatusInfo / noSessionInfo / noTextInput / noDTMFbooleanRemove the matching region.
keypadMode"buffered" | "immediate"DTMF keypad dispatch (default "buffered").
textRenderMode / noTextRenderModeSwitchTranscript render mode seed and its header select.
conversationPropsPartial<ConversationProps>Labels, renderers, and other transcript overrides.
audioCodec / videoCodecstringCodec preferences (smallwebrtc only).
collapseInfoPanel / collapseMediaPanel / collapseEventsPanelbooleanInitial collapse state per pane.
layoutPersistenceKeystringPersist pane sizes in localStorage under this key.
onConnectionStateChange / onServerMessage / onInjectMessage / onClientWiring callbacks.

On this page