Overview and router for assistant-ui, the React library for building AI chat interfaces from composable primitives. Use for high-level, cross-cutting, or…
assistant-ui
Always consult assistant-ui.com/llms.txt for the latest API.
React library for building AI chat interfaces with composable primitives.
References
./references/architecture.md -- Core architecture and layered system
./references/packages.md -- Package overview and selection guide
When to Use
Use Case
Best For
Chat UI from scratch
Full control over UX
Existing AI backend
Connects to any streaming backend
Custom message types
Tools, images, files, custom parts
Multi-thread apps
Built-in thread list management
Production apps
Cloud persistence, auth, analytics
Architecture
┌─────────────────────────────────────────────────────────┐
│ UI Components (Primitives) │
│ ThreadPrimitive, MessagePrimitive, ComposerPrimitive │
└─────────────────────────┬───────────────────────────────┘
│
┌─────────────────────────▼───────────────────────────────┐
│ Context Hooks │
│ useAui, useAuiState, useAuiEvent │
└─────────────────────────┬───────────────────────────────┘
│
┌─────────────────────────▼───────────────────────────────┐
│ Runtime Layer │
│ AssistantRuntime → ThreadRuntime → MessageRuntime │
└─────────────────────────┬───────────────────────────────┘
│
┌─────────────────────────▼───────────────────────────────┐
│ Adapters/Backend │
│ AI SDK · LangGraph · Custom · Cloud Persistence │
└─────────────────────────────────────────────────────────┘
Pick a Runtime
Using AI SDK?
├─ Yes → useChatRuntime (recommended)
└─ No
├─ External state (Redux/Zustand)? → useExternalStoreRuntime
├─ LangGraph agent? → useLangGraphRuntime
├─ AG-UI protocol? → useAgUiRuntime
├─ A2A protocol? → useA2ARuntime
└─ Custom API → useLocalRuntime
Core Packages
Package
Purpose
@assistant-ui/react
UI primitives & hooks
@assistant-ui/react-ai-sdk
Vercel AI SDK v6 adapter
@assistant-ui/react-langgraph
LangGraph adapter
@assistant-ui/react-markdown
Markdown rendering
assistant-stream
Streaming protocol
assistant-cloud
Cloud persistence
Quick Start
import { AssistantRuntimeProvider } from "@assistant-ui/react";
import { Thread } from "@/components/assistant-ui/thread";
import { useChatRuntime, AssistantChatTransport } from "@assistant-ui/react-ai-sdk";
function App() {
const runtime = useChatRuntime({
transport: new AssistantChatTransport({ api: "/api/chat" }),
});
return (
<AssistantRuntimeProvider runtime={runtime}>
<Thread />
</AssistantRuntimeProvider>
);
}
State Access
import { useAui, useAuiState } from "@assistant-ui/react";
const api = useAui();
api.thread().append({ role: "user", content: [{ type: "text", text: "Hi" }] });
api.thread().cancelRun();
const messages = useAuiState(s => s.thread.messages);
const isRunning = useAuiState(s => s.thread.isRunning);
Related Skills
/setup - Installation and configuration
/primitives - UI component customization
/runtime - State management deep dive
/tools - Tool registration and UI
/streaming - Streaming protocols
/cloud - Persistence and auth
/thread-list - Multi-thread management
/update - Version updates and migrationsdon't have the plugin yet? install it then click "run inline in claude" again.