Select

Single-choice picker from a known list. Native <select> element for keyboard + screen-reader behaviour out of the box.

Live previewrendered from recipe via {tokens} resolution
ARIA notes

Native <select> handles keyboard (arrow keys, Home/End, type-ahead) and screen-reader announcement automatically. Bind label via for/id. Use aria-required when required.

When to use Select

Use a select for single-choice picking from a known, finite list of 3–15 options. The native <select> element is the substrate's canonical pattern — keyboard navigation (arrows, Home/End, type-ahead) and screen-reader announcement work without JavaScript.

When to use

  • Country picker, language picker, status picker, role picker.
  • Any single-choice form field with a knowable enum.

When not to use

  • Two or three options visible at once: use radio buttons.
  • 15+ options or open-ended search: use a combobox (subsequent milestone).
  • Multiple selection: use a multi-select pattern (subsequent milestone).

Native > custom

Custom <div role="listbox"> selects are an anti-pattern under WCAG 2.2 — replicating the native keyboard, focus, and announcement behaviour correctly is more work than it appears, and most attempts ship subtle bugs. The native <select> is the right answer at this scale.