Installation
Theme
Mode

Navigation

Command palette

The ⌘K launcher — one keystroke to search every command, project, and person, then act without touching the mouse. Built on Base UI Dialog for the overlay and Base UI Autocomplete for filtering, keyboard navigation, and ARIA combobox semantics.

$npx shadcn@latest add @orbit/command-palette

Overview

Click the trigger, press ⌘K (Ctrl+K on Windows/Linux), or wire your own button — all three open the same palette. Selecting a command closes it and reports the pick.

Live · click or press ⌘K

Open the palette, type to filter, arrow to navigate.

last run:

The palette

Type to filter across every group at once — actions, navigation, projects, and people. Results stay grouped, each with a tinted icon and its shortcut; empty groups disappear, and no matches shows a friendly empty state with the query. Try typing in the field below.

Actions
Create taskAdd a task to the current projectC
New projectStart a fresh projectP
Invite peopleAdd teammates to the workspaceI
Switch themeToggle light and dark\
Navigate
Go to InboxYour notificationsGI
Go to My tasksEverything assigned to youGT
Go to CalendarSchedule and milestonesGC
Go to SettingsWorkspace preferencesGS
Projects
Orbit24 tasks · On trackProject
Apollo12 tasks · At riskProject
Horizon8 tasks · On trackProject
People
Sam ChenDesign · Orbit
Priya NairResearch · Apollo
Alex RiveraEngineering · Orbit
navigateselect
Orbit

Anatomy

Four parts make the palette fast to scan and faster to act on.

Search field

A single input that filters every group at once, with an esc hint to dismiss.

Grouped results

Actions, Navigate, Projects, and People — each labeled, so the list stays scannable.

Item row

A tinted icon, a title and subtitle, and a trailing shortcut or a type tag.

Footer hints

Persistent ↑↓ navigate and ↵ select cues, plus the workspace it’s acting on.

Shortcuts & tags

Rows teach their own chords — a trailing kbd hint per command — while record-type rows carry a tag instead. Icons take a tone for a 30px tinted tile, or render raw for avatars and dots.

Actions
Create taskC
Switch theme\
Navigate
Go to InboxGI
Go to SettingsGS
Projects
Orbit24 tasks · On trackProject
navigateselect
Orbit

Props

PropTypeDefaultDescription
itemsCommandGroup[]Grouped commands: { label, items: CommandItem[] }. Empty groups disappear while filtering.
openbooleanControlled open state. Pair with onOpenChange.
defaultOpenbooleanfalseInitial open state when uncontrolled.
onOpenChange(open: boolean) => voidCalled when the palette opens or closes (trigger, ⌘K, Esc, scrim, select).
hotkeybooleantrueGlobal ⌘K / Ctrl+K toggles the palette. Turn off to bind your own.
onSelect(command: CommandItem) => voidCalled with the picked command on Enter or click; the palette then closes.
placeholderstring"Search commands, projects, people…"Search input placeholder.
emptyHintstring"Try a different term…"Second line of the empty state, under “No results for …”.
workspacestring"Orbit"Workspace name shown in the footer next to the mark.
inlinebooleanfalseRender the panel in the page flow instead of a ⌘K dialog — for docs and embeds.
childrenReactNodeTrigger slot — e.g. <CommandPaletteTrigger />. Ignored when inline.
classNamestringClass applied to the 580px panel.
PropTypeDefaultDescription
CommandItem.idstringUnique id, passed back through onSelect.
CommandItem.labelstringPrimary row text; also what the filter matches.
CommandItem.descriptionstringSecondary line under the label. Also searched.
CommandItem.iconReactNodeRow visual — a 16px glyph, avatar, or dot.
CommandItem.tone"blue" | "teal" | "green" | "amber" | "red" | "neutral"Tint pair for the 30px icon tile. Omit to render the icon untiled (avatars).
CommandItem.shortcutstring[]Trailing kbd hint, one key per entry — ["G", "I"].
CommandItem.tagstringTrailing type tag — e.g. “Project”.
CommandItem.keywordsstring[]Extra search terms that aren't visible on the row.
CommandItem.disabledbooleanfalseRenders the row non-interactive.
CommandPaletteTrigger.labelstring"Search or jump to…"Placeholder-style label in the 260×38 search-box trigger.

Usage

The palette rewards power users without getting in anyone else’s way.

Do

Surface the most-used actions first

Order groups by frequency — actions and navigation before long lists of records.

Don’t

Make it the only way in

The palette is an accelerator, not a replacement for visible buttons and nav.

Do

Show the shortcut on the row

Teaching the chord next to the command is how people graduate to the keyboard.

Don’t

Return a flat, unlabeled list

Grouping with headers is what keeps a long result set readable.

Keyboard & accessibility

The overlay is a Base UI Dialog — role=dialog with aria-modal, a focus trap, and focus restore on close. Inside it, Base UI Autocomplete gives the input ARIA combobox semantics: it owns the listbox and tracks the highlight with aria-activedescendant, so hands (and screen readers) never leave the search field. Esc always closes.

⌘ K / Ctrl KOpen or close the palette
TypeFilter every group at once
↑ ↓Move between results
Run the highlighted command
EscDismiss the palette