unstale

npm / @assistant-ui/react

@assistant-ui/react

What changed in @assistant-ui/react 0.11 to 0.15, from its official release notes, upgrade guides and advisories. Sources checked 2026-10-17.

79 breaking2 security20 deprecations159 new APIs and options1 performance37 behavior and defaults1 tooling156 fixes and other

See which of these apply to your code, ranked, in your agent:

npx @unstale/cli init

@unstale/cli 0.1.1 on npm

@assistant-ui/react 0.15207 changes

Breaking changes 26

  • Disposing a frame immediately tells its parent it is gone, causing waiting tool calls to be rejected instead of timing out after 30 seconds.

    0.15.26release notes

  • Attachment rendering now includes still-uploading attachments, so renderers receive Attachment rather than CompleteAttachment.

    0.15.22release notes

  • The runtime state returned by ThreadRuntime.getState() now has a named exported type.

    0.15.22release notes

  • @assistant-ui/core now requires assistant-cloud version 0.2.0 or newer.

    0.15.19release notes

  • The function now returns a promise that rejects when the runtime cannot record the response, leaving refused requests retryable.

    0.15.18release notes

  • Moves useAssistantTransportRuntime into core/react, changing the package location developers use to import it.

    0.15.15release notes

  • The Assistant augmentation namespace moved from @assistant-ui/react into @assistant-ui/core, so imports may need updating.

    0.15.13release notes

  • ExternalThread moved from @assistant-ui/react into @assistant-ui/core, so imports may need updating.

    0.15.13release notes

  • SingleThreadList moved from @assistant-ui/react into @assistant-ui/core, so imports may need updating.

    0.15.13release notes

  • ExternalThread edit composer now reads editing state live; same-tick beginEdit + setText + send dispatches the edit, while invalid send and duplicate beginEdit throw.

    0.15.11release notes

  • beginEdit now fails fast when no edit handler is configured.

    0.15.10release notes

  • Unchanged edits now resend the message on a new branch instead of silently closing the composer.

    0.15.9release notes

  • AuiConfig(...) creates branded configurations accepted by AuiProvider, including top-level and nested client scopes.

    0.15.5release notes

  • Nested providers must pass extends with a client to extend or null to isolate; empty configs extend the parent client.

    0.15.5release notes

  • ExternalThreadQueueAdapter clear(reason) is removed; queue clearing policy is host-owned.

    0.15.5release notes

  • edit is now required on ExternalThreadQueueAdapter.

    0.15.5release notes

  • ExternalThreadQueueAdapter enqueue no longer accepts steer options; steering is a separate operation.

    0.15.5release notes

  • move is now required on ExternalThreadQueueAdapter.

    0.15.5release notes

  • QueueItemState.parts is now required.

    0.15.5release notes

  • ExternalThreadQueueAdapter steer(queueItemId) is replaced by move with a steer lane and null insertion point.

    0.15.5release notes

  • steerItems is now required on ExternalThreadQueueAdapter.

    0.15.5release notes

  • Custom resources must return a stable object identity to avoid repeated refetches and loadingFallback during re-renders.

    0.15.3release notes

  • Unavailable scopes no longer throw during selection; check availability through source before reading other properties or calling.

    0.15.0release notes

  • The mcp-app group key was removed; use standalone-tool-call instead.

    0.15.0release notes

  • The component-only ToolsState.tools map was removed; use toolUIs instead.

    0.15.0release notes

  • Legacy context hooks deprecated in v0.12/v0.14 were removed; use useAui or useAuiState instead.

    0.15.0release notes

Security 1

  • MCP App resource CSP metadata is enforced inside widget frames.

    0.15.26release notes

