What it is
A control for choosing exactly one option from a small, fully visible set of mutually exclusive choices. Selecting one Radio in a group always deselects whichever was previously selected — the group holds exactly one truth at a time, which is what separates it from Checkbox.Live example
Exports
Vocabulary
Radio’s own property naming is internally consistent, unlike Checkbox’s. Both the bare
Radio component and the Radio + Label composite use Selected=true/false in the Figma
library — no split between a Checked atom and a Selected composite the way
Checkbox has.Choose Radio when
- The set of options is small — roughly five or fewer — and showing every option helps the reader compare them directly, the same threshold Select draws the opposite fork at.
- Exactly one option must be true.
Choose something else when
Anatomy
Variants, sizes, and states
Confirmed from the Figma library, not source.
Selected=true/false × State=Default/ Hover/Disabled/Focused — 8 combinations, on both the bare control and the
Radio + Label composite.Edge and failure states
Tokens
Composition
Pairs with a control label immediately trailing it (LTR) — see FieldLabel’s control-label vocabulary. A group of Radios is exposed as a set with its own group name, distinct from any individual option’s label — see TITAN-RADIO-02.A Radio group is a real, decided container, not an ad hoc wrapper. The
form-input-radio-group-offset token (-0.5rem) applies specifically to a group’s
container, trimming the group’s outer edge so an individual Radio’s own padding doesn’t
push the group past a sibling field’s edge. A token existing for this implies the group
wrapper is a modeled part of the system, not just a convenient <div>.FormInput with type="radio" — it also auto-selects the first option when no value is given.
Unlike Input, Select, and Checkbox, source publishes no named anti-pattern story calling out a
hand-assembled RadioGroup specifically; the same composition guidance applies, but with that
one difference in evidence — see Open issues.
Content
Accessibility
- Renders native
<input type="radio">elements sharing onename, which is what makes them mutually exclusive at the platform level. - The group is announced as a set (a fieldset with a legend, or the equivalent grouping role) with its own accessible name, separate from any individual option’s label.
Constraints
Known issues
Radio: open issues
Divergences, open decisions, and undocumented gaps for Radio.
Why it works this way
Exclusivity is the entire point of Radio, and the group container being a real, tokened part of the system (not an assumed wrapper) is what lets that exclusivity extend to layout — a group renders as one visual unit with one edge, not a loose row of independently-positioned circles that happen to share aname attribute.
A single-option group is disallowed because a choice with one answer isn’t a choice; if a
option set can shrink to one at runtime, the composition needs to decide what replaces the
Radio group at that point rather than rendering a Radio group that offers nothing to decide.
Status
Related
- FieldLabel — the control-label pairing every Radio uses
- Checkbox — the independent-choice counterpart
- Select — the collapsed alternative once the option count grows
- Form validation — decides whether a selection is required