Timeline
An event feed. Events are data, not components — the same philosophy as DataTable rows.
rendered, live
the wire — click a line to scrub
the contract — Timeline in catalog.json
{
"type": "object",
"description": "An event feed. Events are data, not components — the same philosophy as DataTable rows.",
"properties": {
"component": {
"const": "Timeline"
},
"label": {
"$ref": "https://a2ui.org/specification/v1_0/common_types.json#/$defs/DynamicString",
"description": "Optional heading for the feed, e.g. 'Incident timeline'."
},
"items": {
"oneOf": [
{
"type": "array",
"items": {
"type": "object",
"properties": {
"title": {
"type": "string",
"description": "What happened, one line."
},
"time": {
"type": "string",
"description": "When, as ISO 8601. The renderer formats it (absolute or relative) in the user's locale."
},
"text": {
"type": "string",
"description": "Optional detail line. Inline markdown allowed."
},
"intent": {
"type": "string",
"enum": [
"good",
"bad",
"warning",
"info",
"neutral"
],
"description": "Judgment of this event on the shared scale. Default: 'neutral'."
}
},
"required": [
"title"
],
"additionalProperties": false
}
},
{
"$ref": "https://a2ui.org/specification/v1_0/common_types.json#/$defs/DataBinding"
}
],
"description": "The events, oldest first. Bind with {\"path\": ...} and append by rewriting the array — the feed grows without re-sending the component."
},
"emptyText": {
"$ref": "https://a2ui.org/specification/v1_0/common_types.json#/$defs/DynamicString",
"description": "Shown while the bound items array is empty. Quiet and factual."
}
},
"required": [
"component",
"items"
]
}the prompt-pack — paste into your agent
### Timeline — an event feed
Events are data, not components — the same philosophy as DataTable rows. Append events by
rewriting the bound array; the feed grows without re-sending the component.
| prop | type | required | notes |
| ----------- | ------------------- | -------- | -------------------------------------- |
| `items` | array \| `{"path"}` | yes | events, oldest first; item shape below |
| `label` | string | no | heading, e.g. `"Incident timeline"` |
| `emptyText` | string | no | shown while the feed is empty |
Item shape — `title` required; `time` is ISO 8601 (the renderer shows it humanized); `intent`
judges the single event:
```
{"title":"Canary healthy","time":"2026-08-17T14:21:40Z","intent":"good","text":"All probes passing on pod 1."}
```
```
{"id":"feed","component":"Timeline","label":"Rollout so far","items":{"path":"/events"},"emptyText":"Nothing yet."}
```