When to use
- Mutually exclusive choices
- Small option sets
- Choices that need comparison
Radio buttons capture one choice from a small set of mutually exclusive options. Use them when users benefit from seeing the options side by side.
Start here before choosing examples or props. These notes explain where Radio helps, where another pattern is better, and what should stay true in product work.
import { Radio } from '@/components/ui/Radio';Use inside a fieldset with a legend. Each Radio renders one option in the group.
Radio states should make the current selection obvious and keep every option readable. Use focus styling on the individual option that currently receives keyboard focus.
The option is available but not currently chosen.
The option is the current choice in a mutually exclusive group.
Focus appears on the active option without moving the control.
The option cannot be selected in the current workflow state.
A radio option only makes sense inside a group. The group legend names the decision; each option label names one possible answer.
The component accepts every native HTMLInputElement attribute on top of the design system props below.
| Prop | Type | Default | Description |
|---|---|---|---|
label | ReactNode | — | Visible label rendered beside the radio circle. Required for accessibility. |
helper | ReactNode | — | Secondary text below the label. Auto-wired to aria-describedby. |
Radio buttons are for small sets where choosing one option automatically excludes the others.
If users can choose more than one item, use checkboxes instead.
Radio buttons are useful when users need to see the full set before deciding.
For long or space-constrained lists, use Select or a searchable pattern when available.
What Radio does not do yet, and what consumers need to compose themselves.
Agents should use radios when the user needs one answer from a small visible set. They should not use radios as status badges, filters, or independent toggles.
import { Radio } from '@/components/ui/Radio';
<fieldset>
<legend>Request status</legend>
<Radio name="requestStatus" value="pending-review" label="Pending review" />
<Radio name="requestStatus" value="approved" label="Approved" />
</fieldset>Radio means one answer from a visible set. If the options are independent, use Checkbox. If compactness matters more than comparison, use Select.