Components

Every type from the Glance component registry. Each node has id, type, optional style, and type-specific bindings. Style fields listed here are the ones the interpreter reads. Chart, grid, table, and views are Pro+ at author time.

Extra style keys are ignored. Wrong CSS names do nothing — see Design System. This list is generated from the same registry the API and iOS app use.

container

layout · children allowed

Node field layout (not style): vertical | horizontal | z-stack. Optional href makes the whole block tappable.

KindFields
Bindingshref (url, optional)
Stylepadding, background, backgroundImage, cornerRadius, spacing, alignment, width, height, flex, borderColor, borderWidth, opacity

spacer

layout

Use flex: 1 to push a footer to the bottom on large widgets.

KindFields
Bindings
StyleminLength, flex

text

content

Set maxLines: 1 on titles and hero lines in small and medium widgets.

KindFields
Bindingsbinding (string, required)
StylefontSize, fontWeight, fontFamily, color, maxLines, alignment

image

content

HTTPS URLs only on device. contentMode is fill or fit. fillContainer stretches to the parent.

KindFields
Bindingsbinding (url, required)
Stylewidth, height, cornerRadius, contentMode, fillContainer

icon

content

binding is an SF Symbol name (for example bag.fill). weight styles the symbol, not fontWeight.

KindFields
Bindingsbinding (string, required)
StylefontSize, color, weight

avatar

content

image is optional; fallback initials show when the URL is empty.

KindFields
Bindingsimage (url, optional), fallback (string, optional)
Stylesize, backgroundColor, textColor

progress_bar

indicator

binding is 0–100.

KindFields
Bindingsbinding (number, required)
Styleheight, trackColor, fillColor, cornerRadius

circular_progress

indicator

Typical size ~70 and lineWidth ~5 inside an 82×82 container.

KindFields
Bindingsbinding (number, required)
StylelineWidth, trackColor, fillColor, size

stat

indicator

Hero metrics. suffix and decimals are style, not bindings.

KindFields
Bindingsvalue (number, required), label (string, optional)
StylevalueFontSize, labelFontSize, suffix, decimals, color, alignment

status_dot

indicator

gap is valid here (space between the dot and the label). On containers use spacing, not gap.

KindFields
Bindingslabel (string, required), dotColor (color, optional)
StyledotSize, fontSize, color, gap

badge

indicator

Short pills and tags.

KindFields
Bindingsbinding (string, required)
StylebackgroundColor, color, fontSize, cornerRadius, padding

divider

decoration

orientation is horizontal or vertical.

KindFields
Bindings
Stylecolor, thickness, padding, orientation

gradient

decoration · children allowed

Linear wash, often as the root. Children are allowed.

KindFields
Bindings
Styletype, startColor, endColor, angle, padding, cornerRadius, spacing, alignment

button

interactive

Tappable action. href is required.

KindFields
Bindingshref (url, required), label (string, optional)
StylebackgroundColor, color, fontSize, cornerRadius, padding

timer

time

Countdown to a date binding. Shows 0:00 after the target.

KindFields
Bindingsbinding (date, required)
StylefontSize, color, fontWeight

clock

time

Live current time. Optional binding is a timezone identifier. format: omit for locale short time, or 24h.

KindFields
Bindingsbinding (string, optional)
StylefontSize, color, fontWeight, format

date

time

Bind ISO 8601 datetimes here, not to text. Set style.format — see the date formats table.

KindFields
Bindingsbinding (date, required)
StylefontSize, fontWeight, fontFamily, color, format

relative_time

time

“2h ago” / “in 3 days” from a date binding.

KindFields
Bindingsbinding (date, required)
StylefontSize, fontWeight, fontFamily, color

shape

decoration

Free v2. variant is circle | rectangle | capsule | line | triangle. size wins over width/height. fillColor, strokeColor, and opacity accept maps (from + stops or when). Line ignores fill. Optional href.

