text
Plain prose, and the only block that streams.
Prose. text is what the copilot says when the answer is a sentence rather than a structure: an explanation, a confirmation in words, the paragraph that introduces the blocks under it.
It is the only block whose content streams. Tokens append as they arrive and a caret marks the live edge, so a long answer starts reading immediately instead of appearing all at once several seconds later.
Order 1042 left the Rotterdam depot this morning and is out for delivery. The courier gives a 14:00 to 18:00 window.
Re-rendered in the browser from the SDK’s own scales. Not a screenshot.
Rendered natively by the Flutter SDK and the Web SDK, both since 0.1.0.
When not to use it
Do not use text to lay out data the user has to scan. A markdown table of order lines is drawn character for character, so it arrives as a wall of pipes;
use table for columns, receipt for money, and item_list for rows that can be tapped.
Do not use it to offer choices either. A sentence ending in "reply with 1, 2 or 3" is a quick_replies block that has not been written yet.
Props
Every block also carries type and a required fallback_text of 1 to 300 characters.
| Prop | Type | Required | Constraints |
|---|---|---|---|
markdown | string | Yes | At least 1 character. No maximum. The Web SDK draws a subset of markdown: bold, italic, lists, quotes, code and links. The Flutter SDK draws it as plain text, so **bold** arrives there as four literal asterisks. Write sentences, not syntax. |
On the wire
{
"id": "blk_01",
"type": "text",
"fallback_text": "Order 1042 is out for delivery.",
"props": {
"markdown": "Order 1042 left the Rotterdam depot this morning and is out for delivery. The courier gives a 14:00 to 18:00 window."
}
}Interaction
None. text has no interactive props and emits nothing.
States
| State | What the SDK draws |
|---|---|
| Streaming | Tokens append live with a blinking caret at the end. Reduced motion holds the caret solid rather than removing it. |
| Empty | A block whose markdown is empty draws an ellipsis rather than collapsing to nothing, so the turn does not appear to have skipped a beat. |
| Degraded | If markdown is missing, the SDK renders fallback_text in its place. |
Accessibility
fallback_text for a text block should be the first sentence of the prose, not a description of it. It is what the model sees in later turns, so "Order 1042 is out for delivery." keeps the thread coherent where "a paragraph about the order" does not.