Headless UI

Unstyled, fully accessible UI components for React and Vue, built for Tailwind CSS

Library
npm
v2.2.10
28,797 stars
MIT License

Repository Health

Pre-computed score based on development activity, maintenance, community, maturity, and trend momentum. How we score it →
54 /100 Fair
Development Activity 4
Maintenance 48
Community 64
Maturity 60
Momentum 40

Technical Analysis

AI-assessed by reading the actual repository — architecture, code quality, innovation, and documentation. How we score it →
86 /100 Excellent
Architecture 88
Code Quality 84
Innovation 90
Learning Curve 75

Headless UI is a set of completely unstyled, fully accessible UI primitives from the Tailwind CSS team, built for React (with companion Vue and Tailwind plugin packages) and designed to integrate beautifully with Tailwind CSS. It ships fully working components — Menu, Dialog, Listbox, Combobox, Disclosure, and more — that implement correct ARIA attributes, keyboard navigation, and focus management out of the box, while leaving 100% of the visual styling to you.

Rather than wrapping opinionated markup in themeable props, Headless UI hands you render props and data attributes so every pixel is styled with your own Tailwind classes or any CSS approach. It is actively maintained by Tailwind Labs, versioned alongside Tailwind’s own ecosystem, and used by teams who want production-grade accessibility without inheriting a component library’s visual opinions.

What You Get

  • A full set of interactive primitives — Menu, Listbox, Combobox, Dialog, Disclosure, Popover, Tabs, Switch, RadioGroup, and more
  • WAI-ARIA compliant markup and keyboard interactions handled internally via a dedicated state-machine architecture
  • Render-prop and data-attribute APIs (data-headlessui-state) for styling active/selected/open states with any CSS approach
  • An official Vue port (@headlessui/vue) and a companion Tailwind CSS plugin (@headlessui/tailwindcss) for targeting component state in utility classes

Common Use Cases

  • Building custom dropdown menus, comboboxes, and autocomplete inputs without reimplementing keyboard navigation
  • Adding accessible modal dialogs and slide-over panels with correct focus trapping and scroll locking
  • Composing design-system components (tabs, switches, radio groups) that match a Tailwind-based visual language exactly

Under The Hood

