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:
- Bidirectional RPC function calls are supported via explicit role-based messages:
callRendererFunctionfor agent-initiated calls on the renderer (returningrendererFunctionResponse), andcallAgentFunctionfor renderer-initiated calls on the agent (returningagentFunctionResponse). Execution results or errors are returned via sharedFunctionResponsepayloads. Runtime authorized callers (allowedCallers) and return types are defined in catalogs and verified at runtime. - Catalogs can now be mixed within a single UI surface. Advertised
supportedCatalogIdsare mixable, allowing UI trees to combine components and functions from multiple catalogs simultaneously. - Added
$defs/FunctionCommonincommon_types.jsoncomposed at the envelope level viaFunctionCallfor function-level catalog overrides, matching theComponentCommonpattern. - Added an optional
catalogIdproperty toComponentCommonandFunctionCallto allow individual components and function calls to explicitly declare their source catalog. - Retained
catalogIdoncreateSurfaceas an optional parameter that defines the default catalog for that surface. - Added extensibility metadata support via
$defs/Extensionsincommon_types.json, allowingComponentCommon,createSurface, andComponentDefinitionto convey arbitrary extension key-value pairs (with Unicode UAX #31 keys and reserveda2ui_namespace). - Defined explicit component and function call resolution logic: the renderer checks the component-level (or function call-level)
catalogIdfirst, then falls back to the surface defaultcatalogId. If neither is defined, the renderer errors out and does not render the component (or rejects the function call). There is no fallback to catalogs declared in capabilities. Available catalogs for a surface include bothsupportedCatalogIdsand any negotiatedinlineCatalogs, and all mixed catalogs must use the same A2UI specification version. - The
themeproperty in the catalog and surface creation message is removed, along withprimaryColor, 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 catalog meta-schemas (catalog_definition.json) is now formalized as a JSON object map of function name to its definition, matching the map structure used in catalog files. - 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. - Standardized the names of core architectural components, renaming "client" to renderer and "server" to agent (e.g.,
server_to_clientschemas are renamed toagent_to_renderer), because A2UI is sometimes generated on clients, and rendering sometimes happens on servers, making those terms ambiguous. - Catalogs can now define composition constraints (
allowedParentsandallowedChildren) on component definitions, using"Surface"as the canonical root component type. Because JSON Schema cannot natively restrict child component types across a flat adjacency list of ID references, these rules allow catalogs to declare valid parent-child relationships without altering the wire format. CheckRuleincommon_types.jsonsupports dynamic structured validation result objects (ValidationResult) returned directly by function evaluations or data bindings (containingvalid,code,message, andseverity), andmessageonCheckRuleis made optional as a fallback error message.- Enhanced
AccessibilityAttributesincommon_types.jsonwith WAI-ARIAliveregion support ("off","polite","assertive") andhidden(DynamicBoolean), while setting"additionalProperties": false. Established normative specification prose requiring catalog and renderer implementations to plumb accessibility attributes, infer default screen reader semantics from visible text properties, and enforce SDK linter checks.
2. Changes¶
2.1. Catalog definition schema¶
- Removed the
$defs/themeschema and theprimaryColorproperty from the Catalog schema. - Formalized the
functionsproperty incatalog_definition.jsonas a map object, keyed by function name. - Added
allowedCallers(enum:rendererOnly,agentOnly,rendererOrAgent, default:rendererOnly) toFunctionDefinitionto restrict which roles can invoke a function. - Added
requiresUserActivation(boolean, default:false) toFunctionDefinitionto declare if a function requires user gesture/activation context to execute, conditionally restrictingallowedCallerstorendererOnly. - Added
$defs/ValidationResultschema (valid,code,message,severity) as the standard schema definition for validation function return payloads. - 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. - Added a
protocolVersionfield (e.g.,"protocolVersion": "1.0") to catalog definition metadata (catalog_definition.json). If omitted,protocolVersiondefaults to"0.9"for backward compatibility; catalog definitions targeting1.0and beyond MUST specify"protocolVersion". - Enforced Unicode Standard Annex #31 (UAX #31) identifier naming constraints (
XID_Start,XID_Continue) across component names, function names, and argument keys. - Added optional
allowedParentsandallowedChildrenproperties to catalog component definitions (catalog_definition.json) to define parent-child composition constraints. Because JSON Schema cannot natively restrict child component types across a flat adjacency list of ID references, these rules allow catalogs to declare valid component relationships. - Added
"propertyNames": { "not": { "const": "Surface" } }to thecomponentsmap incatalog_definition.jsonto enforce reserving"Surface"at the schema validation level. - Added the canonical
"Surface"container component type incommon_types.jsonto represent the top-level container of a surface for"allowedParents": ["Surface"]rules. The protocol reserves the"Surface"component name. ThecreateSurfacemessage implicitly createsSurfacewith"child": "root", and you cannot modifySurfaceusingupdateComponents. These schema additions are catalog-level metadata and do not alter the wire format of component instances increateSurfaceorupdateComponents. - Added static
metadata(containingextensions) property toComponentDefinitioninsidecatalog_definition.json.
2.2. Standard catalogs (basic)¶
- 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. - Updated
openUrlfunction definition incatalogs/basic/catalog.jsonto set"requiresUserActivation": true. - Refactored component definitions in
catalogs/basic/catalog.jsonfromallOf: [ComponentCommon, ...]andunevaluatedProperties: falseto direct explicit property definitions (including explicitcomponentconst andweightprops) or$defs/Checkable. - Added an optional
instructionsfield to theCatalogschema (catalogs/basic/catalog.json) to embed Markdown guidelines/rules directly, replacing the externalrules.txtfile. - Updated return types on standard validation check functions (
required,regex,length,numeric,email) incatalogs/basic/catalog.jsonfrom"boolean"to"validationResult". - Removed
$defs/themefrom the basic catalog.
2.3. Agent-to-renderer messages¶
- Replaced
callFunctionwithcallRendererFunctionmessage structure (CallRendererFunctionMessage) to support agent-to-renderer function execution requests. - Added
agentFunctionResponsemessage structure (AgentFunctionResponseMessage) toagent_to_renderer.jsonso agents can return execution results or error payloads for renderer-initiated function calls (referencingcommon_types.json#/$defs/FunctionResponse). - Updated the
createSurfacemessage (CreateSurfaceMessage) to remove thethemefield, allowed passing initialcomponentsanddataModeldirectly inside the payload, madecatalogIdan optional parameter that acts as the surface's default catalog, and added optional surface-levelmetadata(containingextensions). - Added an optional
catalogIdproperty toComponentCommonandFunctionCallincommon_types.jsonto enable mixing catalogs and explicitly designating the catalog on individual components or function calls. - Added
$defs/Extensionstocommon_types.jsonand added optionalmetadata(containingextensions,$ref: "#/$defs/Extensions") toComponentCommon. - Added
$defs/Child("$ref": "#/$defs/ComponentId"),$defs/FunctionCommon, and$defs/IndexSystemFunctiontocommon_types.json. - Added the
Componentdefinition inagent_to_renderer.json(referenced byComponentsList) to composeComponentCommon($ref: "common_types.json#/$defs/ComponentCommon") and updatedFunctionCallincommon_types.jsonto composeFunctionCommon($ref: "#/$defs/FunctionCommon"), so base component and function call properties are validated at the envelope level regardless of catalog structure. - Updated all protocol version references and envelopes from
v0.9orv0.9.1tov1.0.
2.4. Renderer-to-agent events¶
- Added
callAgentFunctionmessage structure to support renderer-initiated remote function execution requests sent to the agent. - Added
rendererFunctionResponserenderer-to-agent message structure to return function execution results (value) or failure payloads (error), referencingcommon_types.json#/$defs/FunctionResponse. - Updated renderer
errormessages to supportfunctionCallIdwhen reporting function execution failures, enforcing mutual exclusivity withsurfaceId. - Added
"UNALLOWED_PARENT"and"UNALLOWED_CHILD"error code values torenderer_to_agent.jsonfor reporting validation errors when a component is placed under an unallowed parent or an unallowed child is placed inside a container. - Updated all protocol version references from
v0.9orv0.9.1tov1.0.
2.5. 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. - Clarified that
supportedCatalogIdsinrendererCapabilitiesandagentCapabilitiesare mixable within a single UI surface. - Simplified
renderer_capabilities.jsonby removing local inline catalog$defs(Catalog,FunctionDefinition) and replacinginlineCatalogsitems with a direct$reftohttps://a2ui.org/specification/v1_0/catalog_definition.json. - Relocated extension specification from
v0_9_1/docs/a2ui_extension_specification.mdtov1_0/extensions/a2a/docs/a2ui_extension_specification.md.
2.6. Data encoding¶
- Standardized data deletion behavior in
updateDataModelby making thevalueproperty required. Setting a path's value tonulldeletes the key at that path. Omitting thevalueproperty is now a schema validation error. - Removed
allowedCallersandreturnTypeproperties 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. - Updated
CheckRuleincommon_types.jsonto support dynamicValidationResultobjects returned directly by function evaluations or data model bindings, adding the$defs/ValidationResultschema (valid,code,message,severity) and makingCheckRule.messageoptional as a fallback message.
2.7. Processing rules¶
- Defined strict component and function catalog resolution logic:
- Check the component's (or function call's) explicit
catalogId. - If not present, check the surface's default
catalogIdprovided increateSurface. - If neither exists, report an error and do not render the component (or fail the function call). There is no fallback to catalogs advertised in capabilities. Available catalogs include
supportedCatalogIdsand negotiatedinlineCatalogs, and all mixed catalogs must use the same A2UI specification version. - Explicitly specified that
surfaceIdmust be globally unique per renderer 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 renderer receives a remote call to a function configured as
rendererOnlyor 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.
2.8. Terminology standardization¶
- Renamed client to renderer and server to agent globally across all protocol schemas, capabilities, and message list definitions.
- Renamed all client-to-server and server-to-client JSON schema files to use renderer/agent filenames:
server_to_client.json->agent_to_renderer.jsonclient_to_server.json->renderer_to_agent.jsonclient_capabilities.json->renderer_capabilities.jsonserver_capabilities.json->agent_capabilities.jsonclient_data_model.json->renderer_data_model.json- Renamed batch message list and list wrapper schema files:
server_to_client_list.json->agent_to_renderer_list.jsonserver_to_client_list_wrapper.json->agent_to_renderer_list_wrapper.jsonclient_to_server_list.json->renderer_to_agent_list.jsonclient_to_server_list_wrapper.json->renderer_to_agent_list_wrapper.json
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¶
- 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. - Remove the
themefield fromcreateSurfacemessages. You can pass initialcomponents,dataModel, and optionalmetadata.extensionsdirectly in thecreateSurfacepayload, andcatalogIdis now optional (acting as the default catalog for that surface). - When mixing components from multiple catalogs, specify the optional
catalogIdon individual components or function calls. - Formalize the
functionsproperty in catalog definitions as a JSON object map keyed by function name. - Remove the
$defs/themecatalog definition and theprimaryColorfield. - Ensure all generated catalog entity names conform to UAX #31 identifier rules.
- Do not include
allowedCallersorreturnTypeproperties in wire-levelFunctionCallpayloads. Set staticallowedCallers,returnType, and optionalrequiresUserActivationmetadata in catalog function definitions where needed. - Update
Video,TextField, andSlidercomponents to support optionalposterUrl,placeholder, andstepsproperties. UpdateopenUrlfunctions to specify"requiresUserActivation": true. - Explicitly set values to
nullinupdateDataModelmessages to delete keys at specified paths. Thevalueproperty is now required, and omitting it is a schema validation error. - Handle remote function execution requests from renderers (
callAgentFunction) and respond withagentFunctionResponsemessages. - Rename all references, constants, and endpoints mapping to
server_to_client.jsonorserver_capabilities.jsonto useagent_to_renderer.jsonandagent_capabilities.json.
For renderers¶
- Implement multi-catalog mixing by supporting components and function calls from any catalog in
supportedCatalogIdsor negotiatedinlineCatalogs. All catalogs mixed within a surface must use the same A2UI specification version. - Implement component and function resolution order: (1) explicit component/call
catalogId, (2) surface defaultcatalogId, (3) error if neither exists (no fallback to capabilities). - Implement function execution by adding support for parsing
callRendererFunctionmessages from the agent, checking authorized callers in the catalog (allowedCallers), rejecting invalid calls withINVALID_FUNCTION_CALL, and returningrendererFunctionResponsemessages. - Implement renderer-initiated function calls by sending
callAgentFunctionmessages to the agent and handling incomingagentFunctionResponsemessages. - 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. - Support dynamic
ValidationResultobjects (valid,code,message,severity) returned by component validation check conditions, falling back to staticCheckRule.messageif present. - Rename all references, constants, and endpoints mapping to
client_to_server.jsonorclient_capabilities.jsonto userenderer_to_agent.jsonandrenderer_capabilities.json.