Skip to content

ivalkou/rapidkey

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

44 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

RapidKey

A keyboard-driven command palette for macOS. Press the leader hotkey, then type a key sequence to launch apps, open URLs, or run shell commands defined in ~/.config/rapidkey/rapidkey.toml.

RapidKey runs as a menu bar utility (no Dock icon). It watches your config file and reloads changes automatically when you save.

Inspired by the which-key plugin in LazyVim — press a leader key, then see a visual map of the shortcuts available at each step.

RapidKey command palette

RapidKey running apps branch

RapidKey command output panel

Table of Contents

Features

  • Global leader hotkey opens a command palette
  • Key sequences with optional groups and section titles in the palette header
  • Running apps branch at the root: press Space to switch to open applications (hotkeys 10, then az)
  • Actions: run (shell command), open (application), url (browser)
  • Live shell output panel for long-running commands (show_output)
  • Config hot-reload when rapidkey.toml is saved
  • Optional launch at login
  • Two leader modes:
    • Chord — e.g. alt+space (no extra permissions)
    • Double-tap modifier — e.g. doubletap+ctrl (requires Input Monitoring)

Quick Start

  1. Install via Homebrew:

    brew install --cask ivalkou/tap/rapidkey
  2. Launch RapidKey from /Applications. On first run it creates ~/.config/rapidkey/rapidkey.toml with example bindings. If your leader uses a double-tap modifier, grant Input Monitoring when prompted (see Permissions).

  3. Press the leader hotkey (default: alt+space) to open the palette, then type a key sequence to run an action. See Usage for palette navigation and Configuration to customize bindings.

Installation

Requirements

  • macOS 15.6 or later (Apple Silicon)
  • Xcode (Swift 5; uses TOMLKit via Swift Package Manager) — only needed to build from source

Homebrew (preferred)

Install via Homebrew to get updates:

brew install --cask ivalkou/tap/rapidkey

Install a specific version:

brew install --cask ivalkou/tap/rapidkey@0.1.0

Manual install

Note: RapidKey is not notarized. Notarization is Apple's process for approving binaries before distribution. The Homebrew cask removes the com.apple.quarantine attribute on install, so the app should run without the "Apple cannot check … for malicious software" warning.

For a manual install from Releases, unpack the zip, move RapidKey.app to /Applications, then if Gatekeeper blocks launch:

xattr -d com.apple.quarantine /Applications/RapidKey.app

Usage

First launch

On first run, RapidKey creates ~/.config/rapidkey/ and writes a fully documented rapidkey.toml with example bindings. On every launch it also writes example.toml in the same folder — the same reference content (not used by the app; edits are overwritten on the next launch).

Edit rapidkey.toml in any text editor; changes are picked up automatically after you save (debounced file watcher).

Menu bar

Use the menu bar item to:

  • Show [leader] — open the command palette
  • Open Config Folder — open the config directory in Finder
  • Grant Input Monitoring… — shown when the leader is doubletap+… and permission is missing
  • Quit — exit the app

Palette keys

  • Space (at the root) — open the running-apps branch (see below)
  • Backspace — step back one level in config groups, or return from running apps to the root (no effect at the root)
  • Esc — close the palette

Running apps (built-in)

At the root of the palette, Space opens a dynamic list of running GUI applications. The list is a snapshot taken when you enter the branch:

  • Order — frontmost app first, then the rest sorted by name
  • Hotkeys1 through 9, 0, then a through z (up to 36 apps; extras are omitted)
  • Action — activates the selected app and closes the palette

Space is reserved for this branch at the root; a root-level binding "space" in [bindings] will not be reachable. This branch is not configurable via TOML in v1.

Configuration

Config file: ~/.config/rapidkey/rapidkey.toml

Reference (rewritten on each app launch): ~/.config/rapidkey/example.toml

Top-level options

Option Description
leader Global shortcut to open the palette
shell Shell for run commands (default: sh; name on PATH or absolute path)
launch_at_login Start RapidKey at login (true / false)

Leader

Chord — modifiers and key joined with +:

leader = "alt+space"