Architecture Each component pattern (Dialog, Menu, Listbox, Combobox, …) is backed by a dedicated state machine defined against an abstract Machine<State, Event> base class (src/machine.ts) that manages state via private class fields and a subscriber/selector model, with additional shared machines (e.g. a stack machine for nested dialogs) under src/machines/. A thin React binding layer (src/react-glue.tsx, useSlice) subscribes components to just the state slices they need, keeping re-renders minimal, while src/components/* wires the machine output to DOM elements through shared hooks (use-outside-click, use-escape, use-focus-trap, etc.). This separation of framework-agnostic state logic from framework bindings is also what lets the monorepo maintain parallel React and Vue implementations from a similar internal model.

Tech Stack The library is TypeScript-first (95%+ of the codebase), with peer dependencies limited to react/react-dom (^18 || ^19). Runtime dependencies are narrow and purposeful: @floating-ui/react for popover/combobox positioning, @react-aria/focus and @react-aria/interactions for battle-tested accessibility primitives, @tanstack/react-virtual for virtualized rendering of large Combobox/Listbox option lists, and a use-sync-external-store shim for concurrent-safe external store subscriptions. Builds run through a custom esbuild-based scripts/build.sh that emits dual ESM/CJS bundles plus generated .d.ts/.d.cts typings, orchestrated across the packages/* and playgrounds/* npm workspaces.

Code Quality The @headlessui/react package alone carries roughly 30 Jest test files (via jest.config.cjs, @testing-library/react, jsdom-testing-mocks, and snapshot-diff) covering nearly every component directory — dialog, combobox, listbox, menu, disclosure, and more. Prettier is configured with prettier-plugin-organize-imports and prettier-plugin-tailwindcss, and a husky + lint-staged pre-commit hook runs lint on every commit, giving the codebase consistent formatting and import ordering. Encapsulation is taken seriously even in low-level code — the Machine base class uses native TypeScript private class fields (#state, #subscribers) rather than convention-based privacy.

API Design Consumers import one named component per pattern (<Dialog>, <Menu>, <Combobox>) that renders a sensible default element but supports full polymorphism via an as prop (forwardRefWithAs/useRender utilities), and every stateful sub-part exposes its open/active/selected condition through a data-headlessui-state attribute plus render-prop children — so styling state never requires manually threading booleans through props. Getting started requires no configuration beyond install-and-import, and the same compositional shape (Root → Button/Trigger → Panel/Items) repeats across every component, which flattens the learning curve considerably once the first pattern is learned.

Used by 51 apps in this directory

TypeScript
85%
MIT

LibreChat

AI Assistants · Developer Tools

46,236

Unite every major AI model in one self-hosted chat platform with agents, code execution, MCP tools, and enterprise authentication.

View details
93
Repo Health
81
Technical
62
Dependency
Built with
TypeScript 85%
JavaScript 14%
Updated yesterday
TypeScript
93%
AGPL 3.0

Linkwarden

Bookmarks Archiving · Knowledge Management

20,195

Self-hosted collaborative bookmark manager that captures full-page archives, enables annotation, and keeps your knowledge accessible forever.

View details
90
Repo Health
72
Technical
66
Dependency
Built with
TypeScript 93%
Updated yesterday
Python
84%
MIT

LiteLLM

AI Development · Developer Tools

61,933

Open source AI gateway and Python SDK that gives you one OpenAI-compatible interface to call 100+ LLM providers, with built-in routing, cost tracking, guardrails, and virtual keys.

View details
93
Repo Health
81
Technical
69
Dependency
Built with
Python 84%
TypeScript 11%
Updated yesterday
TypeScript
100%
MIT

Llama Coder

AI Development · Low Code Platforms

7,140

Generate multi-file web apps from a single prompt using open-source LLMs — an open-source alternative to Claude Artifacts.

View details
66
Repo Health
66
Technical
69
Dependency
Built with
TypeScript 100%
Updated 3 days ago
TypeScript
99%
Apache 2.0

Mastra Code

AI Code Assistants

29,041

"A coding agent that never compacts" — a terminal-based AI coding agent built on the Mastra framework, with Observational Memory instead of context compaction, multi-model support, and OAuth login for Claude Max or ChatGPT Plus.

View details
90
Repo Health
73
Technical
65
Dependency
Built with
TypeScript 99%
Updated yesterday
TypeScript
53%
MIT

MentraOS

AI Development · Developer Tools

2,391

The open source operating system and SDK that lets developers build one app and run it across smart glasses from Even Realities, Vuzix, Mentra Live, and more.

View details
92
Repo Health
77
Technical
66
Dependency
Built with
TypeScript 53%
Java 16%
Updated yesterday
Go
72%
MIT

Ollama

AI Development · Developer Tools

184,509

Run Llama, Gemma, DeepSeek, and other open LLMs on your own machine with one command and an OpenAI-compatible API.

View details
92
Repo Health
85
Technical
67
Dependency
Built with
Go 72%
C 19%
Updated 2 days ago
Ruby
63%
MIT

OnetimeSecret

Security

2,970

Generate self-destructing single-use links to share passwords and sensitive data without leaving traces in inboxes or chat logs.

View details
92
Repo Health
81
Technical
72
Dependency
Built with
Ruby 63%
TypeScript 24%
Updated yesterday
Go
36%

OpenPanel

Devops · Hosting Control Panel

764

Docker-powered web hosting control panel that gives every user a fully isolated environment with dedicated web server, database, and networking — VPS-grade security on shared hardware.

View details
87
Repo Health
75
Technical
63
Dependency
Built with
Go 36%
HTML 30%
TypeScript 24%
Updated 2 days ago

Join founders buildingwith open source

Opinionated takes, migration guides, cost-saving tips, and insights from the open source ecosystem.

Subscribe on Substack
Join 750+ subscribers