Build
Ships todayZephUI widgets
Every renderable kind, with its wire index.
ZephUI is a small set of widgets the device draws — text, rings, lists, buttons, gauges — that you compose into glances and app screens.
The vocabulary, on the screen
The complete vocabulary, generated from the shared kind table and parity-locked to the firmware's own enum — so it cannot drift from what the device actually renders.
- Kinds
- 42
- Streamable
- 41
- Firmware only
- 1
| k | Kind | Name | What it is | Fields | Streaming |
|---|---|---|---|---|---|
| 0 | screen | Screen | Full-screen root: a layout template + a column of children. The usual root of a push_screen tree. | 6 | Streamable |
| 1 | gap | Gap | Fixed vertical spacer between siblings. | 1 | Streamable |
| 2 | text | Text | Body text line; wraps at the display edge. | 3 | Streamable |
| 3 | title | Title | Large heading text. | 3 | Streamable |
| 4 | eyebrow | Eyebrow | Small uppercase context line (pixel-blue mono accent) above the payload. | 3 | Streamable |
| 5 | big | Big | Large display text - the one-glance payload (1-3 words). | 3 | Streamable |
| 6 | list | List | Vertical column of children - typically row nodes (a swipe-up page). | 1 | Streamable |
| 7 | row | Row | The standard list cell: leading icon, title (+ subtitle), trailing switch or chevron. | 8 | Streamable |
| 8 | btn | Button | Pill button: label + optional icon, variant/size/color styling, v12 role + physical-key binding. | 8 | Streamable |
| 9 | btnrow | Button row | Horizontal row of buttons, evenly stretched. | 1 | Streamable |
| 10 | chips | Chips | Wrapping row of label pills (on/off tinted). | 2 | Streamable |
| 11 | slider | Slider | Continuous 0-100 slider. | 3 | Streamable |
| 12 | segslider | Segmented slider | watchOS-style stepped slider: minus/plus buttons flanking a segmented track. | 2 | Streamable |
| 13 | ring | Ring | Single progress ring (full-circle arc). | 6 | Streamable |
| 14 | act | Activity rings | Decorative triple activity rings (fixed demo values). | 1 | Streamable |
| 15 | widget | Widget card | Generic data card (gauge/chart/progress/label variants). | 7 | Streamable |
| 16 | vu | VU meter | Static VU bar cluster (audio-level visual). | 0 | Streamable |
| 17 | listen | Listening halo | Concentric accent circles - the listening indicator. | 0 | Streamable |
| 18 | spinner | Spinner | Indeterminate progress arc. | 0 | Streamable |
| 19 | picker | Picker | Value-row that opens a full-screen select. | 3 | Streamable |
| 20 | clock | Clock | Big mono time + date stack. | 2 | Streamable |
| 21 | applist | App list | Launcher-style column of app rows. | 1 | Streamable |
| 22 | box | Box | Plain container column - the widget-slot content pattern and the modal page wrapper. | 7 | Streamable |
| 23 | grid | Grid | Wrapping N-column grid of children. | 3 | Streamable |
| 24 | stepper | Stepper dots | Progress pills (done/total). | 2 | Streamable |
| 25 | tabs | Tabs | Pill segmented page nav. | 2 | Streamable |
| 26 | toggle | Toggle | Standalone labeled switch card (title + subtitle left, switch right; whole-row tap flips). | 4 | Streamable |
| 27 | select | Select | Checkbox (multi) / radio option group with trailing checks. | 6 | Streamable |
| 28 | section | Section | Inset-joined grouped list: uppercase header + one card, children joined with hairline dividers. | 2 | Streamable |
| 29 | dial | Dial | Radial hub + spokes (thumb-reach action wheel). | 2 | Streamable |
| 30 | banner | Banner | Inline info/warn/error strip: icon + wrapping text on a tinted surface. | 3 | Streamable |
| 31 | progress | Progress bar | Determinate horizontal bar, 0-100. | 4 | Streamable |
| 32 | slot | Widget slot | Glance-face placeholder substituted by the slot resolver at render.Firmware-only BY DESIGN (#328 decision): `idx`/`family` have no CBOR keys because substitution requires the device-side glance-face slot resolver (zui_render_set_slot_resolver) - outside glance composition a pushed slot can only render the dashed unassigned placeholder, so streaming one is never meaningful. Glance-composition IR only. | 0 | Firmware only |
| 33 | pageview | Pageview | Multi-page document root - each child is one page (the modal `body` shape). | 1 | Streamable |
| 34 | choice | Choice | Tappable option list (THE streamable picker): one inset card, a cell per option. | 2 | Streamable |
| 35 | image | Image | A foreground image. The asset reference rides the node id; push the pixels over the asset plane first, then reference them. | 0 | Streamable |
| 36 | layer | Layer | Free-form drawing container - children are placed by absolute x/y and sized by w/h, not flow-laid. | 1 | Streamable |
| 37 | rect | Rect | Filled/stroked rectangle drawing leaf; size comes from w/h, position from x/y inside a layer. | 7 | Streamable |
| 38 | arc | Arc | Stroked partial ring; angles sweep clockwise from 3 o'clock, box comes from w/h. | 5 | Streamable |
| 39 | line | Line | Polyline drawing leaf: up to 16 [x,y] points, stroked. | 4 | Streamable |
| 40 | countdown | Countdown | Self-ticking timer that counts down from the device RTC to an absolute deadline. | 3 | Streamable |
| 41 | bars | Bars | Bar/waveform strip: N vertical bars from a heights array, rendered by one node. | 3 | Streamable |
k is the wire index — the number a pushed CBOR node carries. It is the ordinal in kinds.rs, not a position in this table.


