@assistant-ui
Production-grade open-source React toolkit for building ChatGPT-style AI chat interfaces. Provides Radix-style composable primitives: Thread, Message, Composer, ThreadList, ActionBar, and more — all with streaming, auto-scroll, retries, attachments, markdown, code highlighting, voice dictation, and keyboard shortcuts built in. Adapter packages for Vercel AI SDK, LangGraph/LangChain, AG-UI, A2A, Google ADK, and custom data-stream backends. Supports generative UI (tool-call rendering, inline human approvals). Optional paid Cloud tier for managed thread history, telemetry, and file storage. Y Combinator-backed. Use for: any production AI chat or copilot UI that needs a fully featured, themeable, framework-agnostic chat shell wired to the Vercel AI SDK or LangGraph in minutes.
Install this registry
npx shadcn@latest add https://r.assistant-ui.com/registry.json pnpm dlx shadcn@latest add https://r.assistant-ui.com/registry.json bunx shadcn@latest add https://r.assistant-ui.com/registry.json curl -s https://r.assistant-ui.com/registry.json Components
156 totalThe cn class name helper that every assistant-ui component imports from @/lib/utils.
npx shadcn@latest add https://r.assistant-ui.com/utils.json Shared design language for the elements family: surface, ink, and motion class recipes plus the shimmer utility.
npx shadcn@latest add https://r.assistant-ui.com/elements-surfaces.json Range normalization for the elements family: clamping a caller's counts, indexes, and shares to what the element can render.
npx shadcn@latest add https://r.assistant-ui.com/elements-range.json Shared task state, labels, timing, and elapsed time for task elements.
npx shadcn@latest add https://r.assistant-ui.com/elements-task.json A pixel matrix that keeps time while the model has nothing to show yet.
npx shadcn@latest add https://r.assistant-ui.com/elements-loading-state.json A live status line that names what the agent is doing right now, with elapsed time.
npx shadcn@latest add https://r.assistant-ui.com/elements-thinking-indicator.json A collapsible trace that streams reasoning steps along a timeline, then settles into a summary.
npx shadcn@latest add https://r.assistant-ui.com/elements-reasoning-panel.json Tokens arrive softly: the newest words land in blue and settle into ink.
npx shadcn@latest add https://r.assistant-ui.com/elements-streaming-text.json The classic three dots, tuned to read as presence rather than noise.
npx shadcn@latest add https://r.assistant-ui.com/elements-typing-indicator.json A user bubble and a streaming assistant reply, with actions that appear on hover.
npx shadcn@latest add https://r.assistant-ui.com/elements-message-pair.json Navigate between regenerated versions of the same answer without losing your place.
npx shadcn@latest add https://r.assistant-ui.com/elements-message-branches.json Copy, rate, and regenerate. Each action confirms itself with a small state change.
npx shadcn@latest add https://r.assistant-ui.com/elements-message-actions.json Prompt pills that stagger in after a reply and invite the next turn.
npx shadcn@latest add https://r.assistant-ui.com/elements-suggestions.json A quiet failure banner with a retry path, not a modal in your face.
npx shadcn@latest add https://r.assistant-ui.com/elements-error-state.json One tool invocation with its request and result tucked behind a disclosure.
npx shadcn@latest add https://r.assistant-ui.com/elements-tool-call.json A whole working session summarized as verbs, targets, and file stats.
npx shadcn@latest add https://r.assistant-ui.com/elements-tool-timeline.json Command output that streams line by line and ends with an exit status.
npx shadcn@latest add https://r.assistant-ui.com/elements-terminal-block.json A unified diff with tinted additions and removals, sized for chat.
npx shadcn@latest add https://r.assistant-ui.com/elements-code-diff.json A search query and its results landing one by one as the agent reads.
npx shadcn@latest add https://r.assistant-ui.com/elements-web-search.json Citations collapsed into a pill, expanding into scannable source cards.
npx shadcn@latest add https://r.assistant-ui.com/elements-sources.json Numbered references inside a sentence, each with a hover preview of its source.
npx shadcn@latest add https://r.assistant-ui.com/elements-inline-citation.json A dot grid holds the frame while the image resolves out of a blur.
npx shadcn@latest add https://r.assistant-ui.com/elements-image-generation.json A small comparison table the model can answer with directly.
npx shadcn@latest add https://r.assistant-ui.com/elements-data-table.json Digits that roll into place as a count updates in real time.
npx shadcn@latest add https://r.assistant-ui.com/elements-number-ticker.json A checklist the agent works through, with progress you can glance.
npx shadcn@latest add https://r.assistant-ui.com/elements-agent-plan.json Parallel workers with their own progress, models, and completions.
npx shadcn@latest add https://r.assistant-ui.com/elements-subagent-list.json One pill that always answers: what is it doing, and for how long.
npx shadcn@latest add https://r.assistant-ui.com/elements-agent-status.json A delegated task with its state, timing, result, and transcript in one card.
npx shadcn@latest add https://r.assistant-ui.com/elements-task-card.json Human in the loop: the agent asks before it runs anything with side effects.
npx shadcn@latest add https://r.assistant-ui.com/elements-approval-card.json The agent proposes a change with its confidence, and waits for a yes.
npx shadcn@latest add https://r.assistant-ui.com/elements-recommendation-card.json A generated document as a tangible object, written live and versioned.
npx shadcn@latest add https://r.assistant-ui.com/elements-artifact-card.json The unified input: attachments, commands, mentions, models, voice, and context in one surface.
npx shadcn@latest add https://r.assistant-ui.com/elements-composer.json The whole family working together: a message, a pause, a streamed reply.
npx shadcn@latest add https://r.assistant-ui.com/elements-chat-panel.json The first screen: a greeting, three ways in, and the composer front and center.
npx shadcn@latest add https://r.assistant-ui.com/elements-empty-state.json Conversation history with unread marks and actions that wait for hover.
npx shadcn@latest add https://r.assistant-ui.com/elements-thread-list.json Streaming never steals your scroll position; a pill offers the way back down.
npx shadcn@latest add https://r.assistant-ui.com/elements-scroll-anchor.json A rail of the whole thread: one tick per turn, the turn being read marked and the ones on screen deepened, and a hover preview of what it says.
npx shadcn@latest add https://r.assistant-ui.com/elements-conversation-map.json The agent's own working list, rewritten mid-run as it discovers what else is needed.
npx shadcn@latest add https://r.assistant-ui.com/elements-todo-list.json Turns you typed while a run was in flight, stacked and cancelable until it finishes.
npx shadcn@latest add https://r.assistant-ui.com/elements-message-queue.json Files as received rather than staged: an image to open, a document with its page count.
npx shadcn@latest add https://r.assistant-ui.com/elements-message-attachment.json The same diff, but each hunk is a decision: keep it, discard it, apply what survived.
npx shadcn@latest add https://r.assistant-ui.com/elements-reviewable-diff.json Everything a run touched, as a tree, with the churn spelled out per file.
npx shadcn@latest add https://r.assistant-ui.com/elements-file-tree.json A server pausing mid-tool-call to ask you for the fields it still needs.
npx shadcn@latest add https://r.assistant-ui.com/elements-elicitation-form.json The passages a retrieval answer stands on, scored, before the answer itself arrives.
npx shadcn@latest add https://r.assistant-ui.com/elements-retrieval-chunks.json Area, line, and bars, with points landing one at a time as the series streams in.
npx shadcn@latest add https://r.assistant-ui.com/elements-chart.json Every span in a run on one time axis, nested, so you can see where it actually went.
npx shadcn@latest add https://r.assistant-ui.com/elements-trace-waterfall.json The thread steps aside and the document takes the room, still being written as you read.
npx shadcn@latest add https://r.assistant-ui.com/elements-canvas-split.json A live call: the orb tracks your voice, the caption names the turn, the transcript follows.
npx shadcn@latest add https://r.assistant-ui.com/elements-voice-conversation.json An answer played back, the spoken word lit as it goes, speed under your thumb.
npx shadcn@latest add https://r.assistant-ui.com/elements-read-aloud.json Which servers are connected, what each one brought, and which is still waiting on you.
npx shadcn@latest add https://r.assistant-ui.com/elements-mcp-server-panel.json A thumbs-down that asks why, so the signal arrives with a reason attached.
npx shadcn@latest add https://r.assistant-ui.com/elements-feedback-dialog.json Select a phrase in an answer and a toolbar offers to quote, explain, or rewrite it.
npx shadcn@latest add https://r.assistant-ui.com/elements-quote-reply.json Rewrite a turn in place, told up front how many replies the edit throws away.
npx shadcn@latest add https://r.assistant-ui.com/elements-edit-message.json You pressed stop. The half-written answer stays, and continuing is one tap away.
npx shadcn@latest add https://r.assistant-ui.com/elements-stopped-run.json What the turn cost: time to first token, throughput, tokens, money.
npx shadcn@latest add https://r.assistant-ui.com/elements-message-timing.json The socket drops, the run keeps going on the server, and the stream is picked back up.
npx shadcn@latest add https://r.assistant-ui.com/elements-connection-state.json Who you are about to talk to: its skills, its model, and the endpoint behind it.
npx shadcn@latest add https://r.assistant-ui.com/elements-agent-card.json Chrome for a sandboxed preview: a URL bar, reload, and open-in-new around a frame you isolate.
npx shadcn@latest add https://r.assistant-ui.com/elements-web-preview.json Come back to a thread and the sentence you never sent is still waiting.
npx shadcn@latest add https://r.assistant-ui.com/elements-draft-restore.json A drawn answer with zoom, reset, and a full-bleed view; you hand it the rendered graphic.
npx shadcn@latest add https://r.assistant-ui.com/elements-diagram.json Work as a graph rather than a list: branches that fan out and rejoin.
npx shadcn@latest add https://r.assistant-ui.com/elements-flow-graph.json A half-year of runs as a calendar of cells, dense where the work was.
npx shadcn@latest add https://r.assistant-ui.com/elements-activity-graph.json Calls that went out together, collapsed to one row until you want the detail.
npx shadcn@latest add https://r.assistant-ui.com/elements-tool-group.json Where the window actually went: prompt, tools, files, conversation, and what's left.
npx shadcn@latest add https://r.assistant-ui.com/elements-context-breakdown.json The full list rather than the rail: grouped by family, priced, with what each one can do.
npx shadcn@latest add https://r.assistant-ui.com/elements-model-picker.json How hard to think, and how much of that budget the run actually spent.
npx shadcn@latest add https://r.assistant-ui.com/elements-reasoning-effort.json A refusal in its own shape, with the nearest thing it can do instead.
npx shadcn@latest add https://r.assistant-ui.com/elements-guardrail-notice.json Chronology in a long thread: days marked, times on hover.
npx shadcn@latest add https://r.assistant-ui.com/elements-day-separator.json Who is talking, once a thread holds more than a user and one model.
npx shadcn@latest add https://r.assistant-ui.com/elements-speaker-identity.json Fork the same turn to a different model instead of rolling the same dice.
npx shadcn@latest add https://r.assistant-ui.com/elements-regenerate-menu.json Which claims came from a source, which were inferred, and which are guesses.
npx shadcn@latest add https://r.assistant-ui.com/elements-confidence-marker.json One call failed. The error, the attempt count, and a retry that doesn't restart the turn.
npx shadcn@latest add https://r.assistant-ui.com/elements-tool-error.json Granting a capability rather than approving one action, with the reach spelled out.
npx shadcn@latest add https://r.assistant-ui.com/elements-permission-grant.json The screen the agent is driving, with a cursor trail and what it is doing right now.
npx shadcn@latest add https://r.assistant-ui.com/elements-computer-use.json A snippet with a run button, and the output it produced attached below it.
npx shadcn@latest add https://r.assistant-ui.com/elements-code-runner.json A document the answer leans on, with the quoted passage and the page to jump to.
npx shadcn@latest add https://r.assistant-ui.com/elements-document-reference.json What it now remembers about you, written during the turn and removable.
npx shadcn@latest add https://r.assistant-ui.com/elements-memory-chips.json An outline that fills in section by section, each carrying the sources behind it.
npx shadcn@latest add https://r.assistant-ui.com/elements-research-report.json A location answer: pins, a route between them, and the list they came from.
npx shadcn@latest add https://r.assistant-ui.com/elements-map-answer.json Rendered expressions with the working shown, one step at a time.
npx shadcn@latest add https://r.assistant-ui.com/elements-math-block.json The most common structured answer after a table: one object, labeled.
npx shadcn@latest add https://r.assistant-ui.com/elements-spec-sheet.json Two options weighed side by side, with the pick named and argued.
npx shadcn@latest add https://r.assistant-ui.com/elements-comparison-card.json Events on a time axis, with what already happened and what is still coming.
npx shadcn@latest add https://r.assistant-ui.com/elements-timeline.json Work measured in minutes: weighted stages, an ETA, and a way out.
npx shadcn@latest add https://r.assistant-ui.com/elements-job-progress.json A verdict with its arithmetic shown: criteria, weights, and what pulled it down.
npx shadcn@latest add https://r.assistant-ui.com/elements-score-breakdown.json What the run spent, split by model, against the session total.
npx shadcn@latest add https://r.assistant-ui.com/elements-cost-meter.json How much is left, when it comes back, and the way to get more.
npx shadcn@latest add https://r.assistant-ui.com/elements-quota-banner.json Control passing between agents, with the reason and what came along.
npx shadcn@latest add https://r.assistant-ui.com/elements-agent-handoff.json Work still going somewhere else, and the results waiting to be collected.
npx shadcn@latest add https://r.assistant-ui.com/elements-background-inbox.json Points you can fall back to, with what each one would give back.
npx shadcn@latest add https://r.assistant-ui.com/elements-checkpoint-history.json A run that repeats on its own, with its cadence and how it has been doing.
npx shadcn@latest add https://r.assistant-ui.com/elements-schedule-card.json Prompts you saved, searchable, with their variables shown before you insert one.
npx shadcn@latest add https://r.assistant-ui.com/elements-prompt-library.json Everything the app can do, one keystroke away and grouped by where it acts.
npx shadcn@latest add https://r.assistant-ui.com/elements-command-palette.json A read-only transcript someone sent you, with a way to pick it up yourself.
npx shadcn@latest add https://r.assistant-ui.com/elements-shared-conversation.json Find inside a long thread, with every hit marked down the scrollbar.
npx shadcn@latest add https://r.assistant-ui.com/elements-conversation-search.json History you can actually get back into: pinned first, then grouped by when.
npx shadcn@latest add https://r.assistant-ui.com/elements-thread-search.json The floating entry point, and the panel it opens into.
npx shadcn@latest add https://r.assistant-ui.com/elements-launcher-bubble.json Model, system prompt, temperature, and what the assistant is allowed to do.
npx shadcn@latest add https://r.assistant-ui.com/elements-settings-panel.json First run: three moves that teach what this assistant is actually for.
npx shadcn@latest add https://r.assistant-ui.com/elements-onboarding.json The bottom sheet: keyboard-aware, quick actions above, thumb-sized targets.
npx shadcn@latest add https://r.assistant-ui.com/elements-mobile-composer.json Keyframes and theme variables for the streaming shimmer animation.
npx shadcn@latest add https://r.assistant-ui.com/shimmer-style.json Assistant page wired to the AI SDK chat route, with the thread component installed.
npx shadcn@latest add https://r.assistant-ui.com/chat/b/ai-sdk-quick-start/json.json Next.js route handler that streams chat completions through the AI SDK.
npx shadcn@latest add https://r.assistant-ui.com/ai-sdk-backend.json AI SDK route handlers with resumable stream context, so a run survives a reload.
npx shadcn@latest add https://r.assistant-ui.com/ai-sdk-backend-resumable.json Chat page for an Eve agent, rendering the session through an assistant-ui thread.
npx shadcn@latest add https://r.assistant-ui.com/eve-chat.json Chat container with message list, composer, auto scroll, and accessibility built in.
npx shadcn@latest add https://r.assistant-ui.com/thread.json The props-driven voice orb: five session states and four palettes, no runtime required.
npx shadcn@latest add https://r.assistant-ui.com/elements-voice.json The props-driven context usage display: ring, bar, and text presets with the usage popover, no runtime required.
npx shadcn@latest add https://r.assistant-ui.com/elements-context-display.json Realtime voice session controls with connect, mute, and a status indicator.
npx shadcn@latest add https://r.assistant-ui.com/voice.json The live call screen bound to the thread's voice session: orb, caption, transcript, mute, and end call.
npx shadcn@latest add https://r.assistant-ui.com/voice-conversation.json A runtime task card with nested transcripts, timing, results, and grouped task lanes.
npx shadcn@latest add https://r.assistant-ui.com/task-card.json A runtime task summary chip with an optional tray for every task in the thread.
npx shadcn@latest add https://r.assistant-ui.com/agent-status.json Copy text to the clipboard with a temporary copied state.
npx shadcn@latest add https://r.assistant-ui.com/use-copy-to-clipboard.json Render assistant markdown with headings, lists, links, and code blocks.
npx shadcn@latest add https://r.assistant-ui.com/markdown-text.json Collapsible panel for assistant reasoning and thinking content.
npx shadcn@latest add https://r.assistant-ui.com/reasoning.json Runtime-backed thread rail: a tick per turn, the turn being read marked and the ones on screen deepened, a hover preview, and a click that scrolls there.
npx shadcn@latest add https://r.assistant-ui.com/conversation-map.json The props-driven reasoning disclosure: streaming preview, fades, and variants, no runtime required.
npx shadcn@latest add https://r.assistant-ui.com/elements-reasoning.json Badge with streaming stats: time to first token, total time, and tokens per second.
npx shadcn@latest add https://r.assistant-ui.com/message-timing.json Token usage against a model's context window as a ring, bar, or text, with a hover popover.
npx shadcn@latest add https://r.assistant-ui.com/context-display.json Sidebar or dropdown for switching conversations, with search and active selection.
npx shadcn@latest add https://r.assistant-ui.com/thread-list.json Dialog listing MCP connectors and custom servers, with OAuth and bearer auth controls.
npx shadcn@latest add https://r.assistant-ui.com/mcp-config.json Resolve an image attachment to a preview source URL.
npx shadcn@latest add https://r.assistant-ui.com/use-attachment-src.json Attach files from the composer and view them inside messages.
npx shadcn@latest add https://r.assistant-ui.com/attachment.json Prompt chips rendered from runtime generated follow up suggestions.
npx shadcn@latest add https://r.assistant-ui.com/follow-up-suggestions.json Icon button with an accessible tooltip label, shared across the assistant UI components.
npx shadcn@latest add https://r.assistant-ui.com/tooltip-icon-button.json Code block highlighting powered by react-syntax-highlighter.
npx shadcn@latest add https://r.assistant-ui.com/syntax-highlighter.json Floating chat bubble for support widgets and help desks, with a thread list and a resizable window.
npx shadcn@latest add https://r.assistant-ui.com/assistant-modal.json Side panel chat for copilot experiences and inline assistance.
npx shadcn@latest add https://r.assistant-ui.com/assistant-sidebar.json Default renderer for tool calls that have no dedicated UI.
npx shadcn@latest add https://r.assistant-ui.com/tool-fallback.json Collapsible wrapper around consecutive tool calls.
npx shadcn@latest add https://r.assistant-ui.com/tool-group.json Code block highlighting powered by react-shiki.
npx shadcn@latest add https://r.assistant-ui.com/shiki-highlighter.json The props-driven Shiki code block: streaming-aware highlighting, no runtime required.
npx shadcn@latest add https://r.assistant-ui.com/elements-shiki-highlighter.json Render Mermaid diagrams in messages, including while they stream.
npx shadcn@latest add https://r.assistant-ui.com/mermaid-diagram.json The props-driven Mermaid renderer: zoom overlay, skeleton, and error fallback, no runtime required.
npx shadcn@latest add https://r.assistant-ui.com/elements-mermaid-diagram.json Render code diffs with highlighted additions and deletions.
npx shadcn@latest add https://r.assistant-ui.com/diff-viewer.json Sidebar shell that hosts the thread list beside a thread.
npx shadcn@latest add https://r.assistant-ui.com/threadlist-sidebar.json Select and quote message text with a floating toolbar and a composer preview.
npx shadcn@latest add https://r.assistant-ui.com/quote.json Display URL sources with favicon, title, and an external link.
npx shadcn@latest add https://r.assistant-ui.com/sources.json Display image parts with preview, loading states, and a fullscreen dialog.
npx shadcn@latest add https://r.assistant-ui.com/image.json Display file parts with icon, name, size, and a download button.
npx shadcn@latest add https://r.assistant-ui.com/file.json Model picker with reasoning effort levels, search, and runtime integration.
npx shadcn@latest add https://r.assistant-ui.com/model-selector.json The props-driven model picker: search, groups, and reasoning effort levels, no runtime required.
npx shadcn@latest add https://r.assistant-ui.com/elements-model-selector.json Model provider logos as inline SVG components.
npx shadcn@latest add https://r.assistant-ui.com/logos.json Dropdown select with composable trigger, content, and item components.
npx shadcn@latest add https://r.assistant-ui.com/select.json Direction provider and hook for right to left layouts.
npx shadcn@latest add https://r.assistant-ui.com/direction.json Small label for status, categories, and metadata.
npx shadcn@latest add https://r.assistant-ui.com/badge.json Tabs for organizing content into switchable panels.
npx shadcn@latest add https://r.assistant-ui.com/tabs.json Stacked headings that reveal or hide content sections.
npx shadcn@latest add https://r.assistant-ui.com/accordion.json 5x5 dot matrix indicator with state specific blink patterns.
npx shadcn@latest add https://r.assistant-ui.com/dot-matrix.json Animated number that rolls its digits odometer style when the value changes.
npx shadcn@latest add https://r.assistant-ui.com/number-roll.json Activity heat map with month and weekday labels.
npx shadcn@latest add https://r.assistant-ui.com/heat-graph.json Character triggered picker for @ mentions, / commands, and similar popovers.
npx shadcn@latest add https://r.assistant-ui.com/composer-trigger-popover.json Render mention directives as inline chips in user messages.
npx shadcn@latest add https://r.assistant-ui.com/directive-text.json The props-driven directive chip renderer: bring your own formatter, no runtime required.
npx shadcn@latest add https://r.assistant-ui.com/elements-directive-text.json Theme variables and vocabulary CSS for generative UI output.
npx shadcn@latest add https://r.assistant-ui.com/generative-ui-style.json Styled component library for rendering generative UI output.
npx shadcn@latest add https://r.assistant-ui.com/generative-ui.json