NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
npm · #4804 most downloaded on npm
🏎 A set of primitives to build simple, flexible, WAI-ARIA compliant React autocomplete, combobox or select dropdown components.
Last release 3 months ago
30 Jun 2026
Release timing varies
gaps range from 9 days to 7 months
Nearly every release is documented
notes for 60 of the last 60 stable releases
26 versions withdrawn
withdrawn after publishing
9 years old
380 releases · first in 2017
useCombobox: initial focus behaviour
https://github.com/downshift-js/downshift/pull/1440 https://github.com/downshift-js/downshift/pull/1445 https://github.com/downshift-js/downshift/pull
https://github.com/downshift-js/downshift/pull/1440 https://github.com/downshift-js/downshift/pull/1445 https://github.com/downshift-js/downshift/pull/1463 https://github.com/downshift-js/downshift/pull/1510 https://github.com/downshift-js/downshift/pull/1482
These changes will also be covered in the V8 migration guide.
Both useCombobox and useSelect now support the isItemDisabled function. This new API is used to mark menu items as disabled, and as such remove the from the navigation and prevent them from being selected. The old API required passing the disabled prop to the getItemProps function. This old API has been removed and you will receive a console warning if you are trying to use the disabled prop in getItemProps.
Example of API migration:
Old:
const items = [{value: 'item1'}, {value: 'item2'}]
const {getInputProps, ...rest} = useCombobox({items})
return (
// ... rest
<li {...getItemProps({item, disabled: item.value === 'item2'})}>
)
New:
const items = [{value: 'item1'}, {value: 'item2'}]
const {getInputProps, ...rest} = useCombobox({items, isItemDisabled(item, _index) { return item.value === 'item2' }})
return (
// ... rest
<li {...getItemProps({item})}>
)
The API for Downshift remains unchange.
ARIA 1.2 recommends to toggle the menu open state at input click. Previously, in v7, the menu was opened on receiving focus, from both mouse and keyboard. Starting with v8, input focus will not trigger any state change anymore. Only the input click event will be handled and will trigger a menu toggle. Consequently:
useCombobox.stateChangeTypes.InputFocus has been removed.useCombobox.stateChangeTypes.InputClick has been added instead.We recommend having the default toggle on input click behaviour as it's part of the official ARIA combobox 1.2 spec, but if you wish to override it and not toggle the menu on click, use the stateReducer:
function stateReducer(state, actionAndChanges) {
const {changes, type} = actionAndChanges
switch (type) {
case useCombobox.stateChangeTypes.InputClick:
return {
...changes,
isOpen: state.isOpen, // do not toggle the menu when input is clicked.
}
default:
return changes
}
}
If you want to return to the v7 behaviour and open the menu on focus, keep the reducer above so you remove the toggle behaviour, and call the openMenu imperative function, returned by useCombobox, in a onFocus handler passed to getInputProps:
<input
{...getInputProps({
onFocus() {
openMenu()
},
})}
/>
Consider to use the default 1.2 ARIA behaviour provided by default in order to align your widget to the accessibility official spec. This behaviour consistency improves the user experience, since all comboboxes should behave the same and there won't be need for any additional guess work done by your users.
Previously, the return value from the getter props returned by both Downshift and the hooks was any. In v8 we improved the types in order to reflect what is actually returned: the default values return by the getter prop function and
whatever else the user passes as arguments. The type changes are done in this PR, make sure you adapt your TS code, if applicable.
Also, in the Downshift component, the return values for some getter prop values have changed from null to undefined, since that is what HTML elements expect (value or undefined). These values are also reflected in the TS types.
The environment prop is useful when you are using downshift in a context
different than regular DOM. Its TS type has been updated to contain Node and
the propTypes have also been updated to reflect the properties which are
required by downshift from environment.
One column per quarter.
Nothing published for this version
Nothing published for this version
useCombobox: exhaustive deps for getInputProps
useCombobox: tab to body should select element
getter prop with aria-label will not add aria-labelledby
reactNativeWeb: support in Downshift and hooks
useCombobox: Ensure highlighted index is not selected on browser tab change (#1484) (4ff1385), closes #1471
useCombobox: selectedItemChanged support
defaultProps: only select if there are items and one is highlighted
hooks: correctly compute item and index in getter function
useCombobox: controlled selectedItem extra renders
useMultipleSelection: do not crash in react native
useSelect: react native handlers
useCombobox: use environment instead of document
Nothing published for this version
hooks: do not add mouse and touch events in React native
# 7.2.0 (2023-01-14) ### Features * update scrollIntoView library
Nothing published for this version
Nothing published for this version
set browserlist so that js files are transpiled
useMultipleSelection: prevent adding items on Backspace/Delete without activeIndex
useSelect: improve highlight by character keys algorithm
add clean up to avoid effect firing twice in strict mode
TS: make refKey optional in GetRootPropsOptions
## 7.0.3 (2022-11-23) ### Bug Fixes * manually release patch version
useSelect: trigger click manually on Enter / Space
updates to useCombobox and useSelect to adhere to the 1.2 version of the ARIA Combobox pattern.
Migration guide is available in this file.
Closes https://github.com/downshift-js/downshift/issues/1365. Closes https://github.com/downshift-js/downshift/issues/1239. Contains changes from https://github.com/downshift-js/downshift/pull/1149.
Nothing published for this version
Nothing published for this version
Nothing published for this version
useCombobox: do not blur on item click
hooks: remove highlight when hovering disabled item
useCombobox: prevent default on Escape when open or has content
Nothing published for this version
hooks: do not accept undefined as initial values
useMultipleSelect: removeSelectedItem adding duplicate items to selected items (#1353) (bf709b9), closes #1316
## 6.1.7 (2021-08-10) ### Bug Fixes * TS: add tslib as a dependency
TS: revert changes in typings index.d.ts
## 6.1.5 (2021-08-03) ### Bug Fixes * tsconfig: revert target es2020
Nothing published for this version
hooks: do not add a11y status on react native
Nothing published for this version
environment: use Node variable within the provided window context
useSelect: clear debounced keysSoFar callback on unmount
Nothing published for this version
scroll: bump compute-scroll-into-view
hooks: dispatch changes only when needed
hooks: prevent overwrite of itemRefs when hooks rerender
hooks: improve and refactor code
Nothing published for this version
Revert "perf: improve code in hooks (#1213)"
types: UseComboboxGetComboboxPropsOptions typing
## 6.0.12 (2021-01-08) ### Performance Improvements * improve code in hooks
cleanupStatus: cleanup message container when it's outside the default document
scroll: use isomorphic effect for SSR
scroll: replace useEffect with useLayoutEffect
types: props optional for useMultipleSelect
isOrContainsNode: check if child is instance of Node (#1195) (c55571f), closes #1155
Your coding agent can read these notes before it upgrades. Set up the MCP server →