assistant-ui Thread List
Always consult assistant-ui.com/llms.txt for latest API.
Manage multiple chat threads with built-in or custom UI.
References ./references/management.md -- Thread CRUD operations ./references/custom-ui.md -- Custom thread list UI Quick Start
Thread list is available with useChatRuntime + cloud:
import { AssistantCloud } from "assistant-cloud"; import { useChatRuntime, AssistantChatTransport } from "@assistant-ui/react-ai-sdk"; import { AssistantRuntimeProvider, Thread, ThreadList } from "@assistant-ui/react";
const cloud = new AssistantCloud({ baseUrl: process.env.NEXT_PUBLIC_ASSISTANT_BASE_URL, authToken: async () => getAuthToken(), });
function Chat() { const runtime = useChatRuntime({ transport: new AssistantChatTransport({ api: "/api/chat" }), cloud, });
return (
Thread Operations import { useAssistantApi, useAssistantState } from "@assistant-ui/react";
const api = useAssistantApi(); const { threads, mainThreadId } = useAssistantState(s => s.threadList);
// Switch to thread api.threads().switchToThread(threadId);
// Create new thread api.threads().switchToNewThread();
// Thread item operations const item = api.threads().item({ id: threadId }); await item.rename("New Title"); await item.archive(); await item.delete();
Custom Thread List import { ThreadListPrimitive, ThreadListItemPrimitive } from "@assistant-ui/react";
function CustomThreadList() {
return (
<ThreadListPrimitive.Items>
<ThreadListItemPrimitive.Root className="flex p-2 hover:bg-gray-100">
<ThreadListItemPrimitive.Trigger className="flex-1">
<ThreadListItemPrimitive.Title />
</ThreadListItemPrimitive.Trigger>
<ThreadListItemPrimitive.Archive>Archive</ThreadListItemPrimitive.Archive>
<ThreadListItemPrimitive.Delete>Delete</ThreadListItemPrimitive.Delete>
</ThreadListItemPrimitive.Root>
</ThreadListPrimitive.Items>
</ThreadListPrimitive.Root>
); }
Without Cloud (Local) import { useRemoteThreadListRuntime, InMemoryThreadListAdapter } from "@assistant-ui/react";
const runtime = useRemoteThreadListRuntime({ adapter: new InMemoryThreadListAdapter(), runtimeHook: () => useLocalRuntime({ model: myModel }), });
Common Gotchas
ThreadList not showing
Pass cloud to runtime Check authentication
Threads not persisting
Verify cloud connection Check network requests