TrademarkTrademark
Docs
Ctrl k
Search docs...
Form Controls

RadioGroup

Updated: October 11, 2026
View on GitHub
Soon
Not released yet. This is on main and is not in any published version yet. It will not install today.

RadioGroup turns a set of RadioButtons into one field: a radiogroup named by its label, one value, one name for the form, and one stop in the page's Tab order. Describe the choices with options.

Without value or defaultValue, nothing is selected until someone picks an option. Without a visible label, name the group with aria-label.

Controlled

Pass value and onChange when something else owns the choice. onChange gets the new option's value, and is not called for the option already selected.

Horizontal

orientation="horizontal" lays the radios out in a row that wraps. The arrow keys work the same way in both orientations.

Disabled

disabled on an option keeps it visible and skips it with the arrow keys. disabled on the group disables every radio, and a disabled group submits nothing.

Custom layout

For a layout options cannot describe, such as radio cards in a grid, put RadioButtons with a value anywhere inside the group. The group owns their checked state, name, disabled and focus, and a RadioButton's own onToggle still runs when it is picked. options, when given too, render first.

Forms

Give the group a name and a form submits the selected value under it, as a set of native radios would. Nothing is submitted while no option is selected.

Keyboard

Only the selected radio is in the page's Tab order, or the first enabled radio while none is selected, so Tab moves past the whole group in one step.

Key
Does
Down / RightFocus and select the next radio, wrapping at the end. Right and Left swap in a right-to-left layout.
Up / LeftFocus and select the previous radio, wrapping at the start.
SpaceSelect the focused radio.

Selection follows focus, as it does for native radios: a radio group is one choice, and moving through it is how you make it.

API reference

Type
Default
options
One RadioButton per option, in order.
RadioGroupOption[]—
value
The selected option's value, when the host owns the state. Pair with onChange.
string—
defaultValue
The option selected first when the group keeps its own state.
string—
onChange
Called with the newly selected value.
(value: string) => void—
name
Submitted with the selected value inside a form.
string—
label
Visible label that names the group.
ReactNode—
description
Helper text under the label, read out as the group's description.
ReactNode—
disabled
Disable every radio in the group.
booleanfalse
orientation
Stack the radios, or lay them out in a row that wraps.
horizontalvertical
vertical
children
RadioButtons with a value, in any layout.
React.ReactNode—
…and every FlexProps propinherited—

RadioGroupOption

Type
Default
valuerequired
What value and onChange carry, and what a form submits.
string—
labelrequired
The radio's label.
React.ReactNode—
description
Helper text under the label.
React.ReactNode—
disabled
Visible, not selectable, skipped by the arrow keys.
boolean—
iconButtonProps
A help button beside the label, as on RadioButton.
IconButtonProps—
Edit this page on GitHub
TrademarkTrademark
Built with curiosity by Lorant One and the Design Engineers Club