tailwindlabs/headlessui
Reviewed against Rams quality heuristics: accessibility, color, typography, spacing, components, motion, UX, and craft.
30 files reviewed·July 29, 2026
Top fix
No fixes needed, keep enforcing headless discipline in future components
More findings
- Accessibility wiring is consistent across all reviewed primitives
- No visual styling opinions leak into interaction logic
Verdict
Restraint is the whole story here: a headless library that resists the urge to have opinions about pixels. The biggest risk is that with zero issues surfaced across 30 files, this review only confirms consistency, not edge-case robustness under real-world composition.
Files Rams reviewed
packages/@headlessui-react/src/components/button/button.tsx
packages/@headlessui-react/src/components/checkbox/checkbox.tsx
packages/@headlessui-react/src/components/data-interactive/data-interactive.tsx
packages/@headlessui-react/src/components/description/description.tsx
packages/@headlessui-react/src/components/field/field.tsx
packages/@headlessui-react/src/components/fieldset/fieldset.tsx
packages/@headlessui-react/src/components/focus-trap/focus-trap.tsx
packages/@headlessui-react/src/components/input/input.tsx
packages/@headlessui-react/src/components/label/label.tsx
packages/@headlessui-react/src/components/legend/legend.tsx
packages/@headlessui-react/src/components/portal/portal.tsx
packages/@headlessui-react/src/components/select/select.tsx
packages/@headlessui-react/src/components/switch/switch.tsx
packages/@headlessui-react/src/components/textarea/textarea.tsx
packages/@headlessui-react/src/components/tooltip/tooltip.tsx
playgrounds/react/app/[...slug]/page.tsx
playgrounds/react/app/layout.tsx
playgrounds/react/app/page.tsx
playgrounds/vue/src/components/Home.vue
playgrounds/vue/src/components/combinations/form.vue
playgrounds/vue/src/components/combinations/tabs-in-dialog.vue
playgrounds/vue/src/components/combobox/_virtual-example.vue
playgrounds/vue/src/components/combobox/combobox-countries.vue
playgrounds/vue/src/components/combobox/combobox-open-on-focus.vue
playgrounds/vue/src/components/combobox/combobox-virtual-with-empty-states.vue
playgrounds/vue/src/components/combobox/combobox-virtualized.vue
playgrounds/vue/src/components/combobox/combobox-with-pure-tailwind.vue
playgrounds/vue/src/components/combobox/command-palette-with-groups.vue
playgrounds/vue/src/components/combobox/command-palette.vue
playgrounds/vue/src/components/combobox/multi-select.vue
Working well
- The focus guard buttons use Hidden with HiddenFeatures.Focusable and data-headlessui-focus-guard, giving screen readers and keyboard users a real focusable node instead of a fake tabindex trick.
- The recursive Examples component cleanly distinguishes leaf links from parent categories (h3 for groups, Link for leaves), which keeps the nested list semantically correct without extra markup.
- Disabling the element correctly strips tabIndex, onKeyUp, onKeyPress, and onClick together via the disabled ternaries, so a disabled checkbox can't be triggered through any input path.
- aria-checked correctly reports 'mixed' for indeterminate state before falling back to true/false, which mirrors native <input type="checkbox"> semantics precisely.
Scored July 29, 2026 with Rams Engine v0.0.3 · Engine changelog
This page is an automated design review of tailwindlabs/headlessui’s UI code: 30 files read against 258 versioned rules covering accessibility, color, typography, spacing, components, UX, motion, and craft. The score is out of 100; any confirmed critical issue caps it at 59.
More design scores
Score your own repo.
Free on public repos, no account. The same engine that scored this page reads your UI code and mints a score page like this one.
Public repos only. The full engine reviews the UI code and mints a public score page — we email you the link too. Already-scored repos open instantly.