ReferenceComponents

Component catalog

The twenty-one blocks, what each is for, and which page explains it.

An assistant message is an ordered array of blocks. Every block carries type, a required fallback_text of 1 to 300 characters, and typed props.

The catalog holds twenty-one types. Twenty of them the model may emit through the render_ui tool; confirm_card is the exception, synthesized by our servers from your action manifest so a hallucination cannot misstate what a user is approving.

The Flutter SDK renders all twenty-one natively as of 0.1.0.

Every block

Every block the SDK draws, on one page. Pick a theme from the console's starting palettes. A block with layouts of its own (products, the order tracker) has them under its name, which opens its reference page.

Theme

Re-rendered in the browser from the SDK’s own scales. Not a screenshot.

Answer

The blocks that only have to answer.

Order 1042 left the Rotterdam depot this morning and is out for delivery. The courier gives a 14:00 to 18:00 window.

text

Plain prose, rendered as written: the SDK draws no markdown, so asterisks and pipes arrive as themselves.

Free returns within 30 daysUnworn shoes in the original box can go back at any pickup point.
Start a return
info_card

Icon + title + body + optional CTA. The generic workhorse card.

media_gallery

Pictures of ONE thing, once it has been chosen - the room, the product, the place.

Returns policyUnworn shoes can be returned within 30 days for a full refund. Refunds land within 5 business days.
Shipping & returns FAQ
article_card

A passage from the knowledge base with the source named.

Only two pairs left in size 44Trail Circuit restocks in about three weeks.
status_banner

The outcome of something that HAPPENED: an order placed, a payment declined, a booking held, a limit reached.

Choose

Options the user can act on without typing a word.

Track order 1042Size guideStart a return
quick_replies

Up to 6 suggestion chips; each tap sends a reply.

Aero Glide 2, size 43Order 1042 · out for delivery
$129
Court Low, size 42Order 1039 · delivered 12 Aug
$95
Trail Circuit, size 44Order 1017 · delivered 2 Jul
$149
item_list

Rows: image, title, subtitle, one trailing value, tap action.

Best sellerAero Glide 2Volt / white★★★★★★★★★★4.7 (1,284)$129
Court LowBone leather★★★★★★★★★★4.2 (96)$95
Trail CircuitSlate / moss$149
product_cards

A set of things the user is choosing between: products, hotels, listings, plans.

Layout
Fitting at Neon Kicks AmsterdamWed 2 Sep
10:0011:3015:00
Thu 3 Sep
09:3013:00
datetime_slots

Tappable availability slots for booking flows.

Free$0
Standard delivery30-day returns
Current plan
Club$9/mo
Next-day delivery60-day returnsFree gait analysis
Join Club
plan_comparison

2-4 plan columns with features and CTAs.

Size
41424344
44 is sold out.
variant_picker

One choice out of a small set that differs only by an attribute: size, colour, capacity.

Act

Where the user commits: typed input, and the approval our servers build.

Start a return
Order number1042
ReasonChoose one
Pickup dateOptionalPick a day
Send
form

Typed input fields with a submit button; values come back as a form submission.

Gait analysis and fittingNeon Kicks Amsterdam, Haarlemmerstraat 24
Wednesday 2 September, 10:00 to 10:45
Fitting room 2, ground floor
FitterMeral Doğan
BookingFIT-2291
Confirm the fitting
booking_card

Slot/venue summary with an optional confirm CTA.

This cannot be undoneCancel order 1042 and refund $129 to the original card?
Order1042
Refund$129.00
ConfirmGo back
confirm_card

Synthesized by our servers from your action's template.

Built by our servers

Report

Numbers, money and state, laid out to be read at a glance.

Spent$1,284+18% vs Jul
Orders9+2 vs Jul
Saved$96Same as Jul
stat_group

Row of KPIs: label, value, optional delta and trend.

Orders a month4in Aug, the most this year
chart

line | bar | donut with labels and up to 3 series.

EU
40
41
42
43
UK
6.5
7
8
9
US men
7.5
8
9
10
Foot length
25.0 cm
25.7 cm
26.3 cm
27.0 cm
table

Compact data table, at most 6 columns and 20 rows.

