Native select

Presents browser-native options inside a 1px control border.

City

Where the desk is

The platform list. Vlak chrome.

Use it for

  • A short fixed list where the platform picker is fine, especially on phones.
  • Forms that post natively; the value travels with the form.

Not for

  • Rich option labels or type-ahead over long lists; use Select or Combobox.
  • Fewer than three options; use Radio.

Three ways in. They share one source, so the pixels match whichever you pick.

1. Import the package

npm install @noorddev/vlak-react

// once, next to your app's root
import "@noorddev/vlak-react/css";

import { NativeSelect } from "@noorddev/vlak-react";

Precompiled React and one stylesheet. No compiler to configure. Per-component imports work too: @noorddev/vlak-react/components/native-select.

2. Vendor the source

npx @noorddev/vlak-cli add native-select

The StyleX leaf lands in components/vlak/, for your own compiler to own. See StyleX.

3. Through shadcn

npx shadcn add https://vlak.dev/r/native-select.json

The same registry item, installed by shadcn's CLI.

CSS only

<link rel="stylesheet" href="node_modules/@noorddev/vlak/css/vlak.css" />

No React. Link vlak.css and use the markup and classes below.

import { NativeSelect } from "@noorddev/vlak-react";

<NativeSelect label="City" defaultValue="alkmaar">
  <option value="alkmaar">Alkmaar</option>
  <option value="amsterdam">Amsterdam</option>
  <option value="rotterdam">Rotterdam</option>
</NativeSelect>

NativeSelect

The platform list. Vlak chrome.

PropTypeDefaultDescription
labelReactNode

Also accepts SelectHTMLAttributes<HTMLSelectElement>.

KeysDoes
Space, Alt + Arrow downOpens the platform list
Arrow up, Arrow downChanges the value
Type a letterJumps to a matching option
<select class="rs-native-select"><option>Alkmaar</option><option>Amsterdam</option><option>Rotterdam</option></select>
.rs-native-select.rs-native-select-invalid.rs-native-select-field.rs-native-select-label