Headless libraries
State, logic and accessible behaviour for UI elements with no markup or styles of their own; you render and style everything.
How they work
A headless library supplies the hard part of a widget and leaves the rendering to you. TanStack Table defines headless UI as libraries that provide “the logic, state, processing, and APIs for UI elements and interactions” but no markup, styles or pre-built implementations. A table instance gives you header groups and sorted, filtered rows; your code turns them into a <table>, a card list or anything else, with any CSS or component library.
Others ship unstyled components that already render accessible markup. Radix Primitives and Base UI follow the WAI-ARIA design patterns, and Radix takes care of roles, focus management and keyboard navigation; Headless UI from Tailwind Labs is “completely unstyled, fully accessible”, designed for Tailwind CSS. Base UI, from people behind Radix, Material UI and Floating UI, reached 1.0 in December 2025. shadcn/ui builds on such primitives and copies its styled layer into your repository.
Pick headless when you have your own design system, or need the same behaviour in several frameworks. Expect to write more code: every element and every style is yours.
Technologies
What all ui libraries have in common →Sources
- TanStack Table docs: Overview (what is headless UI)
- Radix Primitives docs: Introduction (WAI-ARIA patterns, unstyled)
- Base UI docs: About (headless, WAI-ARIA, team from Radix, Material UI and Floating UI)
- Base UI docs: Releases (v1.0.0, 11 December 2025)
- GitHub: tailwindlabs/headlessui README (completely unstyled, fully accessible)
- shadcn/ui docs: Introduction (open code, headless component architecture)