ToggleGroup
Two-state buttons that can be toggled on or off
ToggleGroup arranges two-state buttons into a keyboard-navigable single or multiple selection control.
Features
Full keyboard navigation
Horizontal and vertical orientation
Single or multiple pressed buttons
Controlled or uncontrolled state
Installation
ToggleGroup is already installed in tamagui, or you can install it independently:
yarn
npm
bun
pnpm
Usage
ToggleGroup handles the toggle state logic. For visual grouping with border radius, compose with XGroup or YGroup. Use activeStyle to customize the active state appearance:
For vertical layouts, use YGroup:
API reference
ToggleGroup
ToggleGroup manages toggle state and keyboard navigation. It does not render any visible element by default. Use XGroup/YGroup for visual grouping.
Props
type
"single" | "multiple"
Determines whether a single or multiple items can be pressed at a time.
value
string | string[]
The controlled value of the pressed item(s). Use string for type="single", string[] for type="multiple".
defaultValue
string | string[]
The value of the item(s) to show as pressed when initially rendered.
orientation
"horizontal" | "vertical"
Default:
"horizontal"The orientation of the component, which determines how focus moves: horizontal for left/right arrows and vertical for up/down arrows.
disabled
boolean
Default:
falseWhen true, prevents the user from interacting with the toggle group and all its items.
onValueChange
(value: string | string[]) => void
Event handler called when the pressed state of an item changes.
loop
boolean
Default:
trueWhether or not to loop over after reaching the end or start of the items. Used for keyboard navigation.
disableDeactivation
boolean
Default:
falseWon't let the user turn the active item off. Only applies to type="single".
rovingFocus
boolean
Default:
trueEnable roving focus keyboard navigation between items.
ToggleGroup.Item
ToggleGroup.Item extends View inheriting all the Tamagui standard props, plus:
Props
value
string
A unique value for this toggle item.
disabled
boolean
Default:
falseWhen true, prevents the user from interacting with this item.
activeStyle
StylePiece
Style piece applied when the item is in its active/pressed state. Accepts a style() piece.
activeTheme
string | null
Theme to apply when the item is active. Set to null for no theme change.
Styling active state
Customize the active/pressed state using activeStyle:
You can also use activeTheme to apply a theme when active:
useToggleGroupItem
For custom components inside ToggleGroup.Item that need to know the active state, use the useToggleGroupItem hook:
Source
v2-look ToggleGroup: theme palette, border, hover/press/focus color styling, and the default active (pressed-on) appearance on the unstyled @tamagui/ui ToggleGroup Item. The behavior keeps only structural layout + the size mechanism and emits aria-pressed/data-state. This is the exact source the registry ships — copy it into your app and the examples above import from your copy.
components/tamagui/ToggleGroup.tsxDependencies
yarn add @tamagui/core @tamagui/toggle-groupExpects theme tokens: background, background-hover, background-press, border-color, border-color-hover, border-color-press, outline-color.
Need raw behavior without any skin? tamagui/unstyled re-exports the @tamagui/ui primitives (advanced).