Deprecations 12

  • The Unstable_TriggerPopover aliases are now struck through as deprecated in TypeScript.

    0.15.26release notes

  • Experimental APIs are marked deprecated since their experimental date so editors strike them through and no-deprecated checks report them.

    0.15.26release notes

  • The unused history adapter option on useAssistantTransportRuntime is deprecated.

    0.15.22release notes

  • ThreadState remains a runtime-state alias for now but is deprecated ahead of its store-state meaning in 0.16.

    0.15.22release notes

  • Primitive.Empty is deprecated on react-native and react-ink in favor of AuiIf.

    0.15.16release notes

  • Primitive.If is deprecated on react-native and react-ink in favor of AuiIf.

    0.15.16release notes

  • Deprecated in favor of threads.selectionChanged, which also covers selection changes previously missed by the switched events.

    0.15.15release notes

  • Deprecated in favor of threads.selectionChanged, which also covers selection changes previously missed by the switched events.

    0.15.15release notes

  • The value prop is deprecated and now exposes a new client extending the given one rather than the exact instance.

    0.15.5release notes

  • The useAui extension overload is deprecated.

    0.15.5release notes

  • Audio message parts are deprecated in favor of file parts with an audio/* MIME type.

    0.15.3release notes

  • Nullary scope accessors are now properties; calling them still works but is deprecated.

    0.15.0release notes

New APIs and options 51

  • Adds an adapter for direct browser voice sessions with streamed transcripts, typed input, mute controls, and cancellable WebRTC setup.

    0.15.29release notes

  • Tool approvals can ask multiple questions or allow multiple answers, with validation and recorded answers exposed to response handlers and converters.

    0.15.25release notes

  • Long threads can be virtualized per part using stable thread rows, reducing rerenders while tokens stream and enabling turn-duration footers.

    0.15.25release notes

  • Threads can open on their latest page and load older messages on demand through external-store, runtime, primitive, and React Native APIs.

    0.15.25release notes

  • Converter metadata can be invalidated at message scope.

    0.15.25release notes

  • Reasoning parts now expose optional start and end timing, enabling hosts and grouped parts to show agent thinking duration.

    0.15.25release notes

  • Visible component action settle delays can be configured.

    0.15.25release notes

  • The package now re-exports MessageRole, RunConfig, RuntimeCapabilities, RemoteThreadListOptions, ThreadsState, JoinStrategy, title adapters, and ChainOfThoughtPartByIndexProvider.

    0.15.22release notes

  • The package now re-exports additional runtime, voice, tool, generative UI, message queue, and cloud thread list APIs.

    0.15.22release notes

  • The package now re-exports voice, cloud thread list, generative UI, runtime state, and adapter types.

    0.15.22release notes

  • CloudRendererHost can render stored conversations in the Assistant Cloud dashboard using the app's components.

    0.15.22release notes

  • Voice sessions can accept typed text through sendText, committing it as a typed turn.

    0.15.22release notes

  • Recorded tool interactions are kept on the part and stored in cloud history.

    0.15.22release notes

  • External stores receive recorded tool interactions through a new callback.

    0.15.22release notes

  • Tool UIs can record user actions on tool calls, with records persisted according to the runtime or external store.

    0.15.22release notes

  • useAssistantTransportRuntime accepts cloud, enabling Assistant Cloud thread lists and cloud thread IDs on requests.

    0.15.22release notes

  • VoiceSessionState exposes canSendText so composers can determine whether typed text is accepted.

    0.15.22release notes

  • An opt-in cache preserves unchanged ThreadMessage objects across calls, avoiding rebuilds for nested streamed transcripts.

    0.15.20release notes

  • Voice transcript messages are marked with metadata.modality.

    0.15.20release notes

  • Cloud files now provide a presigned download URL generator.

    0.15.19release notes

  • Custom scores can now be created through cloud.scores.create.

    0.15.19release notes

  • CloudAPIError now exposes an error code, including plan_limit_reached for a 402 response.

    0.15.19release notes

  • CloudAPIError now exposes structured error details.

    0.15.19release notes

  • A createRunReport builder assembles expanded Assistant Cloud run report bodies for the runtime and cloud SDK.

    0.15.19release notes

  • Engagement events are batched without message content, and telemetry.events: false opts out.

    0.15.19release notes

  • Upload responses now include the object key.

    0.15.19release notes

  • useCloudChat now exposes message feedback alongside the assistant-ui FeedbackAdapter.

    0.15.19release notes

  • Trace metadata can be applied so browser reports and server spans merge into one run.

    0.15.19release notes

  • Renderer options can now be resolved per part, including host context, display-related fallbacks, sandbox, host information, and handlers.

    0.15.18release notes

  • Sandboxed frames that never finish loading are reported through onError with re-exported error types.

    0.15.18release notes

  • Sandboxed frames that never finish loading are reported through onError with re-exported error types.

    0.15.18release notes

  • Approval requests can describe their prompt, display mode, and freeform-answer support so renderers can distinguish questions from permission gates.

    0.15.18release notes

  • Tool approval responses can include a text answer, resolving the request as answered rather than approved.

    0.15.18release notes

  • Adds a provider for publishing frontend tools to a WebMCP-capable browser.

    0.15.18release notes

  • createSuggestionAdapter and its option types are exported from the distribution packages.

    0.15.17release notes

  • Adds a remote thread-list store entry that lets AssistantClient hosts run remote thread lists using an adapter and thread factory.

    0.15.15release notes

  • Adds unstable_useAdapters so RemoteThreadList can load per-thread history without rendering unstable_Provider.

    0.15.15release notes

  • Adds a selectionChanged event carrying threadId and previousThreadId for thread-selection changes.

    0.15.15release notes

  • ThreadSuggestion gains an optional label, allowing adapters to display a separate label while preserving the full prompt.

    0.15.15release notes

  • ThreadSuggestion gains an optional title so adapters can display a short pill while sending the full prompt.

    0.15.15release notes

  • Moves useCloudThreadListRuntime into core/react and removes the unused React copy of the aui/v0 codec.

    0.15.15release notes

  • ExternalThread can wire threads.reloadMainThread() through onRefetchThread, with refetchThread capability derived from the callback’s presence.

    0.15.14release notes

  • ExternalThread now supports feedback adapters.

    0.15.9release notes

  • ExternalThread now supports speech synthesis adapters.

    0.15.9release notes

  • AssistantRuntimeProvider accepts an optional config prop whose scopes are provided alongside the runtime scope.

    0.15.5release notes

  • The ref prop exposes the resulting client.

    0.15.5release notes

  • Decoders and the state accumulator support opt-in strict: false mode to reconcile malformed stream input instead of throwing.

    0.15.4release notes

  • File message parts can opt in to source types so attachment adapters can send URL or ID file references.

    0.15.3release notes

  • Thread list rows can determine whether their own thread is running, including background runs.

    0.15.3release notes

  • Runtimes that keep background threads alive can report per-thread running state through a new optional runtime method.

    0.15.3release notes

  • The open thread's remote state can be refetched in place.

    0.15.3release notes

Performance 1

  • Sparse suggestion lists are compacted before per-suggestion lookup.

    0.15.19release notes

Behavior and default changes 17

  • MCP App ui/initialize parameters, including declared display modes, are passed to onInitialized as McpAppInitializeParams.

    0.15.27release notes

  • Composer trigger popover primitives and related types receive stable names, while Unstable_ names remain deprecated aliases.

    0.15.25release notes

  • Tool execution and model output use successful Standard Schema output while preserving original arguments for validation errors and stored calls.

    0.15.22release notes

  • thread.tasks is derived from tool calls carrying nested conversations, with a task scope.

    0.15.20release notes

  • Anonymous threads can move into an authenticated Assistant Cloud workspace after sign-in.

    0.15.19release notes

  • The store now emits composer, message, and thread events consumed by engagement reporting.

    0.15.19release notes

  • The default handler accepts MCP Apps { role, content } parameters and appends text blocks in order, while preserving legacy result fields.

    0.15.18release notes

  • Rejected sendMessage results now include the MCP Apps isError: true field while retaining legacy ok and reason fields.

    0.15.18release notes

  • Assistant frame messaging now defaults to the current origin.

    0.15.17release notes

  • Trigger popovers can override query matching.

    0.15.17release notes

  • When configured with cloud, AISDKThreads uses RemoteThreadList and remounts each thread like useChatRuntime.

    0.15.15release notes

  • Selection-driven scrolling now engages for InMemoryThreadList changes, new threads, and resolved deep links.

    0.15.15release notes

  • App-authored reasoning summaries are now preserved on message parts.

    0.15.9release notes

  • Custom children are rendered and asChild is supported instead of always replacing content with an automatic label.

    0.15.5release notes

  • Message queues now use two lanes, placement awareness, and steer-by-default mid-run sends.

    0.15.5release notes

  • Accessor identity is stable across renders until a structural binding change, making accessor-keyed memoization invalidate precisely.

    0.15.0release notes

  • Scope accessors expose source, query, and name selection metadata as properties, reserving those names for scope methods.

    0.15.0release notes

Fixes and other changes 99

  • Selections made before an active thread change are ignored so files do not enter the replacement conversation.

    0.15.29release notes

  • Runs no longer move focus into the composer when focus starts outside the thread, while preserving the existing composer selection.

    0.15.29release notes

  • Frame tools and pending calls are cleared when the iframe document changes or reloads.

    0.15.29release notes

  • Pending attachment selections are preserved when unrelated assistant scopes change.

    0.15.29release notes

  • Sparse MCP Apps message content is handled without scanning array holes.

    0.15.29release notes

  • Disposes the host when its iframe is removed, rejects pending calls immediately, removes tools from model context, and serves a newly mounted iframe.

    0.15.29release notes

  • On React 18, inert composers now render the inert attribute so the cancel focus loop skips them as on React 19.

    0.15.28release notes

  • Typing, attachments, sends, and message editing are blocked while a thread is disabled.

    0.15.27release notes

  • MCP Apps are rendered through ToolUIDisplay across Parts, grouped, native, and ink rendering modes.

    0.15.26release notes

  • Grouped message parts are rendered through the core part renderer, keeping rendering behavior aligned with core.

    0.15.26release notes

  • Layout effects no longer cause React 18 server-render warnings while client layout timing remains unchanged.

    0.15.26release notes

  • The scroll-to-bottom control now appears after a wheel interrupts smooth scrolling.

    0.15.26release notes

  • The selection toolbar now appears after a window blur and when a selection ends at offset zero at the start of the next message.

    0.15.26release notes

  • Cancelling a message edit with Escape or keyboard or assistive-technology activation restores focus to the thread composer.

    0.15.26release notes

  • The thread viewport follows content that grows without DOM changes and updates isAtBottom so the scroll-to-bottom button can appear.

    0.15.26release notes

  • The viewport stops following the thread bottom when a user expands a disclosure inside a message, keeping the opened card in view.

    0.15.26release notes

  • User scrolls coalesced with programmatic bottom scrolling are now recognized correctly.

    0.15.26release notes

  • Streaming text, tool durations, and stall detection no longer read wall-clock time during render, allowing cacheComponents prerendering.

    0.15.25release notes

  • Cancelled and pre-load failed sandbox frame renders are cleaned up correctly.

    0.15.25release notes

  • Enter or Escape ending an IME composition is ignored, preventing Safari conversion commits from sending messages and cancellations from cancelling runs or stopping read-aloud.

    0.15.24release notes

  • Message parts are keyed by id when same-type parts do not share it, preventing replaced or reordered parts from retaining another part's component state.

    0.15.24release notes

  • Scopes Escape-triggered speech cancellation to the targeted thread.

    0.15.23release notes

  • Honors user={false}, assistant={false}, and system={false} by migrating them to matching AuiIf inequalities.

    0.15.23release notes

  • Modified arrow keys remain available to application shortcuts while ordinary thread-list focus navigation is preserved.

    0.15.23release notes

  • Publishes committed WebMCP tool implementations before layout effects.

    0.15.23release notes

  • Component, tool, and data-part registries only resolve own keys, preventing inherited Object.prototype names from rendering.

    0.15.22release notes

  • Disabled attachment dropzones no longer navigate to dropped files or retain drag state.

    0.15.22release notes

  • The download anchor is attached to the document so Firefox starts Markdown downloads.

    0.15.22release notes

  • Feedback submission state is now exposed to assistive technology.

    0.15.22release notes

  • Native MessageContent and grouped parts now honor registered data-part fallbacks.

    0.15.22release notes

  • Without cloud, this environment variable selects Assistant Cloud for useAssistantTransportRuntime, matching useLocalRuntime.

    0.15.22release notes

  • The transport request body is now typed, and threadId is an optional string rather than string | null.

    0.15.22release notes

  • Read-only threads report themselves disabled, disable their composer, and ignore composer input instead of throwing.

    0.15.22release notes

  • Typed turns in voice sessions retain their own modality and are no longer persisted as spoken messages.

    0.15.22release notes

  • Bottom following now resumes when auto-scroll is enabled at runtime.

    0.15.21release notes

  • Pending animation frames are canceled during teardown and between selection events.

    0.15.21release notes

  • Pending frame tool calls are settled when cancellation fails.

    0.15.20release notes

  • Scroll listeners continue receiving notifications after one listener fails.

    0.15.20release notes

  • MCP App bridge messages stop after disposal.

    0.15.19release notes

  • Flat mention items are ignored when categories is an empty list.

    0.15.19release notes

  • Message part text now renders inside the supplied render element.

    0.15.19release notes

  • Explicit render elements now control message part text rendering.

    0.15.19release notes

  • Stall detection resets when content changes without changing its length.

    0.15.19release notes

  • Every part renderer option is forwarded through MessagePrimitive.Parts, preserving data renderers through ChainOfThought.

    0.15.19release notes

  • Controlled and uncontrolled modal owners are notified when a run opens a closed modal.

    0.15.19release notes

  • Parent IDs are no longer conflated with ungrouped message parts.

    0.15.19release notes

  • Queued live completion requests no longer start after the component unmounts.

    0.15.19release notes

  • Quote selections crossing excluded content are rejected.

    0.15.19release notes

  • Sandbox teardown now finishes even when bridge cleanup reports errors.

    0.15.19release notes

  • Requested scroll behavior is preserved across nested viewport providers.

    0.15.19release notes

  • Tool allowlist changes now apply to mounted MCP app frames.

    0.15.19release notes

  • Root scrollers now measure viewport scrollbar width correctly to prevent horizontal page shifting during collapsible animations.

    0.15.19release notes

  • WebMCP tool cancellation works below the AbortSignal.any browser floor and with non-native caller signals.

    0.15.19release notes

  • WebMCP tools are cancelled while asynchronous validation is pending.

    0.15.19release notes

  • Newly mounted MCP Apps are loaded through the committed host.

    0.15.18release notes

  • Model-context mentions remain current during updates.

    0.15.18release notes

  • Explicit tool categories are honored without requiring custom categories.

    0.15.18release notes

  • Committed MCP App host options remain active during interrupted renders.

    0.15.17release notes

  • MCP App renderer handlers are exposed for integrations that need access to them.

    0.15.17release notes

  • MCP App server routing remains scoped to committed renders.

    0.15.17release notes

  • Sandbox bridge options remain scoped to committed renders.

    0.15.17release notes

  • Slash commands remain scoped to committed renders, and search now matches the displayed label or /id fallback.

    0.15.17release notes

  • DevTools updates continue flowing when a subscriber throws.

    0.15.16release notes

  • Rejected asynchronous Markdown exports are handled.

    0.15.16release notes

  • Render failures after teardown are contained.

    0.15.16release notes

  • Unrevealed smooth text is drained when a message completes before any frame.

    0.15.16release notes

  • ThreadIf now uses the loading-aware thread.isEmpty field instead of checking messages.length.

    0.15.16release notes

  • The trigger popover cursor is resynchronized after selection.

    0.15.16release notes

  • Assistant transport lifecycle callback failures are isolated so one failing callback does not disrupt transport handling.

    0.15.15release notes

  • Transport response callbacks are awaited, and unfinished responses are canceled when callbacks fail.

    0.15.15release notes

  • Data message parts are now persisted in aui/v0 cloud history.

    0.15.15release notes

  • Deleting the last thread creates a fresh thread, notifies the new onDelete callback, and applies deletes safely in batches.

    0.15.15release notes

  • Live completion results refresh after their data source changes, including synchronous live completion failures.

    0.15.15release notes

  • MCP App error replies remain reliable when error callbacks or notification callbacks throw.

    0.15.15release notes

  • Validates MCP App resource responses, improving reliability for integrations returning invalid resources.

    0.15.15release notes

  • Sandbox frames are disposed when bridge setup fails, preventing failed integrations from retaining frame resources.

    0.15.15release notes

  • Custom compositions must mount ThreadPrimitive.Root for Escape-to-stop-speaking to remain active when message action bars are hidden.

    0.15.15release notes

  • In-memory thread IDs are now generated uniquely.

    0.15.14release notes

  • A runtime rejecting onNew with MessageNotSentError restores the composer’s text, quote, and attachments when the send never reached the backend.

    0.15.14release notes

  • Replay response readers are released after completion, cancellation, and errors.

    0.15.14release notes

  • Suggestions scope is derived from the thread, allowing runtime-provided suggestions to render through ThreadPrimitive.Suggestions.

    0.15.14release notes

  • Edits carrying sourceId are routed to onEdit instead of the queue adapter.

    0.15.10release notes

  • Dropped assistant transport resume requests are now cleared.

    0.15.9release notes

  • Failed live completion searches can now be retried.

    0.15.9release notes

  • Blob URL revocation is deferred so the download fetch can start before revocation.

    0.15.5release notes

  • Hydrated assistant transport resumes now use their retained initial state.

    0.15.5release notes

  • Transport runs settle even when finish callbacks fail.

    0.15.5release notes

  • Extension-less filenames no longer render a bare period; the attachment type is used instead.

    0.15.5release notes

  • Escape during IME composition is ignored, preventing composition dismissal from cancelling the composer.

    0.15.5release notes

  • User onMouseDown handlers run before preventDefault through composed event handling.

    0.15.5release notes

  • Action button primitives no longer force type="button"; callers can override the default.

    0.15.5release notes

  • useAui({}) now mounts a rooted host so its scope set can grow across renders.

    0.15.5release notes

  • Object.keys and spread enumeration now includes scopes inherited from parent clients.

    0.15.5release notes

  • Assistant transport now skips add-message commands containing no supported parts.

    0.15.4release notes

  • Assistant-transport resume always decodes leniently, including when stream input is malformed.

    0.15.4release notes

  • Renaming a thread now persists the new title instead of dropping it.

    0.15.3release notes

  • Tool results such as false, 0, empty string, or null remain distinguishable from unfinished calls across the cloud round trip.

    0.15.3release notes

  • Using send no longer overwrites the composer draft during a run, and is disabled mid-run when queue support is unavailable.

    0.15.3release notes

  • The encoder now persists only enumerated attachment content fields, keeping per-part status out of the stored shape.

    0.15.2release notes

@assistant-ui/react 0.14135 changes

Breaking changes 29

  • Invoking an unset optional callback now throws a capability error.

    0.14.29release notes

  • Public enums are represented as as-const objects to support erasableSyntaxOnly.

    0.14.29release notes

  • Copied message text now excludes reasoning parts and includes only type: "text" content.

    0.14.18release notes

  • hitl moves from @assistant-ui/next to @assistant-ui/react and remains a build-time-stripped no-op marker.

    0.14.13release notes

  • The groupBy callback now accepts only a part and must return an array of group keys or null; bare-string returns are no longer supported.

    0.14.9release notes

  • Removed; use AuiIf instead.

    0.14.0release notes

  • Removed registerModelConfigProvider; use registerModelContextProvider instead.

    0.14.0release notes

  • Removed reset; use thread.reset instead.

    0.14.0release notes

  • Removed switchToNewThread; use threads.switchToNewThread instead.

    0.14.0release notes

  • Removed switchToThread; use threads.switchToThread instead.

    0.14.0release notes

  • Removed threadList; use threads instead.

    0.14.0release notes

  • Removed config; use context instead.

    0.14.0release notes

  • Removed; use toToolsJSONSchema from assistant-stream instead.

    0.14.0release notes

  • Removed the singular API; use getExternalStoreMessages instead.

    0.14.0release notes

  • Removed the submittedFeedback field; use message.metadata.submittedFeedback instead.

    0.14.0release notes

  • Removed onSwitchToThread; use load instead.

    0.14.0release notes

  • Removed getModelConfig; use getModelContext instead.

    0.14.0release notes

  • Removed the positional parentId overload; pass { parentId } instead.

    0.14.0release notes

  • Removed unstable_loadExternalState; use importExternalState instead.

    0.14.0release notes

  • Removed unstable_resumeRun; use resumeRun instead.

    0.14.0release notes

  • Removed; use toToolsJSONSchema from assistant-stream instead.

    0.14.0release notes

  • Removed the unstable_ alias; use InMemoryThreadListAdapter instead.

    0.14.0release notes

  • Removed the unstable_ alias; use RemoteThreadListAdapter instead.

    0.14.0release notes

  • Removed the unstable_ alias; use useCloudThreadListAdapter instead.

    0.14.0release notes

  • Removed the unstable_ alias; use useRemoteThreadListRuntime instead.

    0.14.0release notes

  • Removed; use useAui instead.

    0.14.0release notes

  • Removed; use useAuiEvent instead.

    0.14.0release notes

  • Removed; use useAuiState instead.

    0.14.0release notes

  • Removed the alias; use useLocalRuntime instead.

    0.14.0release notes

Security 1

  • Adds a primitive for rendering agent-described React UI from JSON using a consumer-provided component allowlist.

    0.14.8release notes

Deprecations 4

  • fromThreadMessageLike is now marked experimental and may change without notice.

    0.14.23release notes

  • generateId is now marked experimental and may change without notice.

    0.14.23release notes

  • hitlTool is deprecated in favor of humanTool, while compatibility aliases remain available.

    0.14.15release notes

  • humanTool replaces hitlTool as the preferred tool name, with compatibility aliases retained.

    0.14.15release notes

New APIs and options 51

  • ExternalThread adds assistant-transport props for loading, state, extras, resume, tool results, external state, tool calls, and attachments, plus importExternalState.

    0.14.29release notes

  • ToolInvocationTracker is exported from core internal.

    0.14.29release notes

  • AssistantModalPrimitive Trigger, Anchor, and Content now support render props.

    0.14.27release notes

  • ComposerPrimitive.Root now supports compact mode.

    0.14.27release notes

  • Quote selection now supports exclusions using data-aui-quote-selectable="false".

    0.14.27release notes

  • MCP toolkit entries can now be disabled.

    0.14.27release notes

  • MCP toolkit now supports prefixed tool names.

    0.14.27release notes

  • MCP toolkit tools can now be disabled.

    0.14.27release notes

  • The selection toolbar now supports opt-in quote regions.

    0.14.27release notes

  • MCP Apps metadata and host calls now accept an optional serverId for multi-MCP routing.

    0.14.27release notes

  • ThreadListItemMorePrimitive.Root adds sharedFocusGroup to extend keyboard focus handling into the menu, make it non-modal, and restore row focus on close.

    0.14.26release notes

  • Adds an isLoading prop so asynchronous completion sources can render a loading state.

    0.14.22release notes

  • Exported from the public API so developers can materialize a ThreadMessageLike without reaching into internals.

    0.14.22release notes

  • Exported from the public API so developers can generate IDs for hand-built messages without reaching into internals.

    0.14.22release notes

  • Adds minCommitMs to throttle committed reveal updates while preserving per-frame commits by default.

    0.14.22release notes

  • Bridges async completion sources into the synchronous Unstable_TriggerAdapter with debounced fetching and stale-request cancellation.

    0.14.22release notes

  • A compiler-runtime subpath now mirrors react/compiler-runtime's c export for compiled packages.

    0.14.19release notes

  • ExternalThread now provides an onRespondToToolApproval callback for handling tool approval responses.

    0.14.19release notes

  • respondToApproval now accepts optionId, resolving core approval behavior from the selected option kind.

    0.14.19release notes

  • External-store hosts can now provide tool-call timing through ThreadMessageLike.

    0.14.19release notes

  • Tool approval responses can record the selected option through optionId.

    0.14.19release notes

  • Tool approval requests can now include machine-readable options for allow-once, allow-always, reject-once, reject-always, and custom kinds.

    0.14.19release notes

  • Tool approvals can now record cancelled or expired terminal outcomes.

    0.14.19release notes

  • Tool calls now expose startedAt and optional completedAt epoch milliseconds, automatically populated during streaming.

    0.14.19release notes

  • The new hook reports mid-run output stalls using a configurable threshold and message content fingerprint.

    0.14.19release notes

  • The React shim exports useMemoCache with tap and React compiler-runtime behavior, including a React 18 polyfill.

    0.14.19release notes

  • The new hook returns elapsed tool-call milliseconds and updates once per second while the call is running.

    0.14.19release notes

  • Adds an optional branches adapter for retrieving sibling branches and switching the visible branch.

    0.14.18release notes

  • The smooth prop now accepts boolean or SmoothOptions for tunable text reveal behavior.

    0.14.18release notes

  • The smooth prop now accepts boolean or SmoothOptions for tunable text reveal behavior.

    0.14.18release notes

  • Adds terminal-style ArrowUp and ArrowDown history navigation for thread composer input while preserving drafts and yielding to other input behaviors.

    0.14.18release notes

  • Exports useSmooth and SmoothOptions publicly, adding tunable backlog draining, reveal intervals, and per-frame character limits.

    0.14.18release notes

  • Messages sent during a run are queued and processed once the run settles.

    0.14.15release notes

  • Queued messages can be rendered through ComposerPrimitive.Queue and QueueItemPrimitive APIs.

    0.14.15release notes

  • External-store adapters can opt into message queuing with a queue adapter built using createMessageQueue.

    0.14.15release notes

  • Adds externalTool for render-only generative toolkit entries.

    0.14.15release notes

  • useLangGraphRuntime and useLocalRuntime can opt into message queuing with this option.

    0.14.15release notes

  • Provides defineToolkit() from @assistant-ui/react for authoring permissive toolkits; its marker is stripped by the use generative compiler.

    0.14.13release notes

  • Adds permissive ToolkitDeclaration and ToolkitDeclarationDefinition types for authoring toolkits whose backend tools may declare description, parameters, or execute.

    0.14.13release notes

  • Tool-call parts in approval-requested state now expose approval metadata containing an id and optional automatic flag.

    0.14.9release notes

  • Adds a typed helper for mapping part types to group-key paths, with support for MCP app routing and inline reconstruction.

    0.14.9release notes

  • Tool components can acknowledge AI SDK v6 approval gates through a first-class prop without threading chatHelpers through application context.

    0.14.9release notes

  • Adds a message part containing a named component tree that supports streaming partial specs.

    0.14.8release notes

  • Adds the components.generativeUI option for composing generative UI rendering with MessagePrimitive.Parts.

    0.14.8release notes

  • Adds an unarchive option so callers can keep an archived thread archived when switching to it; the default remains true.

    0.14.8release notes

  • Adds an unarchive option so callers can keep an archived thread archived when switching through the item runtime.

    0.14.8release notes

  • Adds newline insertion on plain Enter for touch-primary devices while preserving existing submitMode behavior.

    0.14.8release notes

  • The default directive formatter is re-exported so downstream packages need not depend directly on @assistant-ui/core.

    0.14.6release notes

  • The directive formatter is re-exported so downstream packages need not depend directly on @assistant-ui/core.

    0.14.6release notes

  • The directive segment is re-exported so downstream packages need not depend directly on @assistant-ui/core.

    0.14.6release notes

  • The trigger item is re-exported so downstream packages need not depend directly on @assistant-ui/core.

    0.14.6release notes

Behavior and default changes 9

  • Attachment-add rejections are no longer logged per file to the console when the structured event already surfaces them.

    0.14.29release notes

  • ExternalThread edit composers now receive the attachment adapter.

    0.14.29release notes

  • Runs paused for tool approval are now persisted.

    0.14.29release notes

  • Clicking blank space in ComposerPrimitive.Root now focuses the composer input.

    0.14.28release notes

  • Thread list items support Up/Down navigation and Right navigation to an item's More button, with RTL mirroring; every item remains a Tab stop.

    0.14.26release notes

  • The kit approval bar now renders supplied options and can show an opt-in confirmation step describing persistent grants.

    0.14.19release notes

  • The ToolFallback trigger now renders tool-call duration when timing information is present.

    0.14.19release notes

  • defineToolkit and hitl markers move from @assistant-ui/next to @assistant-ui/react and are shipped across distributions as build-time no-op markers.

    0.14.13release notes

  • Inline groupBy functions are now safe to use because memoization uses a helper fingerprint or rebuilds the tree cheaply per render.

    0.14.9release notes

Tooling 1

  • aui-build now runs React Compiler over packages that depend on tap, allowing compiled hooks and components to work in tap resource renders.

    0.14.19release notes

Fixes and other changes 40

  • onError now reads live in-transit commands at error time instead of a stale render snapshot.

    0.14.29release notes

  • parentId is consumed once per run, preventing unrelated later runs from resending it.

    0.14.29release notes

  • Follow-up runs with empty command queues now no-op instead of throwing an error.

    0.14.29release notes

  • In-transit commands are marked delivered when a run completes successfully without state chunks.

    0.14.29release notes

  • Commands queued during resume runs are flushed by a follow-up run instead of remaining starved.

    0.14.29release notes

  • In-flight runs are aborted on unmount to prevent fetch leaks.

    0.14.29release notes

  • The adapter accept string is validated on every addAttachment entry point.

    0.14.29release notes

  • clearAttachments and reset now call adapter.remove for pending attachments.

    0.14.29release notes

  • Queue-adapter sends now stamp the thread head as parentId.

    0.14.29release notes

  • Failed sends are merged back into the draft with text, attachments, and quote preserved.

    0.14.29release notes

  • Duplicate message ids are deduplicated with a warning; the last occurrence wins instead of throwing.

    0.14.29release notes

  • Rejected file picker attachment additions are now handled.

    0.14.29release notes

  • Thread-list position is preserved when an on-demand fetch settles after a concurrent list call.

    0.14.29release notes

  • Controlled assistant-visible inputs remain synchronized after edits.

    0.14.28release notes

  • Attachments work without requiring a global File constructor.

    0.14.28release notes

  • Prevents instant auto-scroll from interrupting active top-anchored runs.

    0.14.28release notes

  • Transient part-type mismatches no longer throw during thread switches and unmount the app.

    0.14.28release notes

  • Part selectors should not throw; transient part-type mismatches are handled stably during React Ink rendering.

    0.14.28release notes

  • The top-anchor reserve is preserved between turns.

    0.14.28release notes

  • Cloud history now preserves user attachments.

    0.14.27release notes

  • MCP App host request errors now include error context.

    0.14.27release notes

  • providerMetadata now survives conversion on text, reasoning, and tool-call message parts.

    0.14.27release notes

  • Opening and closing a menu preserves focus on the thread row so the focus-visible highlight remains continuous.

    0.14.26release notes

  • Compiled context store hooks no longer skip subscriptions, preventing missed updates for developers using them.

    0.14.21release notes

  • Peer and dependency ranges were updated for @assistant-ui/tap 0.9, affecting compatible package configurations.

    0.14.20release notes

  • Typecheck regressions were resolved, preventing related type-checking failures for developers.

    0.14.20release notes

  • useSubscribable now builds on useSyncExternalStore so store reads remain visible to the React Compiler.

    0.14.19release notes

  • Empty running messages now emit the streaming indicator so the assistant slot shows loading feedback immediately after sending.

    0.14.18release notes

  • Scrollbar gutter compensation prevents collapsible animations from shifting centered content on classic scrollbars.

    0.14.18release notes

  • Preserves the original part type for reasoning parts instead of always returning type: "text".

    0.14.18release notes

  • Pointer interaction now clears pending bottom-scroll intent, preventing collapsible interactions from moving the thread to the bottom.

    0.14.18release notes

  • MCP app bridge messages now support the 2026-01-26 dialect so spec widgets initialize and receive tool results.

    0.14.15release notes

  • defineToolkit now works with plain runtime toolkits.

    0.14.15release notes

  • ExternalThreadQueueAdapter now lives in @assistant-ui/core while remaining re-exported from @assistant-ui/react.

    0.14.15release notes

  • Removes a transient requires-action flicker when tool calls reach the approval-responded state.

    0.14.9release notes

  • Distinguishes interrupt and pending tool calls using explicit interrupt or approval fields instead of an undefined result.

    0.14.9release notes

  • Resyncs displayed text during render when the part changes or streaming continuity breaks, preventing one frame of stale text after a thread switch.

    0.14.7release notes

  • Copy operations no longer throw when navigator.clipboard is unavailable or permission is denied.

    0.14.6release notes

  • External store synchronization removes message ids that disappeared, preventing phantom assistant siblings.

    0.14.6release notes

  • Thread initialization timing was fixed so scrollToBottomOnInitialize works reliably.

    0.14.6release notes

@assistant-ui/react 0.1288 changes

Breaking changes 19

  • Adds hierarchical adjacent grouping of message parts through a new primitive.

    0.12.28release notes

  • The CSS class aui-mention-chip is renamed to aui-directive-chip.

    0.12.26release notes

  • Mention data attributes are renamed from data-mention-* to data-directive-*.

    0.12.26release notes

  • The react-lexical mentionChip prop is renamed to directiveChip.

    0.12.26release notes

  • react-lexical MentionChipProvider is renamed to DirectiveChipProvider.

    0.12.26release notes

  • react-lexical mention node APIs are renamed to directive node APIs.

    0.12.26release notes

  • react-lexical MentionPlugin is renamed to DirectivePlugin.

    0.12.26release notes

  • Replaces action onSelect handlers with the Action primitive and onExecute prop.

    0.12.26release notes

  • Replaces the insertDirective onSelect form with the Directive primitive and formatter prop.

    0.12.26release notes

  • The renamed mention adapter accepts a categories option.

    0.12.26release notes

  • The renamed mention adapter accepts includeModelContextTools.

    0.12.26release notes

  • The renamed mention adapter accepts an items option.

    0.12.26release notes

  • The slash command adapter now returns adapter and action, with execute retained in the hook closure.

    0.12.26release notes

  • The tool-specific mention adapter hook is renamed to unstable_useMentionAdapter.

    0.12.26release notes

  • Adds a generic trigger-popover resource supporting multiple trigger characters.

    0.12.24release notes

  • Removes the aui-source export condition from package.json exports.

    0.12.22release notes

  • Removes makeInteractable and its related types.

    0.12.22release notes

  • Renames useInteractable to useAssistantInteractable for registration, with the hook returning an id.

    0.12.22release notes

  • Renames UseInteractableConfig to AssistantInteractableProps.

    0.12.22release notes

Deprecations 3

  • The legacy ToolGroup prop on Parts is deprecated but continues working for backwards compatibility.

    0.12.28release notes

  • The legacy adjacent-grouping component is deprecated but continues working for backwards compatibility.

    0.12.28release notes

  • The legacy top-level request-body spread remains supported for backward compatibility but will be removed in a future version.

    0.12.22release notes

New APIs and options 48

  • Accepts a user-supplied groupBy function to coalesce adjacent parts by key-path prefixes.

    0.12.28release notes

  • Exposes highlightIndex(index) on the TriggerPopover scope for programmatic highlighting.

    0.12.26release notes

  • Adds reload() to ThreadListRuntime and aui.threads() to refresh threads after asynchronous authentication completes.

    0.12.26release notes

  • composer.send() accepts a startRun flag through SendOptions.

    0.12.24release notes

  • Introduces a plugin protocol that decouples ComposerInput from mention-specific code.

    0.12.24release notes

  • Adds slash-command primitives for slash command support.

    0.12.24release notes

  • Adds trigger-popover primitives for building generic trigger interactions.

    0.12.24release notes

  • Adds an EditComposerRuntimeCore interface extending ComposerRuntimeCore.

    0.12.24release notes

  • EditComposerState exposes parentId for edit lineage.

    0.12.24release notes

  • EditComposerState exposes sourceId for edit lineage.

    0.12.24release notes

  • Adds the slash command adapter type.

    0.12.24release notes

  • Adds the slash command item type.

    0.12.24release notes

  • Adds a generic trigger adapter type supporting multiple trigger characters.

    0.12.24release notes

  • Adds a generic trigger category type for the trigger popover architecture.

    0.12.24release notes

  • Adds a generic trigger item type for the trigger popover architecture.

    0.12.24release notes

  • Adds a hook for building slash command adapters.

    0.12.24release notes

  • ThreadListRuntime now exposes getLoadThreadsPromise() as a public API.

    0.12.23release notes

  • useRemoteThreadListRuntime now accepts an initialThreadId option.

    0.12.23release notes

  • Adds per-id error tracking for interactable persistence.

    0.12.22release notes

  • Adds interactable state export for persistence.

    0.12.22release notes

  • Adds immediate synchronization for interactable persistence.

    0.12.22release notes

  • Adds interactable state import for persistence.

    0.12.22release notes

  • Adds per-id pending-state tracking for interactable persistence.

    0.12.22release notes

  • Adds a realtime voice adapter with VoiceOrb UI and mode and volume support.

    0.12.22release notes

  • All primitives now support render props for compatibility with the shadcn Base component library.

    0.12.22release notes

  • Adds a debounced persistence adapter for interactable state synchronization.

    0.12.22release notes

  • Adds callback-based context providers that inject computed text into the system prompt using current application state.

    0.12.22release notes

  • Adds a hook for reading and writing interactable state.

    0.12.22release notes

  • Adds a hook that derives per-property streaming completion status from tool-call arguments.

    0.12.22release notes

  • Adds a scope resource that generates update tools and injects a system prompt.

    0.12.21release notes

  • Adds a factory for registering AI-controllable UI interactables.

    0.12.21release notes

  • Adds selection support that marks an interactable as focused and surfaces it in the system prompt.

    0.12.21release notes

  • Adds a hook for registering AI-controllable UI interactables.

    0.12.21release notes

  • Adds a hotkey that sends with steer enabled and interrupts the current run.

    0.12.20release notes

  • Adds a steer flag to send messages while interrupting the current run.

    0.12.20release notes

  • Adds queueItem() for accessing queue items through composer methods.

    0.12.20release notes

  • Adds a composer primitive for rendering the queue list.

    0.12.20release notes

  • Adds queue state to the composer.

    0.12.20release notes

  • Adds a queue adapter for runtimes that support message queuing.

    0.12.20release notes

  • Adds clear with edit, reload, and cancel-run reasons for queue management.

    0.12.20release notes

  • Adds cursor-aware triggers, keyboard navigation, search, and Lexical rich editor support for mentions.

    0.12.20release notes

  • Adds a primitive for rendering removable queue items.

    0.12.20release notes

  • Adds a primitive for rendering steer queue items.

    0.12.20release notes

  • Adds a primitive for rendering text queue items.

    0.12.20release notes

  • Adds queue capability detection to runtime capabilities.

    0.12.20release notes

  • Adds the queueItem scope for queue item rendering.

    0.12.20release notes

  • Adds the SingleThreadList resource for developers to use.

    0.12.20release notes

  • Primitives now support a children API with part.toolUI, part.dataRendererUI, and MessagePrimitive.Quote.

    0.12.19release notes

Behavior and default changes 6

  • Dropped attachments are processed in parallel so multiple files appear together instead of one by one.

    0.12.26release notes

  • callSettings and config are now nested objects in the request body; the old top-level spread remains temporarily for backward compatibility.

    0.12.22release notes

  • Interactable persistence now automatically flushes when a component unregisters.

    0.12.22release notes

  • Interactables with the same name and different IDs receive separate update tools.

    0.12.21release notes

  • Auto-generated tools use partial schemas so AI sends only changed fields.

    0.12.21release notes

  • Routes thread.append through queue.enqueue when a queue adapter is present.

    0.12.20release notes

Fixes and other changes 12

  • TriggerPopover now synchronizes mouse hover with keyboard highlighting and accessibility state.

    0.12.26release notes

  • Dropdown menu primitives now support render props.

    0.12.26release notes

  • MessagePrimitive.Root now forwards viewport slack props.

    0.12.24release notes

  • The text-unchanged guard is bypassed when startRun is explicitly set.

    0.12.24release notes

  • EMPTY_THREAD_CORE.isLoading is now true to prevent a Welcome page flash during thread switching.

    0.12.23release notes

  • Remains enabled during runs when queue support is available.

    0.12.20release notes

  • Cancel, edit, and reload operations now clear the queue with the appropriate reason.

    0.12.20release notes

  • Prevents double-submit when ComposerPrimitive.Send is a submit button.

    0.12.16release notes

  • ActionBarMorePrimitive no longer disappears when ActionBarPrimitive.Root uses autohide="not-last" on non-last messages.

    0.12.15release notes

  • External message conversion no longer crashes when orphaned tool results lack a matching tool call.

    0.12.15release notes

  • Consecutive assistant snapshots no longer produce duplicate toolCallId parts during external message conversion.

    0.12.15release notes

  • Tool invocation argument stream rewrites recover safely and avoid premature closure for non-executable client tools.

    0.12.15release notes

@assistant-ui/react 0.1125 changes

Breaking changes 5

  • ResourceElementConstructor was renamed to Resource.

    0.11.39release notes

  • ResourceElement.type now uses Resource instead of ResourceFn.

    0.11.39release notes

  • toolUIs was renamed to tools.

    0.11.39release notes

  • The ToolUI API was removed.

    0.11.39release notes

  • Introduces the Toolkit API for developers using the technology.

    0.11.36release notes

Deprecations 1

  • All old context API hooks are now deprecated, so developers should avoid using them for new code.

    0.11.36release notes

New APIs and options 9

  • AI SDK v5 data parts are integrated into message content.

    0.11.39release notes

  • ThreadHistoryAdapter can store runConfig.

    0.11.39release notes

  • AssistantCloudThreads gains get for retrieving individual threads.

    0.11.38release notes

  • RemoteThreadListAdapter gains fetch for retrieving individual threads.

    0.11.38release notes

  • Adds a scroll lock hook for the reasoning component.

    0.11.37release notes

  • Introduces the AssistantTransport wire format for transporting assistant interactions.

    0.11.35release notes

  • Introduces useAssistantTransportState for managing assistant transport state.

    0.11.35release notes

  • ThreadMessageLike support was added.

    0.11.33release notes

  • Adds submittedFeedback to ThreadAssistantMessage.

    0.11.30release notes

Behavior and default changes 5

  • Commands can now be enqueued from onError and onCancel handlers.

    0.11.41release notes

  • Queued commands are canceled when an error occurs.

    0.11.41release notes

  • switchToThread now fetches and loads threads missing from the current list.

    0.11.38release notes

  • The technology now displays AI SDK errors, making these errors visible to developers or users.

    0.11.36release notes

  • submittedFeedback moved to metadata.

    0.11.33release notes

Fixes and other changes 5

  • Fixed LocalThreadRuntime deleting branches during message reloads.

    0.11.39release notes

  • The scroll-to-bottom button is now separate from autoScroll behavior.

    0.11.38release notes

  • The scroll-position check used by autoscroll was corrected.

    0.11.38release notes

  • Added support for submittedFeedback in the external message converter.

    0.11.34release notes

  • Fixes enqueueing a chunk into a readable stream that is closed or has been requested to be closed.

    0.11.32release notes