Radix UI
Unstyled, accessible component primitives for React. Radix UI is the foundation of shadcn/ui — providing battle-tested accessibility, keyboard navigation, and WAI-ARIA compliance out of the box.
MIT
TypeScript
Why Radix UI?
Building a custom design system on top of accessible primitives
You need WCAG-compliant components without fighting existing styles
Implementing complex UI patterns (modals, popovers, tooltips)
Signal Breakdown
What drives the Trust Score
Download Trend
Last 12 months
Tradeoffs & Caveats
Know before you commitYou want pre-styled components (use shadcn/ui which wraps Radix)
Non-React projects
Simple UIs where accessibility overhead isn't worth it
Pricing
Free tier & paid plans
100% free, open-source (MIT)
Free & open-source
No paid tiers
Alternative Tools
Other options worth considering
Often Used Together
Complementary tools that pair well with Radix UI
Learning Resources
Docs, videos, tutorials, and courses
Get Started
Repository and installation options
View on GitHub
github.com/radix-ui/primitives
npm install @radix-ui/react-dialogQuick Start
Copy and adapt to get going fast
import * as Dialog from '@radix-ui/react-dialog';
export function Modal({ trigger, children }: { trigger: React.ReactNode; children: React.ReactNode }) {
return (
<Dialog.Root>
<Dialog.Trigger asChild>{trigger}</Dialog.Trigger>
<Dialog.Portal>
<Dialog.Overlay className="fixed inset-0 bg-black/50" />
<Dialog.Content className="fixed top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2 bg-white rounded-xl p-6">
{children}
</Dialog.Content>
</Dialog.Portal>
</Dialog.Root>
);
}Code Examples
Common usage patterns
Accessible dropdown
Fully accessible dropdown menu
import * as DropdownMenu from '@radix-ui/react-dropdown-menu';
<DropdownMenu.Root>
<DropdownMenu.Trigger asChild>
<button>Options</button>
</DropdownMenu.Trigger>
<DropdownMenu.Content>
<DropdownMenu.Item onSelect={() => edit()}>Edit</DropdownMenu.Item>
<DropdownMenu.Item onSelect={() => del()} className="text-red-600">Delete</DropdownMenu.Item>
</DropdownMenu.Content>
</DropdownMenu.Root>Tooltip component
Accessible tooltip with delay
import * as Tooltip from '@radix-ui/react-tooltip';
<Tooltip.Provider delayDuration={300}>
<Tooltip.Root>
<Tooltip.Trigger asChild><button>?</button></Tooltip.Trigger>
<Tooltip.Content side="top" className="bg-gray-900 text-white text-xs px-2 py-1 rounded">
Helpful explanation here
<Tooltip.Arrow className="fill-gray-900" />
</Tooltip.Content>
</Tooltip.Root>
</Tooltip.Provider>Community Notes
Real experiences from developers who've used this tool