A2UI v1.0 is the release candidate for the next major version of the A2UI protocol. It builds on the stable v0.9.1 foundation and introduces bidirectional RPC messaging, single-message UI instantiation, decoupled surface branding, and stricter catalog schema rules — while keeping all four core v0.9.x message types intact.Documentation Index
Fetch the complete documentation index at: https://mintlify.com/a2ui-project/a2ui/llms.txt
Use this file to discover all available pages before exploring further.
What changed from v0.9.1
v1.0 introduces five major areas of change:- Bidirectional RPC — A new
actionResponseserver-to-client message lets agents respond synchronously to client actions, enabling typeahead suggestions, form validation results, and other request-response patterns. - Server-initiated function calls — A new
callFunctionserver-to-client message allows the agent to invoke catalog-registered client-side functions remotely (subject tocallableFromboundary checks). - Single-message UI instantiation —
createSurfacenow accepts optionalcomponentsanddataModelfields, letting an agent compose an entire surface in a single payload. - Decoupled branding — The
themeproperty is replaced bysurfaceProperties, and the hardcodedprimaryColorfield is removed. Visual styling is deferred to the target framework’s native theme. - Stricter catalog conventions — Function definitions move from a list to a keyed object map; catalog entity names must conform to Unicode UAX #31;
$schema/$idmetadata fields are supported on inline catalogs.
Protocol overview
The message flow in v1.0 is an extension of v0.9.1. The agent streams JSON envelopes to the renderer; the renderer sendsaction, functionResponse, and error messages back over the transport’s return channel.
The major addition is the synchronous RPC loop enabled by wantResponse + actionId + actionResponse:
Client action with wantResponse
The renderer sends an
action message with "wantResponse": true and a unique actionId.Agent processes the action
The agent receives the action, performs any server-side logic (e.g., querying a database), and prepares a response payload.
Agent sends actionResponse
The agent sends an
actionResponse message back to the renderer, referencing the same actionId, with either a value or an error.Message types
All v0.9.1 message types are fully supported in v1.0. The"version" field in every envelope must be "v1.0". v1.0 adds two new server-to-client messages: actionResponse and callFunction.
createSurface
The v1.0 createSurface message is a superset of its v0.9.1 counterpart. The key additions are:
surfacePropertiesreplacestheme(andprimaryColoris removed)components— an optional initial component list, eliminating the need for a separateupdateComponentsmessagedataModel— an optional initial data model object
| Property | Type | Required | Description |
|---|---|---|---|
surfaceId | string | ✅ | Globally unique surface ID for the renderer’s session lifetime. |
catalogId | string | ✅ | URI identifier for the component catalog. |
surfaceProperties | object | — | Catalog-defined surface properties (e.g., agentDisplayName). Replaces theme. |
sendDataModel | boolean | — | Sends full data model in client message metadata. Defaults to false. |
components | array | — | Initial component list; same schema as updateComponents.components. |
dataModel | object | — | Initial root data model state. |
updateComponents, updateDataModel, deleteSurface
These three messages are structurally identical to their v0.9.1 counterparts, with only the "version" field updated to "v1.0".
- updateComponents
- updateDataModel
- deleteSurface
actionResponse (new in v1.0)
actionResponse is the new server-to-client message that closes the synchronous RPC loop opened by a client action with wantResponse: true. It carries either a success value or an error — exactly one must be present.
Properties:
| Property | Type | Required | Description |
|---|---|---|---|
actionId | string | ✅ | Must match the actionId sent by the client in the originating action. |
actionResponse.value | any | — | Return value on success. |
actionResponse.error.code | string | — | Machine-readable error code. |
actionResponse.error.message | string | — | Human-readable error description. |
callFunction (new in v1.0)
callFunction lets the agent invoke a catalog-registered client-side function remotely and receive its result. Execution boundaries are declared in the catalog (callableFrom: "clientOnly" | "remoteOnly" | "clientOrRemote"); functions marked clientOnly must be rejected with INVALID_FUNCTION_CALL.
Properties:
| Property | Type | Required | Description |
|---|---|---|---|
functionCallId | string | ✅ | Unique invocation ID. Copied verbatim into the functionResponse. |
wantResponse | boolean | — | If true, the client must reply with functionResponse or error. |
callFunction.call | string | ✅ | Registered function name as defined in the catalog. |
callFunction.args | object | — | Arguments matching the function’s catalog schema. |
clientOnly:
Complete JSONL stream example
The following stream demonstrates v1.0 single-message surface creation followed by a data update:Catalog schema changes
surfaceProperties replaces theme
The theme property in createSurface is renamed to surfaceProperties. The primaryColor property is removed from the Basic Catalog’s surface properties — visual theming is delegated entirely to the renderer’s native framework.
The v1.0 Basic Catalog surfaceProperties:
| Property | Type | Description |
|---|---|---|
iconUrl | URI | Logo/avatar image identifying the agent. |
agentDisplayName | string | Agent name displayed beside the surface. |
Functions as object map
In v0.9.1, catalog functions were defined as a list. In v1.0, they are defined as a keyed object map where each key is the function name. This enables O(1) lookups and aligns with the component schema structure.UAX #31 naming rules
All catalog entity identifiers — component names, function names, and argument/property keys — must conform to Unicode Standard Annex #31 (UAX #31):- ✅ Valid:
UserProfileCard,submit_form,item_id_1,_internal_state - ❌ Invalid:
User Card(whitespace),1stItem(digit start),submit-form(hyphen)
@ system namespace
Function names beginning with @ are reserved for core system context evaluations available across all catalogs. Custom catalogs must not define functions with an @ prefix.
The only built-in @ function in v1.0 is @index, which returns the 0-based iteration index during list template rendering (Collection Scope only).
Migration guide: v0.9.1 → v1.0
Update version field
Change
"version": "v0.9.1" to "version": "v1.0" in all streamed envelopes and client-to-server messages.Rename theme to surfaceProperties
Rename the
theme field in createSurface messages to surfaceProperties. Remove any primaryColor usage — defer color theming to the renderer framework.Update catalog function definitions
Convert the
functions property in catalog definitions from an array to a JSON object map keyed by function name. Add callableFrom and returnType metadata fields to each function definition.Rename catalog defs/theme to defs/surfaceProperties
In catalog JSON schemas, rename
$defs/theme to $defs/surfaceProperties and remove primaryColor.Implement actionResponse (renderers)
Add support for parsing
actionResponse messages. When an action with wantResponse: true is sent, generate an actionId and await a matching actionResponse. Write value into the data model at responsePath if specified.Implement callFunction (renderers)
Add support for parsing
callFunction messages. Check the requested function’s callableFrom boundary in the catalog. Reject clientOnly calls with INVALID_FUNCTION_CALL. Return functionResponse for wantResponse: true invocations.Enforce UAX #31 naming
Verify that all catalog entity names (component names, function names, argument keys) conform to UAX #31. Reject or sanitize any non-conforming identifiers.
Update deletion semantics
To delete a key in
updateDataModel, set its value to null explicitly. Do not rely on omitting value for deletion — the behavior changed in v1.0.Related pages
v0.9.1 Specification
The current stable release — recommended for production use.
v0.8 Legacy Specification
The original nested-object format with structured-output support.
Basic Catalog Implementation Guide
How to implement a renderer against the Basic Catalog components and functions.
Transport Bindings
AG-UI, A2A, MCP, SSE, WebSocket, and REST transport options.