KindFields
Bindingshref (url, optional)
Stylesize, width, height, fillColor, strokeColor, strokeWidth, cornerRadius, opacity

calendar

time

Free v2. Does not call EventKit. events is event[] ({ start, title, end?, color? }). variant is agenda | columns | month. Omit day/month to use today / this month on-device. columns uses node days: 1, 3, or 7. Month shows dots, not titles. Style: headerFontSize/headerColor, eventFontSize/eventColor, dotColor, todayColor, gridColor, maxEvents.

KindFields
Bindingsevents (event[], required), day (date, optional), month (date, optional)
Stylewidth, height, headerFontSize, headerColor, eventFontSize, eventColor, dotColor, todayColor, gridColor, maxEvents, opacity

chart

indicator

Pro+ v2 (family_charts). variant is bar | line | pie | candle | scatter. Line/scatter/candle: x number[] (unix or hour-of-day; ISO date strings accepted) + y number[]. Bar: y required, optional x string[] categories. Pie: y + labels, max 8 slices. Others max 24 points. Default pie palette: #7B61FF #34C759 #FF9500 #FF3B30 #007AFF #AF52DE. showAxes false is a sparkline. showAxes true draws the plot plane (grid, Y scale, X labels). Bar-only showAverage: true draws a dashed rule at mean(y) so each bar can be judged against a typical day; optional averageColor (default #636366). Pair with showAxes. Line/pie/scatter/candle ignore it. innerRadius 0.55 is a donut. curve is linear | smooth. Do not use bar_chart / pie_chart.

KindFields
Bindingshref (url, optional), y (number[], optional), labels (string[], optional), open (number[], optional), high (number[], optional), low (number[], optional), close (number[], optional), sizes (number[], optional)
Stylewidth, height, strokeColor, strokeWidth, fillColor, showAxes, showLabels, labelFontSize, labelColor, axisColor, orientation, barGap, cornerRadius, showValues, colorScale, showAverage, averageColor, showDots, dotSize, curve, size, innerRadius, colors, upColor, downColor, opacity

grid

indicator

Pro+ v2 (family_grid). variant is activity (omit = activity). rows and columns are positive ints on the node (not bindings). binding is number[] of length rows × columns, max 400 (7×52 fits). cellShape is square | circle | triangle. cellGap default 2, cellCornerRadius 2. colorScale maps each cell value; emptyColor (#EBEDF0) is zero. Week strip is rows: 1, columns: 7. No per-cell tap.

KindFields
Bindingshref (url, optional), binding (number[], required)
Stylewidth, height, cellShape, cellGap, cellCornerRadius, colorScale, emptyColor, opacity

table

indicator

Pro+ v2 (family_table). columns and cells are string[] bindings — columns: 3 (a number) is illegal here. rows is optional row headers. cells are row-major. Max 4 columns × 6 rows. Numbers in cells coerce to string. colorScale heats a cell only if the string parses as a number. Style: showColumnHeaders, showRowHeaders, headerBackground, headerColor, cellColor, cellFontSize, gridColor, gridWidth, cellPadding. Clip, no scroll.

KindFields
Bindingshref (url, optional), cells (string[], required)
Stylewidth, height, showColumnHeaders, showRowHeaders, headerBackground, headerColor, cellColor, cellFontSize, gridColor, gridWidth, cellPadding, colorScale, opacity

Date formats (`date` component)

Cloud integrations store datetimes as ISO 8601 strings. Bind them to the date component (or relative_time for relative phrasing) — not text, which shows the raw ISO string on device. Set style.format on the node:

formatDisplay
shortDate only — locale short date (e.g. 04/08/26)
mediumDate only — locale medium date (default)
longDate only — locale long date
timeTime only — locale 12h/24h
datetimeDate + time — locale short date and time
isoyyyy-MM-dd

bar_chart and pie_chart are invalid names. Use type: "chart" with variant: "bar" or "pie". Do not invent webview or extra types. Full recipes for mapping, views, and every density style live in the design system and the design skill.