Evolution Guide v0.9.1 → v1.0¶
This guide is automatically included from
specification/v1_0/docs/evolution_guide.md. Any updates will automatically appear here.
For more information, see the following related documentation:
- A2UI Protocol v0.9.1 (Current - what you're migrating from).
- A2UI Protocol v1.0 (Candidate - what you're migrating to).
A2UI Protocol Evolution Guide: v0.9 to v1.0¶
This document serves as a comprehensive guide to the changes between A2UI version 0.9 (including 0.9.1) and version 1.0. It details the shifts in philosophy, architecture, and implementation, providing a reference for stakeholders and developers migrating between versions.
1. Executive summary¶
Version 1.0 differs from 0.9 in the following ways:
- A new client-to-server RPC mechanism allows synchronous responses to client actions (
actionResponse) using a uniqueactionId. - Server-to-client RPC function calls are supported via the
callFunctionmessage. Clients return execution results via thefunctionResponsemessage. Runtime execution boundaries and return types are defined in catalogs and verified at runtime, rather than being validated on the wire. - The
themeproperty in the catalog and surface creation message is replaced bysurfaceProperties, andprimaryColoris removed to separate layout from branding. - Components and initial data model states can be defined directly within the
createSurfaceparameters. This allows for the creation of entire UIs in a single message, rather than a create followed by separate updates. - The
functionsfield in a Catalog is now defined as a map of function name to its definition, instead of a list. - Standard JSON Schema metadata fields (
$schema,$id,title, anddescription) are supported in catalogs, preventing validation failures on inline catalogs with strict property checks. - Identifier naming rules across all catalog entities (component names, function names, and argument keys) must conform to Unicode Standard Annex #31 (UAX #31).
- The
@indexbuilt-in function dynamically retrieves iteration indices during list template rendering. The@prefix is reserved for core system context evaluations.
2. Changes¶
2.1. Catalog definition schema¶
- Renamed the
$defs/themeschema to$defs/surfacePropertiesin the Catalog schema, and removed theprimaryColorproperty. - Changed the
functionsproperty in the Catalog schema from a list to a map object, keyed by function name. - Added
callableFrom(enum:clientOnly,remoteOnly,clientOrRemote) toFunctionDefinitionto restrict where a function can be invoked. - Added an optional
instructionsfield to theCatalogschema to embed design guidelines and component usage rules directly in the catalog, replacing the externalrules.txtfile. - Supported standard JSON Schema metadata fields (
$schema,$id,title, anddescription) in the Catalog object definition. Since the Catalog schema restricts properties withadditionalProperties: false, this ensures inline catalogs containing standard schema metadata do not fail schema validation. - Enforced Unicode Standard Annex #31 (UAX #31) identifier naming constraints (
XID_Start,XID_Continue) across component names, function names, and argument keys.
2.2. Standard catalogs (basic and minimal)¶
- Added
posterUrlproperty to theVideocomponent incatalogs/basic/catalog.json, allowing a preview image to be displayed before the video plays. - Added
placeholderprop to theTextFieldcomponent schema. - Added a
stepsproperty to theSlidercomponent schema to snap values to discrete intervals. - Added an optional
instructionsfield to theCatalogschema (catalogs/basic/catalog.json) to refer to an external guidelines/rules file (instructions.md) via relative file URI, renaming and updating the previousrules.txtfile. - Renamed
svgPathtopathin the custom SVG icon definition object schema. - Renamed
$defs/themeto$defs/surfacePropertiesin both the basic and minimal catalogs.
2.3. Server-to-client messages¶
- Added
actionResponsemessage structure (ActionResponseMessage) to allow the server to respond to a specific action call using a uniqueactionIdwith avalueorerror. - Added
callFunctionmessage structure (CallFunctionMessage) to support server-initiated function execution. RemovedcallableFromandreturnTypeproperties from the wire payload, relying on runtime catalog verification. - Updated the
createSurfacemessage (CreateSurfaceMessage) to rename thethemefield tosurfaceProperties, and allowed passing initialcomponentsanddataModeldirectly inside the payload. - Updated all protocol version references and envelopes from
v0.9orv0.9.1tov1.0.
2.4. Client-to-server events¶
- Added
actionIdto theactionmessage properties, which the client generates if a response is expected (wantResponse: true). - Added
functionResponsemessage structure (FunctionResponseMessage) to return the execution result (valueorerror) of a server-initiated function call. - Updated client
errormessages to supportfunctionCallIdwhen reporting function execution failures, enforcing mutual exclusivity withsurfaceId. - Updated all protocol version references from
v0.9orv0.9.1tov1.0.
2.5. Client capabilities schema¶
- Added an optional
instructionsfield to theCatalogobject definition (client_capabilities.json) as a relative file URI reference (with format hint ofuri-reference) to support external rules files associated with a catalog. - Renamed
themecapability block tosurfacePropertieswithin the Catalog definition inclient_capabilities.json. - Added static
callableFromandreturnTypemetadata properties toFunctionDefinitioninsideclient_capabilities.jsonto advertise execution boundaries and return types to the server.
2.6. Agent card and transport metadata¶
- Standardized the official MIME type to
application/a2ui+jsonto conform to IANA media type guidelines. - Updated capabilities namespace in transport metadata and A2A metadata parameters from
v0.9/v0.9.1tov1.0.
2.7. Data encoding¶
- Standardized data deletion behavior in
updateDataModel. Setting a path's value tonulldeletes the key at that path. Removing or omitting keys inupdateDataModelis no longer used for deletion. - Removed
callableFromandreturnTypeproperties and validation constraints fromFunctionCalland dynamic value schemas incommon_types.json, deferring boundary checking and return type validation entirely to runtime execution. - Added built-in
@indexfunction (with optionaloffsetparameter) underFunctionCallto retrieve the iteration index during list template rendering. Reserved the@prefix for core system context evaluations.
2.8. Processing rules¶
- Explicitly specified that
surfaceIdmust be globally unique per client session. Creating a surface with an ID that already exists (without first deleting it) is an error. - Enforced runtime lookup of function execution boundaries and return types. If a client receives a remote call to a function configured as
clientOnlyor if the function is unregistered, it rejects the call and returns an error with the codeINVALID_FUNCTION_CALL. - Enforced catalog entity naming compliance with Unicode Standard Annex #31 (UAX #31).
- Restricted
@indexevaluation scope strictly to template instantiation loops (Collection Scope). Calling@indexoutside of template iteration results in an evaluation error.
3. Migration guide¶
This section outlines the steps required to migrate existing applications and components from version 0.9 (including 0.9.1) to version 1.0.
For agents and servers¶
- Set the
versionfield in all streamed JSON envelopes to"v1.0". - Change the MIME type of A2UI payloads in transport layers from
application/json+a2uitoapplication/a2ui+json. - Rename the
themefield increateSurfacemessages tosurfacePropertiesand removeprimaryColor. You can also pass initialcomponentsanddataModeldirectly in thecreateSurfacepayload. - Convert the
functionsproperty in catalog definitions from an array to a JSON object map keyed by function name. - Rename the
$defs/themecatalog definition to$defs/surfacePropertiesand remove theprimaryColorfield. - Ensure all generated catalog entity names conform to UAX #31 identifier rules.
- Do not include
callableFromorreturnTypeproperties in wire-levelFunctionCallpayloads. Set staticcallableFromandreturnTypemetadata in catalog function definitions where needed. - Update custom SVG icon definitions in
Iconcomponents to renamesvgPathtopath. UpdateVideo,TextField, andSlidercomponents to support optionalposterUrl,placeholder, andstepsproperties. - Explicitly set values to
nullinupdateDataModelmessages to delete keys at specified paths. Do not omit keys or send undefined to indicate deletion.
For renderers and clients¶
- Implement function execution by adding support for parsing
callFunctionmessages, checking boundary definitions in the catalog (callableFrom), rejecting invalid calls withINVALID_FUNCTION_CALL, and returningfunctionResponsemessages. - Support synchronous action responses by generating
actionIdfor actions withwantResponse: trueand writing returned values fromactionResponsemessages into the data model. - Support simultaneous version handling during session initialization by inspecting the
versionproperty (e.g.,"v1.0") to route payloads to version-specific controllers. - Enforce surface uniqueness by raising an error if
createSurfaceis received for an existingsurfaceId. - Update error reporting to handle
functionCallIdand enforce mutual exclusivity withsurfaceId. - Enforce Unicode identifier naming by verifying that all catalog entity names (components, functions, prop keys) conform to UAX #31 identifier rules.
- Support built-in
@indexevaluation during list template rendering (Collection Scope) to provide the 0-based iteration index, adjusted by anyoffsetparameter.