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: select item on blur only when menu is open
## 6.0.5 (2020-08-15) ### Performance Improvements * hooks: reuse utility hooks
One column per quarter.
useCombobox: dispatch on Enter keydown event
Typescript: fix UseComboboxDispatchAction type
Important: please update to the 6.0.2 version since it contains a couple of fixes for the changes in this Breaking Change. Final changes:
selectedItem to accept null in both useSelect and useCombobox.To migrate to the new change, update your types or code if necessary. selectedItem, defaultSelectedItem and initialSelectedItem now have Item | null instead of Item type. PR with the changes: https://github.com/downshift-js/downshift/pull/1090
itemToString to accept null for the item parameter, in useSelect and useCombobox + in Downshift where this was missing. useMultipleSelection type for itemToString stays the same as it can't receive null as item.To migrate to the new change, update your types or code if necessary. itemToString: (item: Item) => string -> itemToString: (item: Item | null) => string}. PR with the changes: https://github.com/downshift-js/downshift/pull/1075 https://github.com/downshift-js/downshift/pull/1105
type to the onChange (onInputValueChange, onHighlightedIndexChange, onSelectedItemChange, onIsOpenChange) handler parameters, as specified in the documentation. Also updated the TS typings to reflect this + onStateChange - the type parameter was passed but it was not reflected in the TS types.To migrate to the new change, update your types or code if necessary, better to view the changes in the PR: https://github.com/downshift-js/downshift/pull/985. Important: please update to the 6.0.2 version since it contains a couple of fixes for the changes in this Breaking Change. Final changes:
stateReducer?: (
state: UseComboboxState<Item>,
actionAndChanges: UseComboboxStateChangeOptions<Item>, // UseComboboxStateChangeOptions has the correct typings
) => Partial<UseComboboxState<Item>> // this now reflects the correct return, which is the partial state.
onSelectedItemChange?: (changes: UseComboboxStateChange<Item>) => void // changes have partial state + type
onIsOpenChange?: (changes: UseComboboxStateChange<Item>) => void
onHighlightedIndexChange?: (changes: UseComboboxStateChange<Item>) => void
onStateChange?: (changes: UseComboboxStateChange<Item>) => void
onInputValueChange?: (changes: UseComboboxStateChange<Item>) => void
where
export interface UseComboboxStateChangeOptions<Item>
extends UseComboboxDispatchAction<Item> { // type and optional parameters needed to compute the next state
changes: Partial<UseComboboxState<Item>> // partial state changes proposed by the hook
}
export interface UseComboboxDispatchAction<Item> {
type: UseComboboxStateChangeTypes
shiftKey?: boolean
getItemNodeFromIndex?: (index: number) => HTMLElement
inputValue?: string
index?: number
highlightedIndex?: number
selectedItem?: Item | null
selectItem?: boolean
}
export interface UseComboboxStateChange<Item>
extends Partial<UseComboboxState<Item>> {
type: UseComboboxStateChangeTypes
}
[useCombobox]: When an item is highlighted by keyboard and user closes the menu using mouse/touch, the item is not selected anymore. The only selection on Blur happens using either Tab / Shift+Tab. PR with the changes: https://github.com/downshift-js/downshift/pull/1109
[useCombobox & downshift]: When pressing Escape and the menu is open, only close the menu. When the menu is closed and there is an item selected and/or text in the input, clear the selectedItem and the inputValue. PR with the changes: https://github.com/downshift-js/downshift/issues/719
useSelect: ensure the initial selected item is scrolled into view on first open
useCombobox: fix onSelectedItemChange not triggering with controlled selectedItem in React.StrictMode
useCombobox: focus input after selection by click
useCombobox: navigating up if all items are disabled
hooks: call a11y status message on items change
useCombobox: update inputValue when calling selectItem
scrollIntoView: do not scroll falsy node (#1047) (1873efa), closes /github.com/downshift-js/downshift/pull/1045#issuecomment-628682162
hooks: memoize all callbacks (#1051) (e8479cb), closes #1050
hooks: allows virtualization for hooks
Nothing published for this version
preact: add support for preact/debug
hooks: return the ref container with isMouseDown
hooks: improve mouse and touch tracking
useCombobox: allow to submit form on pressing Enter
useControlledState: use reducer + useEffect
Nothing published for this version
Nothing published for this version
useSelect: don't trigger blur state change after item selection
hooks: replace useReducer with useState
hooks: align behavior of a11y status messages between hooks and Downshift
useMultipleSelection: replace item with selectedItem in typings for getSelectedItemProps
# 5.1.0 (2020-04-11) ### Features * create useMultipleSelection
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
input: handle IME events on input Enter keydown
typescript: add missing scrollIntoView definitions to hooks
hooks: replace Object.entries with Object.keys to support > IE 9
hooks: call onStateChange with type and only changed props
hooks: only add aria-activedescendant when menu is open
netlify: redirect custom URLs to index.html
useCombobox: dispatch ToggleButtonClick before focusing input
downshift v5 (#907) (2f50b91), closes #907
FunctionClearKeysSoFar from state change types and TS typings. In useSelect, once the timeout for keeping the character keys in memory has expired, FunctionSetInputValue will be used. We are doing this as we are renaming keysSoFar with inputValue.To migrate to the new change, simply check for FunctionSetInputValue with empty string as inputValue instead of checking for FunctionClearKeysSoFar in stateReducer.
getA11yStatusMessage and getA11ySelectionMessage will be called with the same props as the getA11yStatusMessage in <Downshift>, apart from previousResultCount. In the TS typings it's now marked as optional, and all functions have the same interface definition, A11yStatusMessageOptions.To migrate to the new changes, in useSelect and useCombobox, if you used items as parameters in any of the a11y message functions, now you should use resultCount as probably you only needed items.length from it anyway.
Also typings UseSelectA11yMessageOptions and UseComboboxA11yMessageOptions have been removed. Use A11yStatusMessageOptions instead.
Code Changes: tests have been enhanced by using user input from RTL and they now look better and cleaner. Also covered more use cases better. Code has been refactored as well, and bundle size slightly reduced.
Functional Improvement: better focus management for both useSelect and useCombobox.
Fixes https://github.com/downshift-js/downshift/issues/832. Closes https://github.com/downshift-js/downshift/issues/892 Closes https://github.com/downshift-js/downshift/issues/891 Closes https://github.com/downshift-js/downshift/issues/873
Nothing published for this version
hooks: add aria-selected="false" to each non-highlighted item
## 4.0.11 (2020-02-09) ### Bug Fixes * revert 4.0.8 and 4.0.9 changes
useSelect: dispatch closure issue on search by key
useEnhancedReducer: call onChange callbacks outside the reducer
Nothing published for this version
getState: revert the controlled prop check
useSelect: correct typings for toggleButton and menu getter props
useCombobox: use mouse and touch events to trigger blur
useCombobox: pass down missing disabled prop in prop getters
useSelect: add support for space button on menu
highlightedIndex: do not highlight disabled items by keyboard
release: manually release a major version
useSelect and Downshift. See PR for details.Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Your coding agent can read these notes before it upgrades. Set up the MCP server →