Release history.
Every package release from the assistant-ui monorepo, grouped by day.
Jun 13, 2026
14 releases
>@assistant-ui/core@0.2.15add reasoningEffort to LanguageModelConfig4 changes
Features4
add reasoningEffort to LanguageModelConfig
approval options vocabulary on tool approvals.
ToolCallMessagePart.approval gains request-supplied options (machine-readable kinds allow-once / allow-always / reject-once / reject-always, open to _-prefixed custom kinds), a recorded optionId, and a terminal resolution ("cancelled" | "expired") for non-decision outcomes. respondToApproval additionally accepts { optionId }, resolved in core against the option's kind; custom kinds require an explicit approved. ExternalThread gains an onRespondToToolApproval callback. The kit approval bar renders supplied options with an opt-in confirmation step showing the grants an option would persist. Persistence stays host-owned.per-tool-call timing and stall detection.
ToolCallMessagePart gains a timing field ({ startedAt, completedAt? } in epoch ms), auto-populated by the assistant-stream accumulator at part start and result, and accepted on ThreadMessageLike for external-store hosts. New useToolCallElapsed hook returns the call's elapsed milliseconds, ticking once per second while running; unstable_useMessageStallDetection({ thresholdMs }) reports mid-run output stalls by watching a message content fingerprint. The kit ToolFallback trigger renders the duration when timing is present.>@assistant-ui/react@0.14.19precompile packages with React Compiler3 changes
Features3
approval options vocabulary on tool approvals.
ToolCallMessagePart.approval gains request-supplied options (machine-readable kinds allow-once / allow-always / reject-once / reject-always, open to _-prefixed custom kinds), a recorded optionId, and a terminal resolution ("cancelled" | "expired") for non-decision outcomes. respondToApproval additionally accepts { optionId }, resolved in core against the option's kind; custom kinds require an explicit approved. ExternalThread gains an onRespondToToolApproval callback. The kit approval bar renders supplied options with an opt-in confirmation step showing the grants an option would persist. Persistence stays host-owned.per-tool-call timing and stall detection.
ToolCallMessagePart gains a timing field ({ startedAt, completedAt? } in epoch ms), auto-populated by the assistant-stream accumulator at part start and result, and accepted on ThreadMessageLike for external-store hosts. New useToolCallElapsed hook returns the call's elapsed milliseconds, ticking once per second while running; unstable_useMessageStallDetection({ thresholdMs }) reports mid-run output stalls by watching a message content fingerprint. The kit ToolFallback trigger renders the duration when timing is present.>@assistant-ui/react-ag-ui@0.0.39accept any AbstractAgent in useAgUiRuntime instead of requiring HttpAgent4 changes
Features2
forward the full ExternalStoreThreadListAdapter (threads, archivedThreads, onRename, onArchive, ...) through adapters.threadList so server-persisted threads can be registered and switched to; clear messages before onSwitchToThread so the previous thread's messages no longer merge in as a phantom sibling branch; onSwitchToThread can return unstable_resume to reattach to an in-flight run after switching (resumes in the background and requires a ThreadHistoryAdapter with resume, otherwise it reports through onError instead of re-running the agent)
Fixes2
keep failed and aborted runs visible. the synthetic RUN_FINISHED from onRunFinalized used to overwrite RUN_ERROR with a successful status, so failed runs rendered as complete and MessagePrimitive.Error never showed. aborts (which @ag-ui/client routes through onRunFailed) now map to RUN_CANCELLED instead of RUN_ERROR, so the run lands as incomplete/cancelled.
>@assistant-ui/react-devtools@1.2.5precompile packages with React Compiler1 change
>@assistant-ui/react-ink@0.0.26precompile packages with React Compiler1 change
>@assistant-ui/react-mcp@0.0.11precompile packages with React Compiler1 change
>@assistant-ui/react-native@0.1.24precompile packages with React Compiler3 changes
Features3
approval options vocabulary on tool approvals.
ToolCallMessagePart.approval gains request-supplied options (machine-readable kinds allow-once / allow-always / reject-once / reject-always, open to _-prefixed custom kinds), a recorded optionId, and a terminal resolution ("cancelled" | "expired") for non-decision outcomes. respondToApproval additionally accepts { optionId }, resolved in core against the option's kind; custom kinds require an explicit approved. ExternalThread gains an onRespondToToolApproval callback. The kit approval bar renders supplied options with an opt-in confirmation step showing the grants an option would persist. Persistence stays host-owned.per-tool-call timing and stall detection.
ToolCallMessagePart gains a timing field ({ startedAt, completedAt? } in epoch ms), auto-populated by the assistant-stream accumulator at part start and result, and accepted on ThreadMessageLike for external-store hosts. New useToolCallElapsed hook returns the call's elapsed milliseconds, ticking once per second while running; unstable_useMessageStallDetection({ thresholdMs }) reports mid-run output stalls by watching a message content fingerprint. The kit ToolFallback trigger renders the duration when timing is present.>@assistant-ui/react-o11y@0.0.22precompile packages with React Compiler1 change
>@assistant-ui/react-pi@0.0.2initial @assistant-ui/react-pi MVP — a Pi coding-agent runtime adapter1 change
Features1
initial
@assistant-ui/react-pi MVP — a Pi coding-agent runtime adapter>@assistant-ui/store@0.2.17precompile packages with React Compiler1 change
>@assistant-ui/tap@0.8.1precompile packages with React Compiler2 changes
>@assistant-ui/x-buildutils@0.0.13precompile packages with React Compiler1 change
>assistant-stream@0.3.22per-tool-call timing and stall detection. ToolCallMessagePart gains a timing field ({ startedAt, completedAt? } in epoch ms), auto-populated by the assistant-stream accumulator at part start and result, and accepted on ThreadMessageLike for external-store hosts. New useToolCallElapsed hook returns the call's elapsed milliseconds, ticking once per second while running; unstableuseMessageStallDetection({ thresholdMs }) reports mid-run output stalls by watching a message content fingerprint. The kit ToolFallback trigger renders the duration when timing is present.1 change
Features1
per-tool-call timing and stall detection.
ToolCallMessagePart gains a timing field ({ startedAt, completedAt? } in epoch ms), auto-populated by the assistant-stream accumulator at part start and result, and accepted on ThreadMessageLike for external-store hosts. New useToolCallElapsed hook returns the call's elapsed milliseconds, ticking once per second while running; unstable_useMessageStallDetection({ thresholdMs }) reports mid-run output stalls by watching a message content fingerprint. The kit ToolFallback trigger renders the duration when timing is present.>1 maintenance releasedependency updates and chores
>@assistant-ui/react-ink-markdown@0.0.25@assistant-ui/core@0.2.151 change
Other1
@assistant-ui/core@0.2.15
Jun 12, 2026
20 releases
>@assistant-ui/core@0.2.14branch switching for the ExternalThread client6 changes
>@assistant-ui/next@0.0.6give each "use generative" module a distinct bundler-redirect identity so two toolkits in one app no longer collide under next dev1 change
Fixes1
give each
"use generative" module a distinct bundler-redirect identity so two toolkits in one app no longer collide under next dev>@assistant-ui/react@0.14.18unstableuseComposerInputHistory8 changes
>@assistant-ui/react-ag-ui@0.0.38restore multimodal user input (image, audio, video, document, and legacy binary parts) as attachments in fromAgUiMessages, so persisted conversations reload attachments instead of dropping them and re-send them on the next run1 change
Features1
>@assistant-ui/react-ai-sdk@1.3.35attach partial-JSON meta to streaming tool args so consumers can tell which field is still mid-arrival1 change
Fixes1
>@assistant-ui/react-generative-ui@0.0.4hold back nodes whose $type is still streaming instead of reporting them as unknown components1 change
Fixes1
>@assistant-ui/react-hook-form@0.12.19replace deprecated useAssistantToolUI with the tools client API1 change
>@assistant-ui/react-ink@0.0.25reword the useNotification JSDoc from "pauses for human approval" to "pauses for user input"; the needs-input trigger fires on requires-action with reason interrupt, not on tool approval gates2 changes
Docs1
>@assistant-ui/react-markdown@0.14.3opt-in defer prop on the markdown text primitives2 changes
>@assistant-ui/react-opencode@0.2.7re-sync thread history, session status, and pending permissions/questions after the event stream reconnects, so events lost while disconnected (e.g. session.idle or permission.asked) cannot leave isRunning stuck or deadlock a run2 changes
Fixes2
react-opencode
>@assistant-ui/react-streamdown@0.3.3opt-in defer prop on the markdown text primitives2 changes
>@assistant-ui/store@0.2.16host the assistant client with useTapHost so the tap commit runs in the passive phase (no paint blocking); AuiProvider mounts the host's commit effects ahead of its children's effects2 changes
Features1
>@assistant-ui/tap@0.7.1add useTapHost, a React host that commits the resource in the passive phase without blocking paint; the returned per-render effects callback lets descendant consumers mount the commit ahead of their own effects via useEffect(effects). The React bridge hosts (useResource, useResources, useTapRoot) now also commit in useEffect instead of useLayoutEffect.2 changes
Features1
add useTapHost, a React host that commits the resource in the passive phase without blocking paint; the returned per-render effects callback lets descendant consumers mount the commit ahead of their own effects via useEffect(effects). The React bridge hosts (useResource, useResources, useTapRoot) now also commit in useEffect instead of useLayoutEffect.
Fixes1
match React semantics: support render-phase updates (setState during render re-renders before committing, capped at 25 passes, instead of throwing; discarded render attempts drop their render-phase dispatches like React; updating a resource other than the one currently rendering throws), apply dispatches exactly once across React-discarded and replayed renders of tap sub-roots, run all effect cleanups before any setups within a commit, and compare only the common prefix of deps arrays that change length (with a dev warning)
>assistant-ui@0.0.100teach defineToolkit instead of deprecated makeAssistantToolUI in the assistant-ui skill1 change
Docs1
>6 maintenance releasesdependency updates and chores
>@assistant-ui/react-devtools@1.2.4update @assistant-ui/tap dependency ranges to ^0.7.01 change
>@assistant-ui/react-ink-markdown@0.0.24@assistant-ui/core@0.2.141 change
Other1
@assistant-ui/core@0.2.14
>@assistant-ui/react-mcp@0.0.10@assistant-ui/core@0.2.141 change
Other1
@assistant-ui/core@0.2.14
>@assistant-ui/react-native@0.1.23update @assistant-ui/tap dependency ranges to ^0.7.01 change
>@assistant-ui/react-o11y@0.0.21@assistant-ui/store@0.2.161 change
Other1
@assistant-ui/store@0.2.16
>create-assistant-ui@0.0.63assistant-ui@0.0.1001 change
Other1
assistant-ui@0.0.100
Jun 9, 2026
6 releases
>@assistant-ui/gorp@0.0.2add gorp state-sync primitives1 change
>@assistant-ui/tap@0.6.1keep the tap React shim compatible with React 18 builds1 change
>4 maintenance releasesdependency updates and chores
>@assistant-ui/core@0.2.12@assistant-ui/tap@0.6.11 change
Other1
@assistant-ui/tap@0.6.1
>@assistant-ui/react@0.14.16@assistant-ui/core@0.2.121 change
Other1
@assistant-ui/core@0.2.12
>@assistant-ui/react-mcp@0.0.8@assistant-ui/tap@0.6.11 change
Other1
@assistant-ui/tap@0.6.1
>@assistant-ui/react-o11y@0.0.19@assistant-ui/tap@0.6.11 change
Other1
@assistant-ui/tap@0.6.1
Jun 8, 2026
38 releases
>@assistant-ui/core@0.2.11expose joinStrategy on useAISDKRuntime / useChatRuntime8 changes
Features5
Fixes2
make
SimpleTextAttachmentAdapter and SimpleImageAttachmentAdapter work without FileReader. they read files via the browser only FileReader, so sending an attachment in a non browser runtime (e.g. @assistant-ui/react-ink in a terminal) threw ReferenceError: FileReader is not defined. the adapters now feature detect: they keep using FileReader when it exists (browser, and React Native whose Blob polyfill provides it) and fall back to file.text / file.arrayBuffer in Node. output is byte identical across all three environments, so @assistant-ui/react, @assistant-ui/react-native, and @assistant-ui/react-ink all keep re-exporting the same core implementation.>@assistant-ui/metro@0.0.2merge toolkits across "use generative" files and allow a bare defineMcpToolkit default export4 changes
>@assistant-ui/next@0.0.5rename hitlTool to humanTool while keeping deprecated compatibility aliases3 changes
>@assistant-ui/react@0.14.15message queuing for external-store, langgraph, and local runtimes7 changes
>@assistant-ui/react-ag-ui@0.0.36consume ACTIVITYSNAPSHOT events to support MCP Apps on the AG-UI runtime5 changes
Features3
consume ACTIVITY_SNAPSHOT events to support MCP Apps on the AG-UI runtime
export
fromAgUiMessages from the package root>@assistant-ui/react-ai-sdk@1.3.33expose joinStrategy on useAISDKRuntime / useChatRuntime5 changes
Fixes2
react-ai-sdk
react-ai-sdk
make the package root bundle on edge, cloudflare workers, deno, and browsers, not just react native. the node-only stdio MCP transport is now resolved through a package.json "imports" condition (
#mcp-stdio), so importing @assistant-ui/react-ai-sdk at root carries the full server toolkit on every target with http/sse MCP working on edge, while stdio MCP throws a clear runtime error only where a subprocess cannot be spawned (browser, react native, edge, workers) instead of breaking the build via @ai-sdk/mcp/mcp-stdio -> node:child_process. node, bun, and deno keep the real stdio transport.Chores2
>@assistant-ui/react-devtools@1.2.3surface full tool metadata (type, provider id, MCP server, providerOptions, deferred-results, backend defaults) in the devtools model context, and redact credentials (apiKey, authorization headers, tokens, MCP server headers/env) at the serializer boundary before they cross the postMessage bridge4 changes
Features2
surface full tool metadata (type, provider id, MCP server, providerOptions, deferred-results, backend defaults) in the devtools model context, and redact credentials (apiKey, authorization headers, tokens, MCP server headers/env) at the serializer boundary before they cross the postMessage bridge
Chores2
>@assistant-ui/react-ink@0.0.24add externalTool for render-only generative toolkit entries6 changes
Features3
defineToolkit and the tool markers (hitlTool / stubTool / providerTool) now have runtime implementations in @assistant-ui/react-ink, so Ink apps author tools with the same defineToolkit API (and typed args) as the web. An Ink app runs in a single Node process with no client/server boundary, so there is nothing for the "use generative" compiler to split: defineToolkit resolves each tool's type at runtime and no build step is required.Fixes2
react-ink
block Enter submission while the thread is running unless the runtime supports queueing.
ComposerInput called composer.send unconditionally, so pressing Enter mid-run interrupted the active stream even on runtimes with capabilities.queue: false. It now applies the same gate as the web ComposerInput (isRunning && !capabilities.queue no-ops, keeping the typed text). The onSubmit override path is unaffected; apps using it own their submit behavior.>@assistant-ui/react-langgraph@0.14.7message queuing for external-store, langgraph, and local runtimes4 changes
Fixes2
>@assistant-ui/react-native@0.1.22add externalTool for render-only generative toolkit entries4 changes
Features2
>@assistant-ui/store@0.2.14rename the client composition and event hooks to the use convention to match the tap resource API: tapClientResource -> useClientResource, tapClientLookup -> useClientLookup, tapClientList -> useClientList, tapAssistantClientRef -> useAssistantClientRef, tapAssistantEmit -> useAssistantEmit.2 changes
Refactors1
rename the client composition and event hooks to the
use* convention to match the tap resource API: tapClientResource -> useClientResource, tapClientLookup -> useClientLookup, tapClientList -> useClientList, tapAssistantClientRef -> useAssistantClientRef, tapAssistantEmit -> useAssistantEmit.>@assistant-ui/tap@0.6.0MinorReact integration2 changes
>@assistant-ui/vite@0.0.4rename hitlTool to humanTool while keeping deprecated compatibility aliases2 changes
>@assistant-ui/x-buildutils@0.0.12omit onSuccess instead of passing undefined so the tsdown config type-checks under exactOptionalPropertyTypes2 changes
>@assistant-ui/x-generative-compiler@0.0.4check the generative compiler version against the core package compatibility range7 changes
>23 maintenance releasesdependency updates and chores
>@assistant-ui/agent-launcher@0.1.6update dependencies1 change
>@assistant-ui/cloud-ai-sdk@0.1.20update dependencies1 change
>@assistant-ui/mcp-docs-server@0.1.34update dependencies1 change
>@assistant-ui/react-a2a@0.2.19update dependencies1 change
>@assistant-ui/react-data-stream@0.12.17update dependencies1 change
>@assistant-ui/react-generative-ui@0.0.3update dependencies1 change
>@assistant-ui/react-google-adk@0.0.15update dependencies1 change
>@assistant-ui/react-hook-form@0.12.18update dependencies1 change
>@assistant-ui/react-ink-markdown@0.0.23update dependencies1 change
>@assistant-ui/react-langchain@0.0.13update dependencies1 change
>@assistant-ui/react-lexical@0.2.3update dependencies1 change
>@assistant-ui/react-markdown@0.14.2update dependencies1 change
>@assistant-ui/react-mcp@0.0.7update dependencies1 change
>@assistant-ui/react-o11y@0.0.18update dependencies1 change
>@assistant-ui/react-opencode@0.2.6update dependencies1 change
>@assistant-ui/react-streamdown@0.3.2update dependencies1 change
>@assistant-ui/react-syntax-highlighter@0.14.2update dependencies1 change
>assistant-cloud@0.1.32update dependencies1 change
>assistant-stream@0.3.21update dependencies1 change
>assistant-ui@0.0.99update dependencies1 change
>create-assistant-ui@0.0.62assistant-ui@0.0.991 change
Other1
assistant-ui@0.0.99
>heat-graph@0.0.11update dependencies1 change
>safe-content-frame@0.0.21update dependencies1 change
Jun 1, 2026
12 releases
>@assistant-ui/core@0.2.9add 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.2 changes
Features2
add 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.move 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.3add @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 file3 changes
Features3
move 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.13add 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.2 changes
Features2
add 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.move 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.22move 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.1 change
Features1
move 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-native@0.1.20move 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.1 change
Features1
move 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.2add @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.1 change
Features1
add @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.2extract 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.1 change
Features1
>assistant-stream@0.3.19add 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.1 change
Features1
add 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.97prompt 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.1 change
Features1
prompt 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.>3 maintenance releasesdependency updates and chores
>@assistant-ui/react-ink-markdown@0.0.21@assistant-ui/core@0.2.91 change
Other1
@assistant-ui/core@0.2.9
>@assistant-ui/react-mcp@0.0.5assistant-stream@0.3.191 change
Other1
assistant-stream@0.3.19
>create-assistant-ui@0.0.60assistant-ui@0.0.971 change
Other1
assistant-ui@0.0.97
May 31, 2026
1 release
>@assistant-ui/next@0.0.2add @assistant-ui/next — the withAui Next.js config wrapper, the defineToolkit authoring helper, and the compiler for the "use generative" directive that colocates a tool's schema, server-only execute, and client-only render in one file2 changes
Features1
May 27, 2026
17 releases
>@assistant-ui/core@0.2.7detect and diagnose duplicate @assistant-ui/core installs2 changes
Features2
core
build 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@0.0.95detect and diagnose duplicate @assistant-ui/core installs1 change
>15 maintenance releasesdependency updates and chores
>@assistant-ui/cloud-ai-sdk@0.1.17update dependencies1 change
>@assistant-ui/react@0.14.11drop tracker-behaviour explainer comments left behind in satellite runtimes1 change
Chores1
>@assistant-ui/react-ag-ui@0.0.33drop tracker-behaviour explainer comments left behind in satellite runtimes1 change
Chores1
>@assistant-ui/react-ai-sdk@1.3.30drop tracker-behaviour explainer comments left behind in satellite runtimes1 change
Chores1
>@assistant-ui/react-google-adk@0.0.12drop tracker-behaviour explainer comments left behind in satellite runtimes1 change
Chores1
>@assistant-ui/react-hook-form@0.12.16update dependencies1 change
>@assistant-ui/react-ink@0.0.20update dependencies1 change
>@assistant-ui/react-ink-markdown@0.0.19update dependencies1 change
>@assistant-ui/react-langchain@0.0.10drop tracker-behaviour explainer comments left behind in satellite runtimes1 change
Chores1
>@assistant-ui/react-langgraph@0.14.4drop tracker-behaviour explainer comments left behind in satellite runtimes1 change
Chores1
>@assistant-ui/react-mcp@0.0.3@assistant-ui/core@0.2.71 change
Other1
@assistant-ui/core@0.2.7
>@assistant-ui/react-o11y@0.0.16@assistant-ui/tap@0.5.131 change
Other1
@assistant-ui/tap@0.5.13
>@assistant-ui/react-opencode@0.2.3update dependencies1 change
>@assistant-ui/tap@0.5.13stabilize flaky StrictMode setTimeout rerender test on slow CI1 change
>create-assistant-ui@0.0.58assistant-ui@0.0.951 change
Other1
assistant-ui@0.0.95
May 26, 2026
10 releases
>@assistant-ui/core@0.2.6simplify MessagePrimitive.GroupedParts API and add groupPartByType helper.2 changes
Features2
surface 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.9simplify MessagePrimitive.GroupedParts API and add groupPartByType helper.2 changes
Features2
surface 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.28surface 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.1 change
Features1
surface 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.19surface 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.1 change
Features1
surface 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-native@0.1.18simplify MessagePrimitive.GroupedParts API and add groupPartByType helper.2 changes
Features2
surface 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.17preserve parentId on streamed text and reasoning parts1 change
Fixes1
preserve parentId on streamed text and reasoning parts
>4 maintenance releasesdependency updates and chores
>@assistant-ui/react-ink-markdown@0.0.18@assistant-ui/core@0.2.61 change
Other1
@assistant-ui/core@0.2.6
>@assistant-ui/react-mcp@0.0.2@assistant-ui/core@0.2.61 change
Other1
@assistant-ui/core@0.2.6
>assistant-ui@0.0.94drop with-parent-id-grouping from the --example list. the example demonstrated MessagePrimitive.UnstablePartsGroupedByParentId, 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 searchweb tool in the same example. npx assistant-ui create -e with-parent-id-grouping will no longer resolve.1 change
Chores1
cli
drop
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.57assistant-ui@0.0.941 change
Other1
assistant-ui@0.0.94