Radio group
One choice from a few: the dot pops into the new circle, or, as cards, one selection frame glides from card to card.
Used forPlan pickersShipping and deliverySettingsOnboarding questions
Install with the shadcn CLI
Templates
Need the whole page?
43 Next.js landing pages, each designed from scratch. Try any of them live; one is $39, all of them $99, and 5 are free.
Where it’s used
Plan pickers
Cards with a price on the right.
Shipping and delivery
Options with a description line each.
Settings
A short vertical list of exclusive choices.
Onboarding questions
Horizontal options in a single row.
What it handles for you
Card-style radios often lose arrow-key navigation because they are built from buttons. These are native radios with the frame drawn over them.
One moving frame
Measured from layout, thrown to the new card with a slight overshoot.
Native keyboard
Arrow keys move and select, Tab enters at the chosen one.
Cards or list
Same API; cards add a description and an aside.
Forms
A real name and value for each option.
Overview
Radio cards usually blink a ring off one card and onto another. Here the selection is one frame that glides to the new card, easing its height when the cards differ, while the dot shrinks out of the old circle and pops into the new one. Real radio inputs underneath, so arrow keys and forms work natively.
States
- list
- The dot pops into the new circle (380ms, slight overshoot) as it shrinks out of the old.
- cards
- The frame glides to the new card (420ms) and its height eases (380ms).
- focus
- The ring and halo on the circle, from the keyboard.
Usage
Props
| Prop | Type | Description |
|---|---|---|
| options | RadioOption[] | value, label, description, aside, disabled. |
| value / defaultValue | string | Chosen value. |
| onValueChange | (value: string) => void | Called on choice. |
| label | string | Accessible name (a legend). |
| showLabel | booleandefault false | Show the legend. |
| variant | "list" | "cards"default "list" | Plain dots or cards. |
| orientation | "vertical" | "horizontal"default "vertical" | Direction of the options. |
Accessibility and motion
- A fieldset with a legend; disabled disables the whole group.
- Reduced motion: the frame and dot move at once.
Requirements
React 19, Tailwind CSS v4 and shadcn/ui theme variables (any style, light and dark). Icons from lucide-react.
The CLI also installs ui-interaction-motion.
Source
Registry item: /r/radio-group.json


