Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

What extensions are

An extension is a Rust crate under commands/ in the corvo repository. It implements the Command trait from corvo-core, registers itself with one macro, and the launcher does the rest.

The anatomy

commands/<your-id>/
├── Cargo.toml        # package name corvo-<your-id>, deps: corvo-core, corvo-ext
├── src/lib.rs        # the Command impl, data loading, tests
├── README.md         # only if setup is needed (tokens, permissions)
└── CHANGELOG.md      # one entry per merged change

Registration is compile-time. In src/lib.rs:

#![allow(unused)]
fn main() {
corvo_core::register_command!(YourCommand);
}

The build script scans commands/*/Cargo.toml and links every crate into the binary automatically. You never edit src/main.rs.

What a command can do

You provideThe launcher provides
id, keywords, priorityplacement in root search
search(query) → rowsthe result list, fuzzy ranking, rendering
execute(result_id) → an Actionrunning the action (open, copy, shell, toast…)
actions(result_id) → a menuthe ⌘K actions panel
data, loaded off the search pathbackground task execution

The full contract is on The command contract.

What an extension must not do

  • Never block search. Disk, network, AppleScript, and CDP run in a background task behind a cache. search reads the cache.
  • Never depend on corvo-ui. Extensions produce data; only the launcher renders.
  • Never reach for raw OS APIs in the crate. OS work goes through corvo-platform, which owns every #[cfg(target_os)] in the workspace.
  • No telemetry, no analytics, no opaque bundled binaries. Corvo sends nothing anywhere, and extensions must not either.

The kit

crates/corvo-ext ships the shared patterns:

ModulePurposeRaycast analog
listrows, sections, open entries, empty statesList, List.Item, List.Section
actionsaction-menu buildersActionPanel, built-in actions
cacheTTL cache for off-path loadingCache, useCachedPromise
prefsper-extension TOML settingsPreferences
routingquery and result-id dispatchcommand lifecycle
feedbacktoasts and notificationsToast, HUD

Each module has a chapter under Module reference.