A2UI Component Catalog

shadcn/ui components mapped to A2UI principles

Understanding A2UI Principles
How Agent-to-UI communication works and why it matters

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"] → 42

Children 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:

Add

Send new components via surfaceUpdate

Modify

Update existing component properties by ID

Remove

Exclude IDs from parent children lists

A2UI Data Flow

LLM
Intent
Renderer
UI
A2UI Component Model
A2UI uses an adjacency list model with ID-based references, enabling LLMs to generate UI incrementally
Layout0

Structural arrangement components (Row, Column, List)

Display3

Information presentation components (Text, Image, Icon)

Interactive1

User input capture components (Button, TextField, Checkbox)

Container3

Content grouping components (Card, Tabs, Modal)

Data Visualization3

Charts and graphs (A2UI extensions)

Card
Card
Standard

Styled container with padding and elevation for grouping related content

A2UI:Card
groupingelevationpaddingheader+1
Data binding supported
Children: explicit-list
Tabs
Tabs
Standard

Tabbed interface for organizing content into switchable panels

A2UI:Tabs
navigationcontent-switchingkeyboard-accessible
Data binding supported
Children: explicit-list
Dropdown Menu
DropdownMenu
Standard

Overlay menu triggered by a button, for actions or navigation

A2UI:Modal
overlayaction-listkeyboard-navigationnested-menus
No data binding
Children: explicit-list
Badge
Badge
Standard

Small status indicator or label with text content

A2UI:Text
status-indicatorlabelvariants
Data binding supported
Children: single
Skeleton
Skeleton
Extension

Loading placeholder that mimics content shape

loading-stateplaceholderanimation
No data binding
Children: none
Table
Table
Standard

Structured data display in rows and columns

A2UI:List
data-displaysortingrow-selectionpagination
Data binding supported
Children: template
Button
Button
Standard

Clickable element for triggering actions

A2UI:Button
click-actionvariantssizesloading-state+1
Data binding supported
Children: explicit-list
Bar Chart
Chart (Bar)
Extension

Categorical data comparison with horizontal or vertical bars

data-viztooltipslegendsresponsive
Data binding supported
Children: none
Line Chart
Chart (Line)
Extension

Trend visualization over continuous data points

data-viztooltipstrend-linesresponsive
Data binding supported
Children: none
Pie Chart
Chart (Pie)
Extension

Part-to-whole relationship visualization

data-viztooltipslegendsdonut-variant
Data binding supported
Children: none
Live Examples
Interactive demonstrations of each shadcn component

Card

Styled container with padding and elevation for grouping related content

Example Card
Card description text

Cards group related content with padding and elevation.

Data Binding Reference
How A2UI components connect to data via path expressions
ComponentBinding SupportPath PropertiesChildren Type
Cardtitle, descriptionexplicit-list
TabsdefaultValue, valueexplicit-list
Dropdown Menuexplicit-list
Badgechildrensingle
Skeletonnone
Tabledatatemplate
Buttondisabledexplicit-list
Bar Chartdata, categoryKey, valueKeynone
Line Chartdata, xKey, yKeynone
Pie Chartdata, labelKey, valueKeynone