Radio
Single-pick selection: stacked, inline, card-style.
One job, a platform's own control: iOS has no radio button, so there a single choice is a checkmark list, the inline picker of a grouped form. Each option's label leads and the chosen option carries a trailing check, and a RadioGroup's options form one inset-grouped section with a hairline between two rows. The web and Android keep the ring and dot, and the role is radio on every platform. On iOS the list stays vertical when the group asks for a row (a list has no row form), and card options stay tiles that mark the choice with the same trailing check.
Pass ref to access the interactive radio row, preserving group navigation. Use useRef<ComponentRef<typeof Radio>>(null) from React, or useRef<View>(null) with React Native's View type. Object and callback refs are supported and detach on unmount. Calling ref.current?.focus() or .blur() delegates to the host without activating the control. Browser focus is supported; native focus depends on the platform and React Native version, and is separate from accessibility focus.
On the web, Space activates the focused control on key release, and Enter also activates it. Holding Space does not repeat the change. Moving focus away, disabling the control, or composing text cancels a pending Space press. RadioGroup arrow keys continue to move focus and selection.
iOS
Hobby
Pro
Enterprise
Android
Hobby
Pro
Enterprise
Web
tsx
Default
Inline
Card
With description
Props
RadioGroup
Radio
Do & Don’t
Default selection
Don’t
Leaving a radio group with nothing selected forces an extra decision and can submit empty.
Do
Plan
Hobby
Pro
Enterprise
Pre-select a sensible default so the common path needs no clicks, and name the set with the group's own label.
Stacked
Don’t
Center-aligning the control floats it to the vertical middle of a two-line label, leaving it visually unattached to the title it controls.
Do
Pro
For growing teams that need more control.
Pass a description and the control stacks the title over its secondary line for you, the mark aligned to the title (the ring to its first line on the web and Android, the check centered on the row on iOS).
Inline
Don’t
Cramped spacing between options makes each label blur into the next radio, so it is hard to tell which dot belongs to which choice.
Do
Hobby
Pro
Enterprise
Keep generous spacing between options and tighter spacing inside each so every label clearly pairs with its own control.
Card
Don’t
When the selected card keeps the same plain border, only the tiny native dot signals the choice and the active card is easy to miss.
Do
Pro
For growing teams.
Enterprise
Advanced security.
Give the selected card a primary border and tinted fill so the whole tile reads as chosen, not just the dot. Pass card and the control derives that treatment from its checked state automatically.