Pipecat UI
Components

Conversation

Live scrolling transcript with roles, karaoke text, and function-call cards.

Open in Storybook

user
Hey! What's the weather like in Amsterdam?
4:06:52 PM
4:06:57 PM
assistant
It's about 19 degrees and partly cloudy. Perfect weather for a canal walk.
4:07:02 PM
assistant
.
4:07:47 PM

Installation

pnpm dlx shadcn@latest add @pipecat/conversation

Installs two files: conversation.tsx (scroll container + connected wrapper) and conversation-message.tsx (message row, role label, content renderer, function-call card, thinking indicator).

Usage

import { Conversation } from "@/components/pipecat/conversation";
import { TextInput } from "@/components/pipecat/text-input";

<div className="flex h-96 flex-col rounded-xl border">
  <Conversation assistantLabel="Agent" clientLabel="You" />
  <div className="border-t p-3">
    <TextInput />
  </div>
</div>;

Messages stream from Pipecat's built-in conversation store (usePipecatConversation). Bot text renders karaoke-style by default — spoken words in the foreground color, upcoming words muted. Auto-scroll follows the newest message unless the user scrolls away.

Key props

PropTypeDescription
textRenderMode"karaoke" | "captions" | "instant"How bot speech text renders
assistantLabel / clientLabel / systemLabelstringRole labels
noFunctionCallsbooleanHide function-call rows
functionCallRendererFunctionCallRendererReplace function-call rendering per call
botOutputRenderersRecord<string, BotOutputRenderer>Custom renderers by aggregation type
reverseOrderbooleanNewest first; auto-scroll targets the top
emptyReactNodeView-only: custom empty state

Requires a bot with RTVI 1.1.0+ (BotOutput events); the connected component explains this in its empty state when unsupported.

On this page