Skip to main content
ComponentsNavigation

Component · Navigation

Command Palette

Flagship universal command surface: fuzzy search, groups, recent/contextual actions, nested pages, arguments, async generation gates, history, and fullscreen promotion.

Kind
widget
Input
interactive
Canvas
120×40

Live preview

Loading terminal preview.

Static terminal poster. Choose Run live to start the Rust demo.

Ghosttycommand-palette/basic
Loading terminal poster…
○ loading posterNo input — rendered state only
Command Palette · exact mounted Rust story

01 · Purpose

What it is for

Flagship universal command surface: fuzzy search, groups, recent/contextual actions, nested pages, arguments, async generation gates, history, and fullscreen promotion.

Best fit: Navigation · navigation · widget

02 · Behavior

What the mounted story proves

  1. 01

    CommandPalette

    Representative 120×40 terminal state.

  2. 02

    Passive paint

    No keyboard or pointer action is claimed by this representative story.

  3. 03

    Evidence stays explicit

    6 covered · 8 partial · 4 missing axes.

03 · Implement

Install, then start from exact code

Install

cargo add termrock --git https://github.com/tailrocks/termrock.git --rev 5283c2acf9154d0cfcd37b1ffe821c00faf90ea2

Add TermRock once. Keep domain effects in the host application.

Minimal implementation

Exact Rust setup used by command-palette/basic.

Open to load code.

04 · Adapt

Variants and composition

Variants

Use the preview Variant menu when alternate registered stories exist. Each selection mounts a fresh configuration.

Composition

Navigation · navigation · widget

05 · Reference

API, tokens, accessibility

API

CommandPaletteOpen source ↗

Tokens

DesignSystemInspect exact story code for roles and capability projection.

Accessibility

Input contract mountedNo input claim in the representative story.

Contract

Evidence in progress6/23 axes covered

06 · Go deeper

Advanced guidance

Authored implementation guidance

Purpose. Let users jump to any command by typing a query. TermRock paints the modal, filter field chrome, and result list; you own the command catalog and what happens on activation.

When to use / when not

Use CommandPalettePrefer
Global command jump—
File/symbol pickersPicker
Agent slash commands onlyPromptComposer slash menu
Settings formsForm

Focus law

ConcernOwner
Overlay open/Esc peelOverlayStack
Surface focus / accepts inputHost (focused + set_accepts_input)
Result cursorPicker/list inside CommandPaletteState
Filter / rankingConsumer projection

Outcomes

  • Ignored
  • QueryChanged — rebuild filtered rows
  • CursorMoved — result highlight changed
  • Activated(Id)
  • Cancelled — Esc with empty query

Intents

Results use list intents (j/k, page, Enter, Esc). Query typing stays on TextInput path. Two-stage Esc: clear query, then cancel.

Non-color

  • Empty: ∅ / [ ] + message
  • Panel: Focused vs Normal border roles
  • Footer: muted keymap hint

Responsive

GeometryBehavior
height ≥ 8, width ≥ 28Footer hint
narrow (< 28)Drop footer; short placeholder
Overlay narrowFullscreen promote via OverlayPolicy
Ownership boundary

TermRock owns reusable terminal rendering and interaction state. The host owns domain data, policy, persistence, authorization, and side effects.

Evidence status

6 covered, 8 partial, and 4 missing contract axes. Missing evidence is not a behavior claim.