Modifiers: ctrl, alt, cmd, shift. Keys: az, AZ, 09, punctuation (= - [ ] ' ; \ , / . \``), Shift symbols (! @ # $ % ^ & * ( ) _ + { } | : " < > ? ~), and space, tab, enter, esc, f1f12`.

Keys refer to physical US QWERTY positions, not the character printed by your current keyboard layout.

Double-tap modifier — tap the same modifier twice within the configured window:

leader = "doubletap+ctrl"

Also accepts doubletap+alt, doubletap+cmd, doubletap+shift (alias: 2tap+…).

Sections

Section Purpose
[panel] Where the palette appears: center, cursor, top, bottom; show_app_icons — bundle icons for open bindings and running apps (default true)
[behavior] timeout_ms — auto-close after idle (0 = disabled); double_tap_ms — max gap between modifier taps (default 350); double_tap_min_ms — min gap, shorter pairs ignored as bounce (default 80); double_tap_cooldown_ms — ignore new double-taps after a trigger (default 500)
[groups] Optional titles for key prefixes (shown in the palette header)
[bindings] Key sequences and their actions

Bindings

Keys in a sequence are space-separated. For example, "f h" means press f, then h.

Supported keys match the leader list above: letters, digits, punctuation, and Shift symbols (e.g. ! for Shift+1). In TOML, quote keys that are special to the parser — for example "1", "!", "[", or "g \"" for a two-key sequence ending with ".

Each binding is an inline table with:

  • title — label in the palette (required)
  • Exactly one of: run, open, url
  • show_output — with run only: show live command output (default false)
  • work_dir — with run only: working directory (absolute path or ~)
  • confirm — with run only: confirmation step in the palette before executing (default false); true uses the binding title, or pass a custom string; press y to run, n or Esc to cancel

Example:

leader = "alt+space"

[panel]
position = "center"

[behavior]
timeout_ms = 0
double_tap_ms = 350
double_tap_min_ms = 80
double_tap_cooldown_ms = 500

[groups]
"f" = "Files"
"w" = "Web"

[bindings]
"t"   = { title = "Terminal", open = "Terminal" }
"1"   = { title = "Calculator", open = "Calculator" }
"!"   = { title = "Notes", open = "Notes" }
"f h" = { title = "Home", run = "open ~" }
"f l" = { title = "List Home", run = "ls ~", show_output = true }
"w g" = { title = "Google", url = "https://www.google.com" }

A group key (e.g. "f") must have bindings under that prefix (e.g. "f h", "f d") to appear as a navigable group.

Edit config

The default "x e" binding uses open -t, which opens the file in the associated text editor (often TextEdit). Replace the run value in your config if you prefer a different GUI editor.

Permissions

Leader type Permission
Chord (e.g. alt+space) None beyond running the app
Double-tap modifier Input Monitoring — System Settings → Privacy & Security → Input Monitoring → enable RapidKey

If Input Monitoring is required but not granted, the leader will not fire. Use Grant Input Monitoring… in the menu bar to open the permission dialog again.

Building from source

Xcode

  1. Open RapidKey.xcodeproj
  2. Select the RapidKey scheme
  3. Run (⌘R)

Command line

xcodebuild -project RapidKey.xcodeproj -scheme RapidKey -configuration Release -derivedDataPath build build
open build/Build/Products/Release/RapidKey.app

The build/ directory is gitignored.

Maintainers: see dev-docs/releasing.md for publishing releases and Homebrew tap updates.

Project layout

RapidKey/
  App/                      Entry point, menu bar, AppDelegate
  Models/                   Config, Action, Leader, palette models
  Services/                 Config load/watch, hotkeys, shell execution
  Services/Config/          TOML leader/parse helpers
  Features/CommandPalette/  Command palette UI and state
  UI/                       Floating panels, design tokens, key catcher
  Resources/                Bundled default config template (config-body.toml)

License & Author

MIT License — see LICENSE.

Copyright © 2026 Ivan Valkou

Ivan Valkou

About

A keyboard-driven command palette for macOS

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors