Radix UI

Radix UI is a low-level UI component library focused on accessibility and customization. It provides unstyled primitive components that give developers complete design freedom while ensuring WAI-ARIA compliant, accessible UIs. With over 30 components including Dialog, Dropdown, and Tooltip, each can be installed independently for incremental adoption.

modal
accessibilityheadless-uiunstyledprimitivesdesign-system

๐ŸŽฎ Playground

Loading playground...
Use cases
  • โ€ขBuilding design systems with accessibility-guaranteed base component layers
  • โ€ขDeveloping fully customized UI libraries with Tailwind CSS or CSS-in-JS solutions
  • โ€ขIncrementally adding accessible Dialog, Dropdown, Popover components to existing projects
  • โ€ขEnterprise-grade web applications requiring complex interactions (modals, menus, tooltips)
  • โ€ขDeveloping government or financial websites where WCAG compliance is mandatory
Good for
  • โœ“Fully WAI-ARIA compliant with built-in accessibility features like keyboard navigation and screen reader support
  • โœ“Unstyled headless components compatible with any styling solution including CSS-in-JS, Tailwind, and CSS Modules
  • โœ“Individual package distribution enables bundle size optimization and incremental adoption
  • โœ“Written in TypeScript with excellent type safety and flexible API supporting both controlled and uncontrolled patterns
  • โœ“Backed by WorkOS with active community ensuring continuous maintenance and updates
Not good for
  • โœ—No built-in styling requires initial setup time, making it better suited for long-term projects than rapid prototyping
  • โœ—Low-level API has a learning curve requiring understanding of component composition and accessibility patterns
  • โœ—Multiple internal dependencies (@radix-ui/react-* packages) can result in a complex dependency tree
Installation
$ npm install @radix-ui/react-dialog
Example
import * as Dialog from "@radix-ui/react-dialog"

export default function Demo() {
  return (
    <Dialog.Root>
      <Dialog.Trigger>Open</Dialog.Trigger>
      <Dialog.Portal>
        <Dialog.Overlay />
        <Dialog.Content>
          <Dialog.Title>Title</Dialog.Title>
          <Dialog.Description>Description</Dialog.Description>
          <Dialog.Close>Close</Dialog.Close>
        </Dialog.Content>
      </Dialog.Portal>
    </Dialog.Root>
  )
}
Comparison

"More accessible than Headless UI, more flexible than Chakra UI."

Trust Metrics

18.5K

GitHub Stars

18.8M

Weekly Downloads

Last Commit:Feb 13, 2026
Used by
LinearVercelCodesandbox