A2UI v0.9 Basic Catalog Components
The Basic Catalog defines the component types and properties an agent may request. In v0.9, each component is a flat object with an id, a string component discriminator, and component-specific properties. The catalog schema—not an example page—is authoritative.
Layout
Row and Column reference child component IDs. Fixed children use an array; data-driven children may use the template form defined by ChildList.
{"id":"root","component":"Column","children":["heading","actions"],"justify":"start","align":"stretch"}
{"id":"actions","component":"Row","children":["cancel","save"],"justify":"end","align":"center"}
The allowed justify and align values are constrained by the catalog. Children cannot be declared inline.
Text and media
Text accepts a literal string or a dynamic value such as a data-model path. Its variant is a semantic hint: h1 through h5, body, or caption.
{"id":"heading","component":"Text","text":"Review order","variant":"h2"}
{"id":"status","component":"Text","text":{"path":"/order/status"}}
Image uses url, an optional accessibility description, fit, and a size/style variant. The host must enforce URL policy and supply safe loading behavior.
{"id":"photo","component":"Image","url":"https://images.example.com/item.webp","description":"Blue ceramic cup","fit":"cover","variant":"mediumFeature"}
Icon accepts names defined by the catalog or an allowed SVG-path object. Hosts should keep icon-only controls accessible and must not treat arbitrary SVG or URLs as trusted.
Inputs and actions
TextField uses label, an optional data-bound value, and a variant such as shortText, longText, number, or obscured.
{"id":"email","component":"TextField","label":"Email","value":{"path":"/contact/email"},"variant":"shortText"}
Button references a child component and requires an action. A server event is nested under action.event.
{"id":"save-label","component":"Text","text":"Save"}
{"id":"save","component":"Button","child":"save-label","variant":"primary","action":{"event":{"name":"saveOrder","context":{"orderId":{"path":"/order/id"}}}}}
The action requests an event; it does not authorize one. The host and server must validate the name and context, check user permission, and protect consequential operations against duplicate submission.
Containers
Card has one child ID. Wrap multiple elements in a Row or Column first.
{"id":"card","component":"Card","child":"card-content"}
Modal identifies a trigger component and a content component:
{"id":"details","component":"Modal","trigger":"open-details","content":"details-content"}
The Basic Catalog also includes other display, media, selection, and input primitives. Inspect the exact v0.9.1 Basic Catalog schema before using a property. A custom catalog may add, remove, or restrict components, so validate against the catalog negotiated by the client.