free · open source · MIT
A keyboard launcher for macOS. Zero dependencies. No subscription.
No account, no telemetry, and zero network calls in the shipped build. Two std-only Rust crates and hand-rolled Objective-C FFI. Press the hotkey, a panel appears, you type, things happen.
brew install --cask jonathanpopham/tap/beckon
Or the install script, or build from source. Add --no-quarantine to skip the Gatekeeper prompt for this ad-hoc-signed build.
The panel, drawn in CSS. Same layout, same colors, same font as the default theme.
what it does
Everything below ships in the one binary. Nothing phones home, nothing upsells, nothing needs an extension store.
Fuzzy search that learns your habits: integer frecency with a 14 day half-life, and a strong match always wins. saf is Safari by day two.
Halves, thirds, quarters, maximize, center, move between displays. Type window left half, or alias it to lh.
win lists every window of every app. Return focuses it, wherever it lives.
menu export finds "File > Export as PDF" in the frontmost app and presses it for you.
clip searches everything you copied; Return pastes it into the app you came from. Password manager secrets are never captured: concealed pasteboard types are respected.
Paste any path, even quoted, shell-escaped, or file:// forms, and get Open, Reveal, Quick Look, Copy Path. Return drills into folders, so ~/ge walks the tree without Finder.
file report ranks a fast local index of your directories; Spotlight backfills what the index misses.
Type 0.1 + 0.2 and get exactly 0.3: fixed point, no float drift. Units (5 km in mi), bases (255 in hex), percent (200 * 15%).
snip expands text with {date}, {time}, {clipboard}, and {cursor} placeholders, pasted where you were typing.
go google rust launcher opens the search, properly percent-encoded. Parameterized URLs with {query} placeholders.
emoji fire pastes the glyph where you were. Plus arrows, math, currency, and mac key glyphs.
uuid, b64, sha256, json pretty-print, epoch, count. Return copies the answer.
Sleep, lock, empty trash, toggle dark mode, volume, quit frontmost, restart Finder.
Drop an annotated executable in ~/.beckon/scripts/ and it becomes a command. Any language with a shebang.
A plugin is any executable speaking JSON-RPC 2.0 over stdio, in any language. Three methods, forty lines of stdlib Python in the example. The protocol ↗
On a fresh install, Return on the blank panel starts a guided tour: seven steps, one Return each, taught inside the launcher itself. Type anything to skip.
the bet
Not a subscription, not a webview, not an npm tree. Same inputs, same ranking, byte for byte, forever.
Two Rust crates, std only. No wrapper crates, no webview, no JS runtime, no build.rs. The dependency audit is part of the gate.
The macOS shell talks to AppKit, Carbon, CoreGraphics, and the Accessibility APIs through hand-rolled Objective-C and C FFI. The engine underneath builds and tests anywhere, including Linux CI.
No floats in ranking paths. Fixed-point integers, no clock reads outside injected parameters, and golden tests for every ranking behavior.
Zero network calls in the shipped build, enforced by a no-network audit. No telemetry, no account, no update pings. std::net is forbidden in both crates.
Clipboard history, snippets, frecency, and settings are plain files in ~/.beckon/. Readable, greppable, syncable, yours.
Nothing model-backed ships in the default binary, ever. Anything that wants the network sits behind a cargo feature that is off by default.
make it yours
Everything lives in plain files under ~/.beckon/. This is config.json, and every key is optional.
{
"aliases": { "lh": "window.left-half" },
"hotkey": { "key": "space", "modifiers": ["opt"] },
"max_results": 9,
"theme": { "background": "#1C1C21", "foreground": "#FFFFFF",
"accent": "#5AC8FA", "font_size": 22 },
"triggers": { "v": "clip" }
}
{"hotkey": {"key": "space", "modifiers": ["cmd", "shift"]}}
lh becomes "window left half".opt, cmd, ctrl, shift). The example on the left moves it to Cmd+Shift+Space.clip, win, file, menu, emoji, snip, go), so v can be your clipboard.install
brew install --cask jonathanpopham/tap/beckon
Add --no-quarantine to skip the Gatekeeper prompt for this ad-hoc-signed build.
curl -fsSL https://raw.githubusercontent.com/jonathanpopham/beckon/main/scripts/install.sh | sh
git clone https://github.com/jonathanpopham/beckon cd beckon scripts/bundle.sh open dist/Beckon.app