Radio group
Vertical list: label + description, one chosen (the filled dot). Tab in, Arrow to move + select
Inline / horizontal: compact single choice on one line
Radio cards: selectable cards, the chosen one gets a cyan ring + wash
Disabled option: inert but still legible (Plan mode is locked)
Error / required: warm ring + a message (color is never alone)
Sizes: sm and md
Selection changed 0 times. The island is live.
Parameters
Section titled “Parameters”Radio group is the mutually-exclusive single choice, distinct from its selection-control siblings: a checkbox is multi-select (box + tick, with a tri-state mixed), a switch is an instant on/off setting (track + thumb), and a segmented control is single choice for a small, flat set of peers (no per-option description). Reach for a radio group when options need labels and descriptions, or for 4+ choices.
Real divergences between the shipped platforms:
- All three platforms draw the circle and dot. Voice consumes the published
NockerlRadio, so macOS is no longer the odd one out; where the choice is a short set of peers it reaches forNockerlSegmentedinstead, and a long list still falls back to aMenuorPickerwith a checkmark. The web demo’s radio cards and the error/required group are designed here first, so this page is their spec rather than a report on either app. - Selection treatment. Compose/web: a circle with a centered cyan dot. Swift: a cyan outline on the chosen segment. One single-choice expression per platform: unified, but the marks differ by platform idiom.
- Roving focus. Web uses roving
tabindex(one tab stop, Arrow keys move + select); Compose gets this free fromModifier.selectableGroup(); Swift’s segmented buttons are individually focusable.