A2UI cleanly separates UI structure (the component tree) from application state (the data model). Component definitions describe what the interface looks like; the data model holds the values those components display. Binding a component property to a JSON Pointer path means the client updates that property automatically whenever the underlying data changes — the agent never has to resend component definitions just to change a displayed value.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.
The Two Layers
| Layer | Sent via | Changes via |
|---|---|---|
| UI Structure | updateComponents | Send a new updateComponents for changed components |
| Application State | updateDataModel | Send a targeted updateDataModel to any path |
- Reactive updates — change a data path; bound components re-render automatically.
- Dynamic lists — bind a container’s children to an array path; the list grows and shrinks with the data.
- Bidirectional sync — user input on form components flows back into the data model without a round-trip to the agent.
The Data Model
Each surface owns a single JSON object as its state store. There is no global store — the model is scoped to the surface’ssurfaceId. A typical model might look like:
JSON Pointer Paths
A2UI uses RFC 6901 JSON Pointer syntax to address values inside the data model:| Path | Resolves to |
|---|---|
/user/name | "Alice" |
/cart/items/0/price | "$9.99" |
/cart/total | "$19.98" |
/ui/loading | false |
/. Array elements use zero-based numeric segments (/cart/items/0).
Binding Syntax
To bind a component property to a data model path, pass a{ "path": "..." } object instead of a literal value.
- v0.9
- v0.8
Literal value (static):Data-bound value (reactive):When
/user/name changes from "Alice" to "Bob", the user-name component automatically re-renders to display "Bob" — no updateComponents needed.Updating the Data Model
UseupdateDataModel to write any JSON value to any path. Affected components re-render immediately.
- v0.9 — updateDataModel
- v0.8 — dataModelUpdate
Initialize the full model:Update a single field:Replace an array:Delete a key (omit
value):End-to-End Reactive Example
This example shows a complete binding cycle: a component bound to a path, the initial data that populates it, and a subsequent update that causes an automatic re-render. 1. Declare the component with a binding:status-display component now shows "Processing…".
3. Update the data later — no component redefinition needed:
status-display component automatically re-renders to show "Shipped ✓".
Dynamic Lists
Bind a container’schildren to an array path to render one template component instance per array item. As the array grows or shrinks, the rendered list updates automatically.
- v0.9
- v0.8
product-card template, paths are scoped to the current array item. A path like { "path": "/name" } resolves to /products/0/name for the first item, /products/1/name for the second, and so on:/products automatically renders a third card.Bidirectional Input Binding
Input components write user changes back into the data model automatically. The agent does not need to listen for individual keystrokes — it reads the full data model value when the user submits.- v0.9
- v0.8
| Component | Binding property | User action | Data model update |
|---|---|---|---|
TextField | value | Types "Alice" | /form/name → "Alice" |
CheckBox | value | Checks the box | /form/agreed → true |
ChoicePicker | value | Selects "ca" | /form/country → ["ca"] |
Slider | value | Drags to 72 | /settings/volume → 72 |
DateTimeInput | value | Picks a date | /booking/date → ISO string |
Best Practices
Use granular path updates. Updating/user/name is far more efficient than replacing the entire root / object — only the affected components re-render:
Client-side expressions (v0.9+) are part of the specification but are catalog- and renderer-dependent. Check your catalog definition for supported expression syntax before relying on them.
Message Reference
Full schema for updateDataModel and all other A2UI messages.
Component Reference
Which properties on each component support data binding.
Catalogs
Define your own catalog with custom component schemas.
Transports
Deliver data model updates over A2A, AG-UI, and more.