skrewww

Forms

Radio

Radio is a native radio button for a single option inside a mutually exclusive group.

Value (Unselected/Selected) × State — 8 variants

betaReact AvailableFigma AvailableDocs Partial
React last updated
2026-07-13
Documentation last updated
2026-06-01
Accessibility target
WCAG 2.2 AA (target)
Version
0.2.0-beta

Known open questions

  • Radio indicator remains circular in all shape personalities by design.

Live preview

Native radio inputs stay circular in every shape personality.

Standalone radios sharing a name

How should Radio buttons be grouped?

RadioGroup with disabled option

Billing cycle

Group error

Validation at group level

Shipping method

Select a shipping method.

Purpose

Single selection from a set of mutually exclusive options, all visible at once.

Anatomy

Radio = native input[type=radio] + inline label text.

Variants and states

unselected · selected · disabled · error

When to use

2–6 mutually exclusive options where seeing all choices simultaneously helps the decision.

When not to use

More than ~6 options (use Select). Multiple selections allowed (use Checkbox).

Accessibility

All Radios in one group must share the same name attribute and be wrapped in a fieldset/legend or role="radiogroup".

Keyboard behavior

Arrow keys move selection within a named group using native radio behavior.

Common mistakes

Forgetting the shared group label/legend.

Properties

Value × State as variants. Label (text).

Tokens used

semantic/surface/defaultsemantic/border/defaultsemantic/action/primarysemantic/focus-ring

Component API

PropTypeDefaultDescription
labelstringVisible option label.
namestringShared group name — required for grouping.
valuestringOption value.
checkedbooleanControlled selected state.
disabledbooleanfalseNative disabled state.

React example

Copy React example
import { Radio } from "@/components/ui/Radio";

export function Example() {
  return <Radio name="plan" value="pro" label="Pro" defaultChecked />;
}