A2UI Component Catalog
shadcn/ui components mapped to A2UI principles
Adjacency List Model
Unlike nested JSON trees, A2UI uses a flat list where components reference each other by ID. This enables LLMs to generate UI incrementally and update individual elements without regenerating entire hierarchies.
// Traditional nested (problematic for LLMs)
{ "card": { "children": [{ "text": "Hello" }] }}
// A2UI adjacency list (LLM-friendly)
[
{ "id": "card-1", "type": "Card", "children": ["text-1"] },
{ "id": "text-1", "type": "Text", "content": "Hello" }
]Data Binding via Paths
Components connect to data through path expressions rather than embedding data directly. This separates concerns: the LLM defines what to show, the client handles how to fetch it.
// Literal value (static)
{ "value": { "literalString": "Fixed text" }}
// Data binding (dynamic)
{ "value": { "path": "/stores/openCount" }}
// The client resolves paths against its data model:
// dataModel["/stores/openCount"] → 42Children Handling Patterns
A2UI supports two patterns for child components:
Static (explicitList)
Fixed array of component IDs
"children": {
"explicitList": ["id1", "id2"]
}Dynamic (template)
Data-driven rendering
"children": {
"template": "row-template",
"dataPath": "/stores"
}Incremental Updates
The flat structure enables three atomic update operations, allowing LLMs to modify UI progressively:
Send new components via surfaceUpdate
Update existing component properties by ID
Exclude IDs from parent children lists
A2UI Data Flow
Structural arrangement components (Row, Column, List)
Information presentation components (Text, Image, Icon)
User input capture components (Button, TextField, Checkbox)
Content grouping components (Card, Tabs, Modal)
Charts and graphs (A2UI extensions)
Styled container with padding and elevation for grouping related content
Cardexplicit-listTabbed interface for organizing content into switchable panels
Tabsexplicit-listOverlay menu triggered by a button, for actions or navigation
Modalexplicit-listSmall status indicator or label with text content
TextsingleLoading placeholder that mimics content shape
noneStructured data display in rows and columns
ListtemplateClickable element for triggering actions
Buttonexplicit-listCategorical data comparison with horizontal or vertical bars
noneTrend visualization over continuous data points
nonePart-to-whole relationship visualization
noneCard
Styled container with padding and elevation for grouping related content
Cards group related content with padding and elevation.
| Component | Binding Support | Path Properties | Children Type |
|---|---|---|---|
| Card | title, description | explicit-list | |
| Tabs | defaultValue, value | explicit-list | |
| Dropdown Menu | — | — | explicit-list |
| Badge | children | single | |
| Skeleton | — | — | none |
| Table | data | template | |
| Button | disabled | explicit-list | |
| Bar Chart | data, categoryKey, valueKey | none | |
| Line Chart | data, xKey, yKey | none | |
| Pie Chart | data, labelKey, valueKey | none |