A set of completely unstyled, fully accessible UI components for React, designed to integrate beautifully with Tailwind CSS.
Last release 4 months ago
13 Apr 2026
Release timing varies
gaps range from 8 days to 4 months
Nearly every release is documented
notes for 60 of the last 60 stable releases
Nothing withdrawn
no release was ever pulled
6 years old
819 releases · first in 2020
Release timeline
819 releases since 2020Releases
- 1.4.28 Nov 2021
- 1.4.130 Aug 2021
- 1.4.029 Jul 2021
Additional notes2 sources agree
Open source →Added
- Add new
Tabscomponent (#674, #698) - Make
Disclosure.Buttonclose the disclosure inside aDisclosure.Panel(#682) - Add
aria-orientationtoListbox, which swaps Up/Down with Left/Right keys (#683) - Expose
closefunction from the render prop forDisclosure,Disclosure.Panel,PopoverandPopover.Panel(#697)
- Add new
- 1.3.021 Jun 2021
Release notes
Open source →Added
- Ensure that you can use
TransitionChildwhen using implicit Transitions (#503) - Add new
enteredprop forTransitionandTransitionChildcomponents (#504)
Fixes
Additional notes2 sources agree
Open source →Added
- Ensure that you can use
Transition.Childwhen using implicit Transitions (#503) - Add new
enteredprop forTransitionandTransition.Childcomponents (#504)
Fixes
- Add
aria-disabledon disabledRadioGroup.Optioncomponents (#543) - Improve
disabledandtabindexprop handling (#512) - Improve React peer dependency version range (#544)
- Improve types for the
openprop in theDialogcomponent (#550) - Improve
aria-expandedlogic (#592) - Remove undocumented
:classNameprop (#607) - Improve types for
Listboxcomponent (#576) - Remove explicit
:classprop (#608) - Improve tree shaking (#602)
- Improve peer dependencies for
react-dom, and for the future version18(#622)
- Ensure that you can use
- 1.2.010 May 2021
Release notes
Open source →Added
- Introduce Open/Closed state, to simplify component communication (#466)
Additional notes
Open source →Added
- Introduce Open/Closed state, to simplify component communication (#466)
Fixes
- Improve SSR for
Dialog(#477) - Delay focus trap initialization (#477)
- Improve incorrect behaviour for nesting
Dialogcomponents (#560)
The
Open/Closedstate unlocks a feature where all our components can interact with each other. This means that you don't need to use the render prop function, and that you also don't need thestaticprop anymore for transitions. Here is an example in the docs that explains this: https://headlessui.dev/react/menu#transitionsAdditional notes
Open source → - 1.2.0-e56dd0715 Jun 2021pre-release
Nothing published for this version
- 1.2.0-d0e27ff20 May 2021pre-release
Nothing published for this version
- 1.2.0-2279cd912 May 2021pre-release
Nothing published for this version
- 1.1.128 Apr 2021
- 1.1.1-c13e6b74 May 2021pre-release
Nothing published for this version
- 1.1.1-ab928113 May 2021pre-release
Nothing published for this version
- 1.1.1-084a2497 May 2021pre-release
Nothing published for this version
- 1.1.026 Apr 2021
Release notes
Open source →Fixes
- Improve search, make searching case insensitive (#385)
- Fix unreachable
RadioGroup(#401) - Fix
RadioGroupOptionvalue type (#400) - Fix closing nested
Dialogcomponents when pressingEscape(#430)
Added
Additional notes2 sources agree
Open source →Fixes
- Improve search, make searching case insensitive (#385)
- Fix unreachable
RadioGroup(#401) - Fix closing nested
Dialogcomponents when pressingEscape(#430)
Added
- 1.0.014 Apr 2021
Release notes
Open source →This is the v1 release of Headless UI - Vue
We introduced a bunch of new components for this release:
We also created a beautiful new documentation website: https://headlessui.dev/vue
Changelog:
Fixes
Added
- Add
SwitchDescriptioncomponent, which adds thearia-describedbyto the actual Switch (#220) - Add
Disclosure,DisclosureButton,DisclosurePanelcomponents (#282) - Add
Dialog,DialogOverlay,DialogTitleandDialogDescriptioncomponents (#282) - Add
PortalandPortalGroupcomponents (#282) - Add
FocusTrapcomponent (#282) - Add
Popover,PopoverButton,PopoverOverlay,PopoverPanelandPopoverGroupcomponents (#282) - Add
RadioGroup,RadioGroupOption,RadioGroupLabelandRadioGroupDescriptioncomponents (#282) - Add
TransitionRootandTransitionChildcomponents (#326)
Additional notes
Open source →This is the v1 release of Headless UI - React
We introduced a bunch of new components for this release:
We also created a beautiful new documentation website: https://headlessui.dev/react
Changelog:
Fixes
- Fixed
outside clicknot re-focusing theMenu.Button(#220, #256) - Fixed
outside clicknot re-focusing theListbox.Button(#220, #256) - Force focus in
Menu.ItemsandListbox.Optionsfrom within the component itself (#261) - Stop propagating keyboard/mouse events (#261)
Added
- Add
Disclosure,Disclosure.ButtonandDisclosure.Panelcomponents (#220) - Add
Dialog,Dialog.Overlay,Dialog.TileandDialog.Descriptioncomponents (#220) - Add
PortalandPortal.Groupcomponent (#220) - Add
Switch.Descriptioncomponent, which adds thearia-describedbyto the actual Switch (#220) - Add
FocusTrapcomponent (#220) - Add
Popover,Popover.Button,Popover.Overlay,Popover.PanelandPopover.Groupcomponents (#220) - All components that accept a
className, can now also receive a function with the renderProp argument (#257) - Add
RadioGroup,RadioGroup.Option,RadioGroup.LabelandRadioGroup.Descriptioncomponents (#274)
Additional notes
Open source →Fixes
- Fixed
outside clicknot re-focusing theMenu.Button(#220, #256) - Fixed
outside clicknot re-focusing theListbox.Button(#220, #256) - Force focus in
Menu.ItemsandListbox.Optionsfrom within the component itself (#261) - Stop propagating keyboard/mouse events (#261)
Added
- Add
Disclosure,Disclosure.ButtonandDisclosure.Panelcomponents (#220) - Add
Dialog,Dialog.Overlay,Dialog.TileandDialog.Descriptioncomponents (#220) - Add
PortalandPortal.Groupcomponent (#220) - Add
Switch.Descriptioncomponent, which adds thearia-describedbyto the actual Switch (#220) - Add
FocusTrapcomponent (#220) - Add
Popover,Popover.Button,Popover.Overlay,Popover.PanelandPopover.Groupcomponents (#220) - All components that accept a
className, can now also receive a function with the renderProp argument (#257) - Add
RadioGroup,RadioGroup.Option,RadioGroup.LabelandRadioGroup.Descriptioncomponents (#274)
- Add
- 1.0.0-ef31bbe21 Apr 2021pre-release
Nothing published for this version
- 1.0.0-ce8d7f519 Apr 2021pre-release
Nothing published for this version
- 1.0.0-be833ba16 Apr 2021pre-release
Nothing published for this version
- 1.0.0-43d527022 Apr 2021pre-release
Nothing published for this version
- 0.3.22 Apr 2021
- 0.3.2-d9501469 Apr 2021pre-release
Nothing published for this version
- 0.3.2-cdfeeac8 Apr 2021pre-release
Nothing published for this version
- 0.3.2-a02c8188 Apr 2021pre-release
Nothing published for this version
- 0.3.2-5ff52256 Apr 2021pre-release
Nothing published for this version
- 0.3.2-494292813 Apr 2021pre-release
Nothing published for this version
- 0.3.111 Feb 2021
Additional notes2 sources agree
Open source → - 0.3.1-ece9b5f16 Feb 2021pre-release
Nothing published for this version
- 0.3.1-d519f7d26 Feb 2021pre-release
Nothing published for this version
- 0.3.1-c4549e419 Feb 2021pre-release
Nothing published for this version
- 0.3.1-b7fe69a31 Mar 2021pre-release
Nothing published for this version
- 0.3.1-b30969930 Mar 2021pre-release
Nothing published for this version
- 0.3.1-a94cc7919 Feb 2021pre-release
Nothing published for this version
- 0.3.1-8de011410 Mar 2021pre-release
Nothing published for this version
- 0.3.1-854cc8319 Feb 2021pre-release
Nothing published for this version
- 0.3.1-7c43e551 Mar 2021pre-release
Nothing published for this version
- 0.3.1-7c43e541 Mar 2021pre-release
Nothing published for this version
- 0.3.1-7c43e531 Mar 2021pre-release
Nothing published for this version
- 0.3.1-56fb7d411 Feb 2021pre-release
Nothing published for this version
- 0.3.1-4cb437423 Feb 2021pre-release
Nothing published for this version
- 0.3.1-33d49e323 Feb 2021pre-release
Nothing published for this version
- 0.3.1-285724f26 Mar 2021pre-release
Nothing published for this version
- 0.3.1-1fd5e2112 Feb 2021pre-release
Nothing published for this version
- 0.3.1-197e1b218 Feb 2021pre-release
Nothing published for this version
- 0.3.1-197e1b117 Feb 2021pre-release
Nothing published for this version
- 0.3.1-197e1b017 Feb 2021pre-release
Nothing published for this version
- 0.3.1-197e1af17 Feb 2021pre-release
Nothing published for this version
- 0.3.1-197e1ae16 Feb 2021pre-release
Nothing published for this version
- 0.3.1-197e1ad16 Feb 2021pre-release
Nothing published for this version
- 0.3.1-01508f024 Feb 2021pre-release
Nothing published for this version
- 0.3.1-79220894 Mar 2021pre-release
Nothing published for this version
- 0.3.06 Feb 2021
Release notes
Open source →Fixes
- Ensure that you can't use Enter to invoke the Switch
- Fix outside click refocus bug (#114)
- Prevent scrolling when refocusing items
- Ensure
Switchhastype="button"(#192) - Added
emitsproperty to Vue components (#199) - Fix
disablednot working when inside a disabled fieldset (#202) - Trigger "outside click" behaviour on mousedown (#212)
- Ensure the
activeMenuItem is scrolled into view - Ensure valid Menu accessibility tree (#228)
Added
Additional notes
Open source →Fixes
- Ensure that you can't use Enter to invoke the Switch
- Fix outside click refocus bug (#114)
- Prevent scrolling when refocusing items
- Ensure
Switchhastype="button"(#192) - Fix
useId()hook returningundefinedon the client - Fix
disablednot working when inside a disabled fieldset (#202) - Trigger "outside click" behaviour on mousedown (#212)
- Ensure the
activeMenuItem is scrolled into view - Ensure valid Menu accessibility tree (#228)
Added
- Add Transition events (
beforeEnter,afterEnter,beforeLeaveandafterLeave) (#57) - Add render features + render strategy (
staticandunmount={true | false}) (#106)- Also changes the API of Transition component.
- We will now always render a
divby default (unless you change this using theas={...}prop). - The render function prop doesn't expose a
refanymore. - Adds
unmountprop to theTransitionandTransition.Childcomponents.
- We will now always render a
- Also changes the API of Transition component.
- Add displayName to all contexts (#175)
- Add
disabledprop toListboxitself, instead of theListbox.Button(#229)
Upgrade Path
We changed the API of the
Transitioncomponent to be more inline with the other API's of the various components. We now always render adivfor theTransitionandTransition.Childcomponent. If you want to use a render function, then we still render a div. The render function also used do expose arefprop, which is now not the case anymore. You can still use theasprop to change the underlyingdivto another element or component.// From <Transition show={true} enter=".." enterFrom=".." enterTo=".." leave=".." leaveFrom=".." leaveTo=".." > {ref => ( <div ref={ref} className="these classes always apply"> <span>Child</span> </div> )} </Transition> // To (option 1) - Hoist attributes from the first child `div` to the `Transition` itself <Transition show={true} enter=".." enterFrom=".." enterTo=".." leave=".." leaveFrom=".." leaveTo=".." className="these classes always apply" > <span>Child</span> </Transition> // To (option 2) - Add `as={Fragment}` to the `Transition` component. <Transition as={React.Fragment} show={true} enter=".." enterFrom=".." enterTo=".." leave=".." leaveFrom=".." leaveTo=".." > <div className="these classes always apply"> <span>Child</span> </div> </Transition>Additional notes
Open source →Fixes
- Ensure that you can't use Enter to invoke the Switch
- Fix outside click refocus bug (#114)
- Prevent scrolling when refocusing items
- Ensure
Switchhastype="button"(#192) - Fix
useId()hook returningundefinedon the client - Fix
disablednot working when inside a disabled fieldset (#202) - Trigger "outside click" behavior on mousedown (#212)
- Ensure the
activeMenuItem is scrolled into view - Ensure valid Menu accessibility tree (#228)
Added
- Add Transition events (
beforeEnter,afterEnter,beforeLeaveandafterLeave) (#57) - Add render features + render strategy (
staticandunmount={true | false}) (#106) - Add displayName to all contexts (#175)
- Add
disabledprop toListboxitself, instead of theListbox.Button(#229)
Changes
- Changes the API of the Transition component.
- We will now always render a
divby default (unless you change this using theas={...}prop). - The render function prop doesn't expose a
refanymore. - Adds
unmountprop to theTransitionandTransition.Childcomponents.
- We will now always render a
- 0.3.0-f34c0868 Feb 2021pre-release
Nothing published for this version
- 0.3.0-dc528c08 Feb 2021pre-release
Nothing published for this version
- 0.3.0-ce725bd8 Feb 2021pre-release
Nothing published for this version
- 0.3.0-cb4fe618 Feb 2021pre-release
Nothing published for this version
- 0.3.0-6987d688 Feb 2021pre-release
Nothing published for this version
- 0.3.0-2c5230d9 Feb 2021pre-release
Nothing published for this version
- 0.3.0-0dd88d18 Feb 2021pre-release
Nothing published for this version
- 0.2.06 Oct 2020
- 0.2.0-da179ca29 Jan 2021pre-release
Nothing published for this version
- 0.2.0-ab820de24 Jan 2021pre-release
Nothing published for this version