Order 1042Out for delivery
  1. Ordered22 Aug, 09:14
  2. Packed in Rotterdam23 Aug, 17:02
  3. Out for delivery26 Aug, 07:40
  4. Delivered
order_tracker

Step timeline with done/current/pending statuses.

Layout
Order 1042USD
Aero Glide 2, size 43$129.00
KICKS10 discount−$12.90
Subtotal$116.10
Tax$5.00
Total$121.10
receipt

Line items with subtotal, tax and total.

Order 1042
Placed21 Aug
ItemsAero Glide 2, size 43
StatusShipped
key_value

Label-and-value rows: order details, account details, the specifics behind a booking.

Kicks Club
Pairs toward a free pair2 of 5
Resets every calendar year.
progress

Up to 6 bars of value-against-a-limit: data used against an allowance, sessions completed against a goal, days into a streak.

At a glance

ComponentWhat it is for
textPlain prose, rendered as written. The only block that streams token by token.
quick_repliesUp to six suggestion chips. Each tap sends a reply.
info_cardIcon, title, body and one optional action.
item_listTappable rows with a thumbnail and a trailing value.
product_cardsOne product card, or a rail of them.
confirm_cardServer-built approval for a write or destructive action.
formTyped fields and one submit, returned as a form submission.
datetime_slotsTappable availability, grouped by day.
booking_cardA reservation summary with an optional confirm.
stat_groupUp to six KPIs with optional deltas.
progressValue against a limit, when the proportion is the answer.
chartLine, bar or donut, up to three series.
tableUp to six columns and twenty rows, first column sticky.
order_trackerA step timeline with done, current and pending.
receiptLine items, subtotal, tax and total.
plan_comparisonTwo to four plans side by side.
media_galleryAn image grid or a carousel.
status_bannerA success, info, warning or error notice.
key_valueLabel-and-value rows: the detail sheet for one thing.
variant_pickerOne choice out of a set that differs by size, colour or capacity.
article_cardA retrieved passage with its source named.

Actions

Interactive props carry a closed union, and the SDK executes nothing outside it.

KindWhat it does
replyPosts its text as if the user had typed it.
app_actionNot legal in block props. Every interactive prop is typed reply | open_url, so a block carrying an app_action fails validation of the whole request. It exists in the wider UIAction union for the day the server stamps one with an invocation_id; making it unrepresentable is what stops a dead control being drawn.
open_urlOpened in an in-app browser, or handed to your RendelConfig.onOpenUrl when you set one. https only.
confirm / cancelLegal on confirm_card alone, never in model output.

Version safety

The SDK declares which components it can draw on every request, and the server builds the model's toolset from the intersection of its catalog and that declaration. A build in the field is never offered a component it cannot render, so an old binary is safe by construction rather than by luck. Unknown types render their fallback_text.

Props are only ever added. A breaking change to a prop mints a new type name instead of mutating one in place, which is why the catalog version moves for envelope changes and not for new blocks.

Replacing a renderer

ComponentRegistry.register(type, builder) swaps the widget used for a catalog type, so you can draw product_cards with your own card and keep the other twenty. Register before the first Rendel.open.

ComponentRegistry.register('product_cards', (context, block, dispatch) {
  return MyProductRail(props: block.props, onTap: dispatch.onAction);
});

The SDK exports the primitives the built-ins are made of (RendelPressable, RendelActionButton, RendelChip, RendelControlShell, RendelOverline, RendelSwap, RendelPulse), so a replacement presses, encloses and breathes like the rest of the catalog instead of like stock Material.

The handshake declares catalog types only, so registering a type that is not in the catalog does not expose a new component to the model. Host-defined component types are a later release.

About the previews

The block images on these pages are re-renders, not screenshots. They are built from the renderer's own scales: the RendelTypeScale, RendelSpaceScale and RendelRadiusScale defaults documented in Theming, a field for a readout and an edge for a question, and the accent only on what you can act on. You can recognise a widget when you meet it, but they are drawn in the browser and cannot show you the real thing on a real device.

For that, run the component gallery in the Neon Kicks example app: it renders every block through the real registry with realistic fixtures, and has a switch for the light and dark token maps.

cd sdk/flutter/rendel/example && flutter run