Knit UI
GitHub

Playground

Loading playground…

false
Playground
<Radio
  label="Radio option"
  variant="filled"
  size="sm"
  disabled={false}
/>

Examples

Variants

Every visual variant side by side at the default size.

Loading example…

VariantsSourceStorybook

Sizes

All seven sizes from xxs to xxl.

Loading example…

SizesSourceStorybook

Theme

Theme changes the active accent ramp.

Loading example…

ThemeSourceStorybook

Disabled

Disabled state — the control is visually dimmed and cannot be toggled.

Loading example…

DisabledSourceStorybook

With Description

Label, description, and error message all together.

Loading example…

With DescriptionSourceStorybook

With Error

An error message is shown below the label when error is set.

Loading example…

With ErrorSourceStorybook

Label Left

Label positioned to the left of the circle.

Loading example…

Label LeftSourceStorybook

Controlled

Controlled — the checked state is owned by the parent component.

Loading example…

ControlledSourceStorybook

Group

Radio.Group — mutually exclusive selection managed by a surrounding group.

Loading example…

GroupSourceStorybook

Group Controlled

Radio.Group in a controlled state — selection is owned by the parent.

Loading example…

Group ControlledSourceStorybook

Group Disabled

A disabled Radio.Group prevents toggling any of its children.

Loading example…

Group DisabledSourceStorybook

Group Read Only

A read-only Radio.Group keeps the selection visible but prevents changing it.

Loading example…

Group Read OnlySourceStorybook

Card

Radio.Card — a card-shaped selection surface that wraps arbitrary content.

Loading example…

CardSourceStorybook

Card Shadows

Radio.Card with the shadow elevation prop across the shadow ladder.

Loading example…

Card ShadowsSourceStorybook

Indicator

Radio.Indicator — a standalone visual-only indicator not tied to any input.

Loading example…

IndicatorSourceStorybook

Matrix

Full variant × size matrix for visual regression.

Loading example…

MatrixSourceStorybook

Styles

Per-slot styles targets individual parts — here the circle and the label.

Loading example…

StylesSourceStorybook

Props

PropTypeDefaultDescription
aria-describedbystring | undefinedIds of external description elements; merged with description/error ids.
aria-labelstring | undefinedAccessible label when no visible label is provided.
aria-labelledbystring | undefinedId of an external label element. Defaults to the visible label id.
checkedboolean | undefinedControlled checked state.
defaultCheckedboolean | undefinedfalseUncontrolled initial checked state.
descriptionReactNodeDescription rendered below the label.
disabled systemboolean | undefinedfalseDisables the radio.
errorReactNodeError rendered below the description (string nodes get the error theme).
iconRadioIconComponent | undefinedRadioIconInner glyph component for the checked state.
iconColorGetThemeValueForKey<"color"> | OpaqueColorValue | undefinedOverride the glyph colour (defaults to the variant-derived dot colour).
idstring | undefinedId for a11y bindings; auto-generated when omitted.
labelReactNodeRadio optionLabel content rendered next to the control.
labelPosition"left" | "right" | undefined
left · right
'right'Side the label appears on.
onChange((checked: boolean) => void) | undefinedCalled when the radio becomes checked.
radius systemstring | number | undefined
rootRefRef<TamaguiElement> | undefinedRef of the root wrapper element.
shadow system"xs" | "sm" | "md" | "lg" | "xl" | "xxs" | "xxl" | undefined
size system"xs" | "sm" | "md" | "lg" | "xl" | "xxs" | "xxl" | undefined
xxs · xs · sm · md · lg · xl · xxl
'md'Controls the circle diameter.
styles systemSlotStyles<RadioStyles> | undefinedUniform per-slot style passthrough — sugar over the composable parts. Own slots: `circle` (the round box) / `dot` / `icon` (the inner glyph); plus the inherited chrome slots `label` / `description` / `error` / `root` forwarded to the `InlineControl`.
theme systemThemeName | null | undefinedApplies a theme to this element
valuestring | undefinedValue used to match against a surrounding `Radio.Group`.
variant systemRadioVariant | undefined
filled · outline
'filled'Visual style — filled fills the circle, outline keeps it transparent.

Style slots

Every part of Radio can be styled through the styles prop. Explicit props on the component always win over slot styles.

SlotUsage
circlestyles={{ circle: { … } }}
descriptionstyles={{ description: { … } }}
dotstyles={{ dot: { … } }}
errorstyles={{ error: { … } }}
iconstyles={{ icon: { … } }}
labelstyles={{ label: { … } }}
rootstyles={{ root: { … } }}
Accessibility & DOM props (2)
PropType
keyKey | null | undefined
refRef<TamaguiElement> | undefined

Plus 495 inherited style props from Box — the full Tamagui/React Native style surface, including token shorthands like p, mx, bg and c. See Tokens for the scales they accept, or the full list.