📄 radixui/primitives/docs/components/toggle-group

File: toggle-group.md | Updated: 11/15/2025

Source: https://www.radix-ui.com/primitives/docs/components/toggle-group

Radix Homepage

Made by WorkOS

Radix Homepage

Made by WorkOS

ThemesThemes PrimitivesPrimitives IconsIcons ColorsColors

Documentation Case studies Blog

Search

/

Overview

Introduction Getting started Accessibility Releases

Guides

Styling Animation Composition Server-side rendering

Components

Accordion Alert Dialog Aspect Ratio Avatar Checkbox Collapsible Context Menu Dialog Dropdown Menu Form

Preview
Hover Card Label Menubar Navigation Menu One-Time Password Field

Preview
Password Toggle Field

Preview
Popover Progress Radio Group Scroll Area Select Separator Slider Switch Tabs Toast Toggle Toggle Group Toolbar Tooltip

Utilities

Accessible Icon Direction Provider Portal Slot Visually Hidden

Components

Toggle Group

A set of two-state buttons that can be toggled on or off.

index.jsxindex.jsxstyles.cssstyles.css

CSS

import * as React from "react";
import { ToggleGroup } from "radix-ui";
import {
	TextAlignLeftIcon,
	TextAlignCenterIcon,
	TextAlignRightIcon,
} from "@radix-ui/react-icons";
import "./styles.css";

const ToggleGroupDemo = () => (
	<ToggleGroup.Root
		className="ToggleGroup"
		type="single"
		defaultValue="center"
		aria-label="Text alignment"
	>
		<ToggleGroup.Item
			className="ToggleGroupItem"
			value="left"
			aria-label="Left aligned"
		>
			<TextAlignLeftIcon />
		</ToggleGroup.Item>
		<ToggleGroup.Item
			className="ToggleGroupItem"
			value="center"
			aria-label="Center aligned"
		>
			<TextAlignCenterIcon />
		</ToggleGroup.Item>
		<ToggleGroup.Item
			className="ToggleGroupItem"
			value="right"
			aria-label="Right aligned"
		>
			<TextAlignRightIcon />
		</ToggleGroup.Item>
	</ToggleGroup.Root>
);

export default ToggleGroupDemo;

Features

Full keyboard navigation.

Supports horizontal/vertical orientation.

Support single and multiple pressed buttons.

Can be controlled or uncontrolled.

Installation


Install the component from your command line.

npm install @radix-ui/react-toggle-group

Anatomy


Import the component.

import { ToggleGroup } from "radix-ui";

export default () => (
	<ToggleGroup.Root>
		<ToggleGroup.Item />
	</ToggleGroup.Root>
);

API Reference


Root

Contains all the parts of a toggle group.

| Prop | Type | Default | | --- | --- | --- | | asChild<br><br>Prop description | boolean | false | | type*<br><br>Prop description | enum<br><br>See full type | No default value | | value<br><br>Prop description | string | No default value | | defaultValue<br><br>Prop description | string | No default value | | onValueChange<br><br>Prop description | function<br><br>See full type | No default value | | value<br><br>Prop description | string[] | [] | | defaultValue<br><br>Prop description | string[] | [] | | onValueChange<br><br>Prop description | function<br><br>See full type | No default value | | disabled<br><br>Prop description | boolean | false | | rovingFocus<br><br>Prop description | boolean | true | | orientation<br><br>Prop description | enum<br><br>See full type | undefined | | dir<br><br>Prop description | enum<br><br>See full type | No default value | | loop<br><br>Prop description | boolean | true |

| Data attribute | Values | | --- | --- | | [data-orientation] | "vertical" \| "horizontal" |

Item

An item in the group.

| Prop | Type | Default | | --- | --- | --- | | asChild<br><br>Prop description | boolean | false | | value*<br><br>Prop description | string | No default value | | disabled<br><br>Prop description | boolean | No default value |

| Data attribute | Values | | --- | --- | | [data-state] | "on" \| "off" | | [data-disabled] | Present when disabled | | [data-orientation] | "vertical" \| "horizontal" |

Examples


Ensuring there is always a value

You can control the component to ensure a value.

import * as React from "react";
import { ToggleGroup } from "radix-ui";

export default () => {
	const [value, setValue] = React.useState("left");

	return (
		<ToggleGroup.Root
			type="single"
			value={value}
			onValueChange={(value) => {
				if (value) setValue(value);
			}}
		>
			<ToggleGroup.Item value="left">
				<TextAlignLeftIcon />
			</ToggleGroup.Item>
			<ToggleGroup.Item value="center">
				<TextAlignCenterIcon />
			</ToggleGroup.Item>
			<ToggleGroup.Item value="right">
				<TextAlignRightIcon />
			</ToggleGroup.Item>
		</ToggleGroup.Root>
	);
};

Accessibility


Uses roving tabindex to manage focus movement among items.

Keyboard Interactions

| Key | Description | | --- | --- | | Tab | Moves focus to either the pressed item or the first item in the group. | | Space | Activates/deactivates the item. | | Enter | Activates/deactivates the item. | | ArrowDown | Moves focus to the next item in the group. | | ArrowRight | Moves focus to the next item in the group. | | ArrowUp | Moves focus to the previous item in the group. | | ArrowLeft | Moves focus to the previous item in the group. | | Home | Moves focus to the first item. | | End | Moves focus to the last item. |

PreviousToggle

NextToolbar

Edit this page on GitHub.