Browse the docs

Combobox

Searchable select: an input filters the option list as you type, arrow keys highlight, Enter selects and writes the label back into the input. Focus never leaves the input — the highlight travels via aria-activedescendant.

The native Select stays the right choice when a plain dropdown is enough; reach for Combobox when the list is long enough to search.

This component needs the combobox primitive — two ways to get it:

Selected: none

Props

PropValuesDefaultDescription
options{ value, label }[]requiredThe full list; filtering happens inside.
value / onValueChangestring / functionControlled selection.
placeholderstring"Search…"Input placeholder.
emptyMessagestring"No results"Shown when nothing matches.
invalidbooleanfalseDanger border and aria-invalid.
classNamestring""Applied to the input.

Notes

For async data, custom filtering, or custom option markup, compose the primitive directly: Combobox, ComboboxInput, ComboboxContent, ComboboxOption, ComboboxEmpty — you control inputValue and render whichever options match.