Changelog
Release history
All releases published from the assistant-ui monorepo, grouped by date.
Jun 1, 2026
12 packages
@assistant-ui/core@0.2.9patchGitHub →
Features
2featadd the
ToolkitDeclaration / ToolkitDeclarationDefinition types for authoring a toolkit permissively (a backend tool may declare description/parameters/execute); the canonical Toolkit keeps those fields erased. Author with defineToolkit from @assistant-ui/react, which the "use generative" compiler strips per build.featmove the
defineToolkit and hitl use-generative markers from @assistant-ui/next into @assistant-ui/core/react, so they ship once from every distribution (@assistant-ui/react, @assistant-ui/react-native, @assistant-ui/react-ink) and stay portable across build targets. Import them from @assistant-ui/react instead of @assistant-ui/next; they remain no-op markers stripped at build time by a "use generative" compiler.@assistant-ui/next@0.0.3patchGitHub →
Features
3featadd @assistant-ui/next — the
withAui Next.js config wrapper and the compiler for the "use generative" directive that colocates a tool's schema, server-only execute, and client-only render in one filefeatextract the framework-agnostic
"use generative" compiler into the internal @assistant-ui/x-generative-compiler package. @assistant-ui/next now consumes the shared compiler instead of bundling its own copy, so other build integrations can reuse it.featmove the
defineToolkit and hitl use-generative markers from @assistant-ui/next into @assistant-ui/core/react, so they ship once from every distribution (@assistant-ui/react, @assistant-ui/react-native, @assistant-ui/react-ink) and stay portable across build targets. Import them from @assistant-ui/react instead of @assistant-ui/next; they remain no-op markers stripped at build time by a "use generative" compiler.@assistant-ui/react@0.14.13patchGitHub →
Features
2featadd the
ToolkitDeclaration / ToolkitDeclarationDefinition types for authoring a toolkit permissively (a backend tool may declare description/parameters/execute); the canonical Toolkit keeps those fields erased. Author with defineToolkit from @assistant-ui/react, which the "use generative" compiler strips per build.featmove the
defineToolkit and hitl use-generative markers from @assistant-ui/next into @assistant-ui/core/react, so they ship once from every distribution (@assistant-ui/react, @assistant-ui/react-native, @assistant-ui/react-ink) and stay portable across build targets. Import them from @assistant-ui/react instead of @assistant-ui/next; they remain no-op markers stripped at build time by a "use generative" compiler.@assistant-ui/react-ink@0.0.22patchGitHub →
Features
1featmove the
defineToolkit and hitl use-generative markers from @assistant-ui/next into @assistant-ui/core/react, so they ship once from every distribution (@assistant-ui/react, @assistant-ui/react-native, @assistant-ui/react-ink) and stay portable across build targets. Import them from @assistant-ui/react instead of @assistant-ui/next; they remain no-op markers stripped at build time by a "use generative" compiler.@assistant-ui/react-ink-markdown@0.0.21patchGitHub →
Other
1misc@assistant-ui/[email protected]
@assistant-ui/react-mcp@0.0.5patchGitHub →
Other
1@assistant-ui/react-native@0.1.20patchGitHub →
Features
1featmove the
defineToolkit and hitl use-generative markers from @assistant-ui/next into @assistant-ui/core/react, so they ship once from every distribution (@assistant-ui/react, @assistant-ui/react-native, @assistant-ui/react-ink) and stay portable across build targets. Import them from @assistant-ui/react instead of @assistant-ui/next; they remain no-op markers stripped at build time by a "use generative" compiler.@assistant-ui/vite@0.0.2patchGitHub →
Features
1featadd @assistant-ui/vite — a Vite plugin (
aui) that compiles the "use generative" directive for Vite apps and TanStack Start. It transforms each toolkit per Vite environment (client keeps render, server environments keep execute), so no facade/redirect is needed; it also skips the Next-only server-only import, which has no react-server layer under Vite.@assistant-ui/x-generative-compiler@0.0.2patchGitHub →
assistant-stream@0.3.19patchGitHub →
Features
1featadd the
ToolkitDeclaration / ToolkitDeclarationDefinition types for authoring a toolkit permissively (a backend tool may declare description/parameters/execute); the canonical Toolkit keeps those fields erased. Author with defineToolkit from @assistant-ui/react, which the "use generative" compiler strips per build.assistant-ui@0.0.97patchGitHub →
Features
1featprompt to add assistant-ui agent skills when creating a project.
npx assistant-ui create now asks whether to add the agent skills and, on yes, delegates to the skills CLI (skills add assistant-ui/skills) so it installs into your chosen agent platforms (Claude Code, Cursor, Zed, etc.). Use --skills / --no-skills to skip the prompt; non-interactive runs default to adding them.create-assistant-ui@0.0.60patchGitHub →
Other
1May 31, 2026
1 package
@assistant-ui/next@0.0.2patchGitHub →
Features
1May 27, 2026
17 packages
@assistant-ui/core@0.2.7patchGitHub →
Features
2feat· corebuild a client-side tool-invocations pipeline directly into
useExternalStoreRuntime. Tool-call parts in messages now fire streamCall / execute automatically for any external-store runtime that opts in. Opt in per-adapter via unstable_enableToolInvocations: true (off by default — most external-store runtimes either run tools server-side or already wire their own client-side dispatch path; double-firing is the risk). The _store.isLoading flag signals when initial history is loaded: snapshots observed while isLoading === true are treated as historical (no fire), matching the contract that callers like importExternalState already rely on. Six in-tree runtimes (useAssistantTransportRuntime, useAISDKRuntime, useLangGraphRuntime, useStreamRuntime, useAgUiRuntime, useAdkRuntime) are migrated to the embedded tracker; the standalone useToolInvocations React hook is removed. Adds ExternalStoreAdapter.setToolStatuses so adapters can mirror the tracker's per-tool-call status into local React state for converter metadata. Auto-aborts in-flight tool calls on new turns (append with startRun, startRun) so a tool that finishes after the user moves on can no longer feed a stale result into the next turn.@assistant-ui/react@0.14.11patchGitHub →
@assistant-ui/react-ag-ui@0.0.33patchGitHub →
@assistant-ui/react-ai-sdk@1.3.30patchGitHub →
@assistant-ui/react-google-adk@0.0.12patchGitHub →
@assistant-ui/react-hook-form@0.12.16patchGitHub →
@assistant-ui/react-ink-markdown@0.0.19patchGitHub →
@assistant-ui/react-langchain@0.0.10patchGitHub →
@assistant-ui/react-langgraph@0.14.4patchGitHub →
@assistant-ui/react-mcp@0.0.3patchGitHub →
Other
1misc@assistant-ui/[email protected]
@assistant-ui/react-o11y@0.0.16patchGitHub →
Other
1misc@assistant-ui/[email protected]
@assistant-ui/tap@0.5.13patchGitHub →
assistant-ui@0.0.95patchGitHub →
create-assistant-ui@0.0.58patchGitHub →
Other
1May 26, 2026
10 packages
@assistant-ui/core@0.2.6patchGitHub →
Features
2featsurface AI SDK v6 tool approvals as a first-class
respondToApproval prop on tool components. tool-call parts in the approval-requested state now carry part.approval = { id, isAutomatic? }; tool components call respondToApproval({ approved, reason? }) to ack the gate without threading chatHelpers through application context. also fixes a transient requires-action flicker for the approval-responded state and tightens the external-message converter so interrupt vs pending tool calls are distinguished by an actual interrupt/approval field rather than by result === undefined.@assistant-ui/react@0.14.9patchGitHub →
Features
2featsurface AI SDK v6 tool approvals as a first-class
respondToApproval prop on tool components. tool-call parts in the approval-requested state now carry part.approval = { id, isAutomatic? }; tool components call respondToApproval({ approved, reason? }) to ack the gate without threading chatHelpers through application context. also fixes a transient requires-action flicker for the approval-responded state and tightens the external-message converter so interrupt vs pending tool calls are distinguished by an actual interrupt/approval field rather than by result === undefined.@assistant-ui/react-ai-sdk@1.3.28patchGitHub →
Features
1featsurface AI SDK v6 tool approvals as a first-class
respondToApproval prop on tool components. tool-call parts in the approval-requested state now carry part.approval = { id, isAutomatic? }; tool components call respondToApproval({ approved, reason? }) to ack the gate without threading chatHelpers through application context. also fixes a transient requires-action flicker for the approval-responded state and tightens the external-message converter so interrupt vs pending tool calls are distinguished by an actual interrupt/approval field rather than by result === undefined.@assistant-ui/react-ink@0.0.19patchGitHub →
Features
1featsurface AI SDK v6 tool approvals as a first-class
respondToApproval prop on tool components. tool-call parts in the approval-requested state now carry part.approval = { id, isAutomatic? }; tool components call respondToApproval({ approved, reason? }) to ack the gate without threading chatHelpers through application context. also fixes a transient requires-action flicker for the approval-responded state and tightens the external-message converter so interrupt vs pending tool calls are distinguished by an actual interrupt/approval field rather than by result === undefined.@assistant-ui/react-ink-markdown@0.0.18patchGitHub →
Other
1misc@assistant-ui/[email protected]
@assistant-ui/react-mcp@0.0.2patchGitHub →
Other
1misc@assistant-ui/[email protected]
@assistant-ui/react-native@0.1.18patchGitHub →
Features
2featsurface AI SDK v6 tool approvals as a first-class
respondToApproval prop on tool components. tool-call parts in the approval-requested state now carry part.approval = { id, isAutomatic? }; tool components call respondToApproval({ approved, reason? }) to ack the gate without threading chatHelpers through application context. also fixes a transient requires-action flicker for the approval-responded state and tightens the external-message converter so interrupt vs pending tool calls are distinguished by an actual interrupt/approval field rather than by result === undefined.assistant-stream@0.3.17patchGitHub →
Fixes
1fixpreserve parentId on streamed text and reasoning parts
assistant-ui@0.0.94patchGitHub →
Chores
1chore· clidrop
with-parent-id-grouping from the --example list. the example demonstrated MessagePrimitive.Unstable_PartsGroupedByParentId, which is deprecated; its grouping pattern is now better demonstrated by with-chain-of-thought using MessagePrimitive.GroupedParts, and the sources gap is closed by emitting source-url parts from a search_web tool in the same example. npx assistant-ui create -e with-parent-id-grouping will no longer resolve.create-assistant-ui@0.0.57patchGitHub →
Other
1May 25, 2026
34 packages
@assistant-ui/core@0.2.5patchGitHub →
Features
3feat· core, reactadd
MessagePrimitive.GenerativeUI primitivefeat· react-inkadd file storage adapter
feat· core, reactopt-out of auto-unarchive when switching threads
Fixes
1fix· corereplay the latched
initialize thread event to late subscribers. ensureInitialized emits initialize once during construction, so a runtime seeded with non-empty messages (e.g. useChatRuntime({ messages }) under useRemoteThreadListRuntime) fired it before the title binder's effect subscribed, and the runEnd → generateTitle wiring was never installed. unstable_on("initialize", ...) now schedules a one-off replay (on a microtask, re-checking the subscription) when the thread has already initialized, mirroring a BehaviorSubject, so late subscribers (the title binder, and ThreadViewport's thread.initialize top-anchor reset) no longer miss it.Other
1miscrelax
thread-message-like image validation to accept https:// and blob: URLs (and svg+xml data URIs) alongside base64 data: URIs, so assistant-authored images served from a URL render.@assistant-ui/mcp-docs-server@0.1.32patchGitHub →
@assistant-ui/react@0.14.8patchGitHub →
Features
3feat· core, reactadd
MessagePrimitive.GenerativeUI primitivefeat· core, reactopt-out of auto-unarchive when switching threads
@assistant-ui/react-data-stream@0.12.14patchGitHub →
@assistant-ui/react-google-adk@0.0.11patchGitHub →
@assistant-ui/react-hook-form@0.12.15patchGitHub →
@assistant-ui/react-ink@0.0.18patchGitHub →
@assistant-ui/react-ink-markdown@0.0.17patchGitHub →
@assistant-ui/react-langchain@0.0.8patchGitHub →
@assistant-ui/react-langgraph@0.14.2patchGitHub →
@assistant-ui/react-mcp@0.0.1patchGitHub →
Features
1featnew package — MCP server configuration and OAuth primitives. Unstyled Radix-style primitives (
McpManagerPrimitive, McpServerPrimitive, McpAddFormPrimitive), a tap-backed manager + per-server resource, OAuth (PKCE + DCR) / bearer / none auth modes, and pluggable persistence via MCPLocalStorage / MCPMemoryStorage / MCPCustomStorage.@assistant-ui/react-native@0.1.17patchGitHub →
@assistant-ui/react-streamdown@0.3.1patchGitHub →
@assistant-ui/react-syntax-highlighter@0.14.1patchGitHub →
@assistant-ui/store@0.2.12patchGitHub →
@assistant-ui/tap@0.5.12patchGitHub →
@assistant-ui/x-buildutils@0.0.9patchGitHub →
assistant-stream@0.3.16patchGitHub →
create-assistant-ui@0.0.56patchGitHub →
Other
1May 21, 2026
19 packages
@assistant-ui/cloud-ai-sdk@0.1.15patchGitHub →
Other
1@assistant-ui/core@0.2.4patchGitHub →
@assistant-ui/core@0.2.3patchGitHub →
Features
1feat· coreexpose modelName and toolNames in ModelContextState
Fixes
2fixguard
navigator.clipboard availability and swallow write rejections in ActionBarPrimitive.Copy. Previously, copy clicks in SSR, non-HTTPS contexts, or older browsers without the Clipboard API threw a ReferenceError, and permission-denied rejections surfaced as unhandled promise rejections. The web copyToClipboard implementation in @assistant-ui/react now early-rejects when the API is unavailable, and useActionBarCopy in @assistant-ui/core silently absorbs the rejection so the rest of the UI is unaffected.fix· corefire
streamCall for already-resolved tool calls observed after the initial snapshot, and promote in-progress tool calls from the initial snapshot once they change. Previously the runtime silently skipped streamCall whenever a tool-call part arrived already-resolved (history reload, thread switch, mid-run resume, PTC sub-call surfacing), forcing fragile render-effect fallbacks. execute stays suppressed for these cases so side effects don't double-run.Refactors
1refactorhoist
MessagePartPrimitiveInProgress to @assistant-ui/core/react so @assistant-ui/react, @assistant-ui/react-ink, and other distributions can share the same implementation. @assistant-ui/react's MessagePartPrimitive.InProgress is unchanged for callers; it now re-exports from core.Docs
1docsadd JSDoc for core runtime and assistant tool APIs
@assistant-ui/react@0.14.7patchGitHub →
@assistant-ui/react@0.14.6patchGitHub →
Fixes
3fixguard
navigator.clipboard availability and swallow write rejections in ActionBarPrimitive.Copy. Previously, copy clicks in SSR, non-HTTPS contexts, or older browsers without the Clipboard API threw a ReferenceError, and permission-denied rejections surfaced as unhandled promise rejections. The web copyToClipboard implementation in @assistant-ui/react now early-rejects when the API is unavailable, and useActionBarCopy in @assistant-ui/core silently absorbs the rejection so the rest of the UI is unaffected.fix
useExternalStoreRuntime no longer leaves phantom assistant siblings when the external store swaps a message id between syncs (e.g. AI SDK v6 useChat replacing a client-generated id with a server-provided id mid-stream, surfacing as BranchPicker showing 2/2 on a turn the user never branched). The messages-array sync path now diffs against the previous sync and removes ids that disappeared, matching the messageRepository path's snapshot semantics. Closes #4037.Refactors
1refactorhoist
MessagePartPrimitiveInProgress to @assistant-ui/core/react so @assistant-ui/react, @assistant-ui/react-ink, and other distributions can share the same implementation. @assistant-ui/react's MessagePartPrimitive.InProgress is unchanged for callers; it now re-exports from core.Docs
1docsadd React JSDoc and deprecation notices for primitive and tool APIs
Other
1miscfix thread initialization timing race which caused
scrollToBottomOnInitialize to fail in useLocalRuntime@assistant-ui/react-a2a@0.2.15patchGitHub →
Other
1miscUpdate link to a2a overview
@assistant-ui/react-ag-ui@0.0.31patchGitHub →
@assistant-ui/react-ink@0.0.17patchGitHub →
Features
8feat· react-inkadd StatusBarPrimitive components
feat· react-inkadd intra-line highlighting to DiffView replacement lines
feat· react-inkadd LoadingPrimitive for terminal loading states
feat· react-inkadd
Status sub-component for terminal-safe attachment status display, and fall back from extensionless filenames to the attachment type in Thumb.feat· react-inkadd ComposerPrimitive.Queue and QueueItemPrimitive (Text, Remove, Steer)
feat· react-inkadd ComposerPrimitive.Quote, QuoteText, and QuoteDismiss for terminal composer quote parity with
@assistant-ui/reactfeat· react-inkharden terminal pressable interactions
feat· react-inkadd
MessagePartPrimitive namespace with terminal-safe defaults for image, file, source, reasoning, and data parts.Fixes
1fix· react-inkguard
Pressable's onPress against the disabled prop independently of isFocused, so disabled reliably blocks key presses even when focus state and the prop disagree.@assistant-ui/react-ink-markdown@0.0.16patchGitHub →
Other
1misc@assistant-ui/[email protected]
@assistant-ui/react-langchain@0.0.7patchGitHub →
@assistant-ui/react-langgraph@0.14.1patchGitHub →
Features
1feat· react-langgraphtrack streaming timing via
useLangGraphStreamingTiming so useMessageTiming works on LangGraph assistant messages@assistant-ui/react-o11y@0.0.14patchGitHub →
Other
1misc@assistant-ui/[email protected]
@assistant-ui/react-opencode@0.2.1patchGitHub →
@assistant-ui/store@0.2.11patchGitHub →
Fixes
1fix· storekey
Derived scopes by {source, query} so a meta change produces a new client function in the same render pass. Previously a Derived whose query changed (e.g. MessageByIndexProvider whose index prop changed across renders) kept its underlying resource fiber, and the get closure was updated via tapEffectEvent — which lags one commit. During the in-flight render after a meta change, child consumers reading through the derived scope could resolve through the previous closure and read an index the underlying store no longer had. Hashing the meta into the tapResources key forces the fiber to be replaced when meta changes, so the new clientFunction (and the new get) propagates through React context immediately. Also drops the unused dynamic-meta variant (Derived({ getMeta })); use static source/query.Docs
1docsadd JSDoc for
useAui, useAuiState, useAuiEvent, AuiIf, and AuiProvider@assistant-ui/x-buildutils@0.0.8patchGitHub →
assistant-cloud@0.1.28patchGitHub →
assistant-stream@0.3.15patchGitHub →
Docs
1docsadd JSDoc for assistant stream tool definitions
assistant-ui@0.0.92patchGitHub →
Features
2featadd a local source override flag
--debug-source-root for local CLI template testingfeatresolve template UI components from the shared package source
Fixes
1fixvalidate create scaffold selector conflicts, respect package managers in add, and refresh CLI README examples
Docs
1docsrefresh assistant-ui skill examples with current model names
create-assistant-ui@0.0.55patchGitHub →
Other
1May 13, 2026
1 package
manual-release@0.14.2GitHub →
No notes.
May 7, 2026
30 packages
@assistant-ui/cloud-ai-sdk@0.1.14patchGitHub →
@assistant-ui/core@0.2.0minorGitHub →
@assistant-ui/mcp-docs-server@0.1.31patchGitHub →
@assistant-ui/react@0.14.0minorGitHub →
@assistant-ui/react-a2a@0.2.14patchGitHub →
Other
1misc@assistant-ui/[email protected]
@assistant-ui/react-ag-ui@0.0.29patchGitHub →
Other
1misc@assistant-ui/[email protected]
@assistant-ui/react-ai-sdk@1.3.23patchGitHub →
Other
1misc@assistant-ui/[email protected]
@assistant-ui/react-data-stream@0.12.13patchGitHub →
Other
1misc@assistant-ui/[email protected]
@assistant-ui/react-devtools@1.2.0patchGitHub →
Other
1misc@assistant-ui/[email protected]
@assistant-ui/react-google-adk@0.0.10patchGitHub →
Other
1misc@assistant-ui/[email protected]
@assistant-ui/react-hook-form@0.12.14patchGitHub →
Other
1misc@assistant-ui/[email protected]
@assistant-ui/react-ink@0.0.15patchGitHub →
Other
1misc@assistant-ui/[email protected]
@assistant-ui/react-ink-markdown@0.0.14patchGitHub →
Other
1misc@assistant-ui/[email protected]
@assistant-ui/react-langchain@0.0.6patchGitHub →
Other
1misc@assistant-ui/[email protected]
@assistant-ui/react-langgraph@0.14.0minorGitHub →
@assistant-ui/react-lexical@0.2.0patchGitHub →
Other
1misc@assistant-ui/[email protected]
@assistant-ui/react-markdown@0.14.0patchGitHub →
Other
1misc@assistant-ui/[email protected]
@assistant-ui/react-native@0.1.15patchGitHub →
Other
1misc@assistant-ui/[email protected]
@assistant-ui/react-o11y@0.0.13patchGitHub →
Other
1misc@assistant-ui/[email protected]
@assistant-ui/react-opencode@0.2.0patchGitHub →
@assistant-ui/react-streamdown@0.3.0patchGitHub →
Other
1misc@assistant-ui/[email protected]
@assistant-ui/react-syntax-highlighter@0.14.0patchGitHub →
Other
1misc@assistant-ui/[email protected]
@assistant-ui/store@0.2.10patchGitHub →
create-assistant-ui@0.0.54patchGitHub →
Other
1Apr 30, 2026
3 packages
Apr 29, 2026
19 packages
@assistant-ui/core@0.1.16patchGitHub →
Fixes
4fix· coreemit attachmentAddError when no adapter is configured or file type is rejected
fix· coreshow loading state for empty parts children API
@assistant-ui/react-google-adk@0.0.8patchGitHub →
@assistant-ui/react-hook-form@0.12.12patchGitHub →
@assistant-ui/react-ink@0.0.13patchGitHub →
Features
1feat· react-inkrewrite react-ink composer input into a cursor aware terminal editor
@assistant-ui/react-ink-markdown@0.0.12patchGitHub →
Other
1misc@assistant-ui/[email protected]
@assistant-ui/react-langchain@0.0.4patchGitHub →
@assistant-ui/react-langgraph@0.13.12patchGitHub →
@assistant-ui/react-o11y@0.0.12patchGitHub →
Other
1misc@assistant-ui/[email protected]
@assistant-ui/react-opencode@0.0.4patchGitHub →
pypi/assistant-stream@0.0.32GitHub →
First assistant-stream release published via this workflow.