Base UI is a library of headless ('unstyled') React components and low-level hooks. You gain complete control over your app's CSS and accessibility features.
The latest stable releases, with their original sources.
Last checked
Checking sources…
Fix roving focus when items are added or removed (#5447) by @atomiks
readOnly (#5541) by @vikusczaria-orientation to the role owners (#5551) by @gonzoblascokeepMounted prop to <Avatar.Image> (#5536) by @atomiksdata-readonly to <Combobox.Trigger> (#5418) by @sai6855createItems collection API (#5326) by @atomiksreadOnly (#5541) by @vikusczaria-orientation to the role owners (#5551) by @gonzoblascoObject.prototype (#5518) by @XionWCFMclearErrors dropping updates when multiple fields change at once (#5446) by @sai6855aria-orientation to the role owners (#5551) by @gonzoblascoaria-required-children (#5058) by @michaldudak<NavigationMenu.Trigger> (#5521) by @sai6855aria-orientation to the role owners (#5551) by @gonzoblasco<Select.Positioner> (#5469) by @sai6855readOnly (#5531) by @vikusczObject.prototype (#5518) by @XionWCFMAll contributors of this release in alphabetical order: @alex-js-ltd, @atomiks, @azeng4499, @chuganzy, @edwardhorsey, @flaviendelangle, @gilsmt, @gonzoblasco, @jjenzz, @marwenilo, @michaldudak, @radist2s, @sai6855, @vikuscz, @wanxiankai, @XionWCFM
End thumb drag when the primary button is no longer held (#5374) by @atomiks
render callback props based on the rendered element (#5104) by @atomikscollisionPadding off-by-one on the biased side (#5143) by @atomiks.d.ts files (#5165) by @michaldudakusePreviousValue equality comparison (#5264) by @lyzno1dir attribute from <Accordion.Root> (#5117) by @chuganzy<AlertDialog.Root> from reopening after remounting with a reused handle (#5109) by @michaldudakinput-press to change event details (#5356) by @chuganzycancel-open to change event details (#5376) by @chuganzy<Avatar.Fallback> immediately when delay={0} (#5147) by @chuganzyinput-press to change event details (#5356) by @chuganzycancel-open to change event details (#5376) by @chuganzyexpanded state for inline comboboxes (#5332) by @sarthakmalik0810<Combobox.Root> in <Combobox.Item> (#5365) by @chuganzyscrollIntoViewIfNeeded (#5234) by @sai6855<Dialog.Root> from reopening after remounting with a reused handle (#5109) by @michaldudak<Drawer.Root> from reopening after remounting with a reused handle (#5109) by @michaldudakdata-dirty tracking for null-valued controls (#5290) by @sai6855onOpenChange calls when closing a submenu (#5178) by @atomiks<Menu.Root> from reopening after remounting with a reused handle (#5149) by @michaldudakautoSubmit is blocked (#5089) by @lyzno1<Popover.Root> from reopening after remounting with a reused handle (#5149) by @michaldudak<PreviewCard.Root> from reopening after remounting with a reused handle (#5149) by @michaldudakmin/max semantics to match the indicator (#5095) by @atomiks<Radio.Root> (#5213) by @sai6855<ScrollArea.Thumb> (#5145) by @atomiks<Select.Root> in <Select.Item> (#5365) by @chuganzyrender prop in <Toast.Title>, <Toast.Description>, and <Toast.Action> (#5210) by @m2na7<Toast.Provider> prop effect ordering (#5338) by @atomiks<Tooltip.Root> from reopening after remounting with a reused handle (#5149) by @michaldudakAll contributors of this release in alphabetical order: @arikchakma, @atomiks, @bernardobelchior, @brijeshb42, @chuganzy, @DiegoAndai, @DreierF, @flaviendelangle, @jjenzz, @lyzno1, @m2na7, @mdm317, @michaldudak, @nami8824, @obeattie, @sai6855, @sarthakmalik0810
🚨 Breaking change: Unmark preview the namespace export is renamed
OTPFieldPreview→OTPFieldand should be imported as:{ OTPField } from '@base-ui/react/otp-field'(#5029) by @atomiks
Accordion.Root (#4961) by @chuganzyopen requirement for the inline prop (#5069) by @atomiksdata-focused Field attribute when disabled (#4998) by @atomiksvalidate fn calls (#4911) by @mj12albertvalidate fn (#4912) by @mj12albertopen requirement for the inline prop (#5069) by @atomiksField.Item state in Field.Label (#4916) by @chuganzyField.Item state in Field.Description (#4960) by @chuganzyOTPFieldPreview → OTPField and should be imported as: { OTPField } from '@base-ui/react/otp-field' (#5029) by @atomiksvalidate fn calls (#4911) by @mj12albertvalidate fn calls (#4911) by @mj12albertaria-orientation from role="group" element (#4628) by @sernstbergerdisabled to default toolbar button (#4967) by @mj12albertAll contributors of this release in alphabetical order: @aarongarciah, @atomiks, @chuganzy, @flaviendelangle, @lyzno1, @mattrothenberg, @michaldudak, @mj12albert, @sernstberger, @spokodev
Breaking change: Rename
sanitizeValue()tonormalizeValue()and allow composing with validation (#4717) by @atomiks
Math.random() in useStableCallback() (#4732) by @michaldudakFormData for popup inputs (#4725) by @lunaxislucloseQuery when closing multiple input-inside-popup combobox (#4715) by @mj12albertopen prop for open state detection (#4712) by @michaldudakstyle prop in <Drawer.Viewport> (#4841) by @atomiksflushSync during validation (#4685) by @atomiksflushSync during validation (#4685) by @atomikskeepMounted portals (#4723) by @twillhorn<Menu.GroupLabel> in <Menu.RadioGroup> (#4826) by @nami8824open prop for open state detection (#4712) by @michaldudaksanitizeValue() to normalizeValue() and allow composing with validation (#4717) by @atomiksflushSync during validation (#4685) by @atomiksonValueComplete() for full paste (#4690) by @atomiksopen prop for open state detection (#4712) by @michaldudakopen prop for open state detection (#4712) by @michaldudakdata-popup-side to trigger (#4671) by @mj12albertonValueChange() for automatic tab selection (#4704) by @michaldudakgetElementTransform() and remove local implementation (#4749) by @sai6855open prop for open state detection (#4712) by @michaldudakAll contributors of this release in alphabetical order: @aeterno-caspian, @arturbien, @atomiks, @flaviendelangle, @Janpot, @lunaxislu, @lyzno1, @mattrothenberg, @michaldudak, @mj12albert, @nami8824, @sai6855, @stefee, @twillhorn
date-fns peer dependencies as optional (#4639) by @LukasTyAll contributors of this release in alphabetical order: @atomiks, @LukasTy
form prop on hidden inputs (#4352) by @atomikssuppressHydrationWarning to hidden inputs (#4482) by @devxoulPositioner not repositioning to a different trigger when reopened with keepMounted (#4407) by @mdm317modal popups with touch input (#3100) by @atomikskeepMounted has no transitions (#4555) by @mj12albertChips/InputGroup areas not focusing the input or opening the popup (#4296) by @CiscoFran10<Field.Error> (#4494) by @atomiksaria-orientation attribute (#4355) by @atomiksValue typing (#4328) by @atomiksOTPField component for one-time password and verification code entry (#4365) by @atomiksalignItemWithTrigger (#4531) by @atomiksreadOnly mode (#4551) by @tsbehlmanAll contributors of this release in alphabetical order: @arturbien, @atomiks, @CiscoFran10, @devxoul, @flaviendelangle, @kyrregjerstad, @LukasTy, @lunaxislu, @mattrothenberg, @mdm317, @michaldudak, @mj12albert, @Profesor08, @ryanrhee, @sai6855, @tsbehlman
Breaking change:
Draweris no longer marked as previewDraweris now stable and should be imported as{ Drawer } from '@base-ui/react/drawer'(#4293) by @atomiks
openMethod after close transition (#4128) by @atomikskeydown in composite widgets (#4053) by @atomiksuseHover hooks and safePolygon (#4199) by @atomiks--anchor-width and --anchor-height to device pixel grid (#4082) by @flaviendelangledata-base-ui-inert to highest-level node (#3955) by @atomiksValue typing (#4138) by @atomiksdisabled twice in onKeyDown and onKeyUp (#4132) by @flaviendelanglearia-labelledby support (#4142) by @atomiksEnter when nothing is highlighted (#4235) by @atomiksInputGroup part (#3745) by @atomiksLabel part (#4167) by @atomiksmouseup on non-Mac platforms (#3944) by @atomiksDrawer is no longer marked as preview
Drawer is now stable and should be imported as { Drawer } from '@base-ui/react/drawer' (#4293) by @atomiksSwipeArea part (#4102) by @atomiksdata-base-ui-swipe-ignore explicit for touch interactions (#4295) by @atomiksForm errors or invalid prop are present at same time (#4112) by @mj12albertpointerleave from stealing focus from dialogs (#4125) by @atomikspointer-events for submenu hover interactions (#4231) by @atomikscloseDelay not being applied to Menu.SubmenuTrigger (#4134) by @flaviendelangleViewport (#4060) by @michaldudakcloseOnClick is clicked (#4276) by @CiscoFran10aria-orientation (#4309) by @atomiksreason values in onValueCommitted (#4259) by @jijiseong<Popover.Close> is rendered inside and modal is true, and add support for a visually hidden close button (#4084) by @atomiksaria-labelledby support (#4142) by @atomiksid fallback (#4135) by @atomiksValue placeholder not rendering with Record items (#4137) by @vcode-shonClick during drag-to-select (#3969) by @obeattieitems type definition for groups (#3884) by @aarongarciahalignItemWithTrigger fallback with browser zoom (#4292) by @atomiksLabel part (#4167) by @atomiksaria-labelledby support (#4142) by @atomiksonClose calls for ending toasts (#4280) by @chuganzycloseOnClick prop (#4140) by @atomiksAll contributors of this release in alphabetical order: @aarongarciah, @atomiks, @cgatian, @chuganzy, @CiscoFran10, @dmitri-gb, @flaviendelangle, @jijiseong, @michaldudak, @mj12albert, @obeattie, @vcode-sh
Replace Firefox deprecated mozInputSource check for virtual click detection (#3942) by @CiscoFran10
state when not needed (#3812) by @flaviendelanglerender prop (#3856) by @oliviertassinariWeakRef for previously focused elements (#3916) by @atomiksuseMemo dependency (#3862) by @ZeeshanTambolimode is list (#3936) by @ZeeshanTamboliuseFilteredItems hook (#3732) by @guisehnaria-readonly prop from Clear and Popup components when readOnly (#3907) by @markocupic024nativeButton error message (#3861) by @atomiks<Checkbox.Indicator> when keepMounted={false} (#3939) by @atomiksIcon part (#3796) by @flaviendelangleChipRemove (#3980) by @sai6855input-press from trigger-press in onOpenChange reason (#4015) by @jijiseongChip from receiving focus when disabled (#4044) by @jijiseonguseFilteredItems hook (#3732) by @guisehnaria-readonly prop from Clear and Popup components when readOnly (#3907) by @markocupic024onClick Item type (#3964) by @atomiksdomReferenceElement subscriptions (#4017) by @atomiksdisabled prop not working (#3806) by @arturbiencollisionAvoidance with side: 'flip' not working (#3877) by @obeattieField.Control is uncontrolled (#3820) by @atomiks<React.Activity> (#3931) by @atomiksHTMLElement (#3866) by @mj12albertonClick Item type (#3964) by @atomiks<Menu.LinkItem> part (#3400) by @mj12albertkeepMounted prop to Content part (#3794) by @atomiksevent.isTrusted (#3920) by @atomiksallowOutOfRange prop (#3919) by @atomiksaria-owns element (#3959) by @atomiksdomReferenceElement subscriptions (#4017) by @atomiksformatValue function (#3805) by @sai6855<Radio.Indicator> when keepMounted={false} (#3939) by @atomiksValue typing to Radio (#4033) by @atomiksdata-scrolling state attribute to Root and Viewport parts (#3823) by @arturbienfinalFocus prop (#3785) by @markocupic024alignItemWithTrigger transform with CSS animations (#3831) by @atomikshighlightItemOnHover not being respected (#3868) by @sarthakmalik0810autoComplete prop for explicit browser autofill support (#4005) by @mattrothenberg<Tabs.Panel> part (#3880) by @atomiksuseToastManager and createToastManager generic functions (#3882) by @solastleyHome/End key navigation (#3971) by @jijiseongAll contributors of this release in alphabetical order: @antonfrolovsky, @arturbien, @atomiks, @CiscoFran10, @CrawlerCode, @flaviendelangle, @guisehn, @jijiseong, @LukasTy, @markocupic024, @mattrothenberg, @mdm317, @michaelhazan, @michaldudak, @mj12albert, @obeattie, @OliverSpeir, @oliviertassinari, @sai6855, @sarthakmalik0810, @solastley, @ZeeshanTamboli
Fix highlight being removed on popup mouseout when
highlightItemOnHoveris disabled (#3492) by @atomiks
Refactor popup auto resize logic. It is no longer necessary to specify
--positioner-width/--positioner-heightCSS variables on<Popover.Positioner>when using detached triggers unless theViewportpart has been added to the JSX. (#3652) by @atomiks
Refactor popup auto resize logic. It is no longer necessary to specify
--positioner-width/--positioner-heightCSS variables on<Tooltip.Positioner>when using detached triggers unless theViewportpart has been added to the JSX. (#3652) by @atomiks
onOpenChangeComplete(true) timing (#3558) by @atomiksopenMethod when tapping outside element bounds on Safari (#3541) by @atomiksref in BaseUIComponentProps (#2813) by @atomiksdisabled prop (#3650) by @seongminnactionsRef to be null (#3682) by @mj12albertdata-popup-side and data-list-empty state attributes to <Autocomplete.Trigger> (#3491) by @atomiksloopFocus prop (#3592) by @atomiksid and required props (#3640) by @atomiksid and required props (#3640) by @atomiksdata-popup-side and data-list-empty state attributes to <Combobox.Trigger> (#3491) by @atomiksloopFocus prop (#3592) by @atomikstoolbar role to <Combobox.Chips> to prevent NVDA from entering browse mode (#3647) by @atomiksplaceholder prop to <Combobox.Value> (#3604) by @atomiksvalue prop when items change (#3607) by @atomiksmultiple values label resolution in <Combobox.Value> (#3314) by @atomiksid to visible form element (#3722) by @atomiksonBlur handlers when opening popup (#3609) by @atomiksCSPProvider (#3553) by @atomiksMaximum update depth exceeded error with Suspense (#3700) by @michaldudak<Dialog.Title> forwardedRef type (#3736) by @ZeeshanTamboliactionsRef prop (#3395) by @mj12albertnativeLabel prop to <Field.Label> (#3723) by @atomiksactionsRef prop (#3395) by @mj12albertdata-focused state (#3563) by @atomiks--positioner-width/--positioner-height CSS variables on <Popover.Positioner> when using detached triggers unless the Viewport part has been added to the JSX. (#3652) by @atomiksplaceholder prop to <Select.Value> (#3604) by @atomiksalignItemWithTrigger is active (#3532) by @atomiksmax-height popup style when alignItemWithTrigger is active (#3573) by @atomiksdata-filled state in multiple mode (#3608) by @atomikshighlightItemOnHover is disabled (#3492) by @atomiksalignItemWithTrigger is active (#3637) by @atomiksmultiple values label resolution in <Select.Value> (#3314) by @atomiksid to visible form element (#3722) by @atomiksonBlur handlers when opening popup (#3609) by @atomiksonValueCommitted not called for range sliders (#3600) by @mj12alberttrackCursorAxis handling (#3679) by @atomiks--positioner-width/--positioner-height CSS variables on <Tooltip.Positioner> when using detached triggers unless the Viewport part has been added to the JSX. (#3652) by @atomiksmergeProps public (#3642) by @michaldudak and @LukasTyAll contributors of this release in alphabetical order: @albertdugba, @atomiks, @brijeshb42, @chuganzy, @colmtuite, @dav-is, @DiegoAndai, @Grafikart, @Janpot, @LukasTy, @michaldudak, @mj12albert, @oliviertassinari, @seongminn, @updbqn, @ZeeshanTamboli
Breaking change: Rename packages to use the
@base-uiorg. The package name has changed from@base-ui-components/reactto@base-ui/react. (#3462) by @mnajdova
@base-ui org.
The package name has changed from @base-ui-components/react to @base-ui/react.
(#3462) by @mnajdovaitemToStringValue for onFormSubmit (#3441) by @atomiksnull as an option for the value prop (#3488) by @mnajdovanull open method (#3486) by @atomiksPositioner in Firefox (#3424) by @atomiksPositioner in Firefox (#3424) by @atomiksitemToStringValue for onFormSubmit (#3441) by @atomiksnull as an option for the value prop (#3488) by @mnajdovaflushSync dev error when toast is added (#3443) by @atomiks<Toast.Close> emitting aria-hidden warning on click (#3469) by @atomiksPositioner in Firefox (#3424) by @atomiksAll contributors of this release in alphabetical order: @atomiks, @LukasTy, @michaldudak, @mj12albert, @mnajdova, @oliviertassinari, @pondorasti, @romgrk, @ZeeshanTamboli
autoComplete