The faster than your launcher launcher.
An enhanced fork of the original Leader Key.app by @mikker. The fork has grown beyond the original macOS app into a small system: a Karabiner-Elements-driven overlay, a TypeScript Karabiner pipeline, a Raycast extension, and an IntelliJ plugin — all coordinated over local Unix sockets.
Original concept: a riff on Raycast, @mxstbr's multi-key Karabiner setup, and Vim's <leader> key.
Watch the original intro videos by @mikker:
Further reading:
- CHANGELOG.md — recent releases and unreleased work
- SKILLZ.md — implementation notes and accumulated lessons
- CLAUDE.md — developer architecture guide
- IntelliJ integration — first-class
intellijaction type, delivered over a Unix domain socket (/tmp/intellij-leaderkey.sock). Multi-action syntax likeSaveAll,ReformatCode|100(trailing|ms= inter-action delay). keystrokeaction type — compact shortcut syntax (Ct= Ctrl+T,COt= Ctrl+Opt+T), PID-targeted delivery viaCGEvent.postToPid(_:), optional app targeting + post-send focus.- Rewritten Raycast extension — local-first
Search Shortcuts,Browse Configs,Add/Edit by Path, internal copy/paste clipboard, current-app deeplinks, recursive browse search, glanceable detail previews. - Structured editors for
intellijandmenu— action search/append, separate delay field, app selection + live menu-item search, ordered fallback menu paths. - Moveable full-path editing — live validation, same-config relocation, missing-parent auto-creation, inline collision checks.
- Action description metadata — dedicated
descriptionandaiDescriptionfields so generated labels stay automatic while notes remain editable and searchable. - Local-socket control —
/tmp/leaderkey.sockis now the only supported external control path. Theleaderkey://URL scheme has been removed. - Menubar reload feedback — subtle menubar pulse on successful reload (no more HUD flash), plus a selectable reload sound (
Glass,Hero,Ping,Pop,Funk, or silent). - Managed nested
LEADERKEY_SPECIFIC_CONFIGS— app-specific activation rules regenerate inside the existingkarabiner.ednblock without clobbering surrounding manual content.
See CHANGELOG.md for the full list.
Leader Key is a companion to Karabiner-Elements and uses Goku (or the in-tree karabiner.ts) to compile Karabiner configs. Follow the steps in order.
brew install --cask karabiner-elementsOpen it once and grant the requested permissions (Accessibility, Input Monitoring). See karabiner-elements.pqrs.org for details.
brew install yqrashawn/goku/gokuLeader Key invokes Goku to compile ~/.config/karabiner.edn into ~/.config/karabiner/karabiner.json. Any Homebrew Goku build works; Leader Key uses GOKU_EDN_CONFIG_FILE=... internally (no reliance on goku -c).
Option A — Homebrew tap (recommended)
brew tap arabshapt/leader-key-enhanced
brew install --cask leader-key-enhanced
⚠️ The published cask currently pins an older build. A refreshed cask is pending; until then, prefer Option B or C for the latest features listed above.
Option B — Build from source
git clone https://github.com/arabshapt/LeaderKey.app.git
cd LeaderKey.app
xcodebuild -scheme "Leader Key" -configuration Release buildThe built app lands in the derived-data Build/Products/Release/ directory. Copy Leader Key.app into /Applications.
Option C — Direct download
Fallback pre-built zip: Google Drive (v1.16.0-enhanced — same build as the current Homebrew cask).
- Launch Leader Key. It creates
~/Library/Application Support/Leader Key/withglobal-config.jsonandapp-fallback-config.json. - Make sure
~/.config/karabiner.ednexists before your first export. Leader Key injects into and updates an existing Goku config, but it does not bootstrap a completekarabiner.ednfrom scratch. If you are starting fresh, create a minimal Goku config first, then follow EDN_INJECTION_GUIDE.md. - Bind a leader key in Settings → General (e.g. F12, Hyper,
Cmd+Space). Karabiner-Elements is what actually captures the key — Leader Key exports the rule for you. - Click Apply config (or save any edit). Leader Key injects its managed sections into
~/.config/karabiner.edn, runs Goku, writeskarabiner.json, and Karabiner-Elements reloads automatically. - Press your leader key — the overlay appears.
Fast-path config editor and shortcut search. See raycast-leader-key/README.md for install instructions (the extension runs locally against Leader Key over /tmp/leaderkey.sock).
Enables the intellij action type. Plugin repo: arabshapt/intellij-action-executor.
- Download the latest
intellij-action-executor-*.zipfrom the Releases page. - In IntelliJ: Settings → Plugins → ⚙️ → Install Plugin from Disk → pick the zip → restart IDE.
- On startup the plugin opens
/tmp/intellij-leaderkey.sock; Leader Keyintellijactions then route through it.
Building from source requires Java 21 (system Java 25 breaks Gradle) — see CLAUDE.md for details.
Leader Key is not a standalone keyboard remapper. Karabiner-Elements is the source of truth for key capture and frontmost-app detection; Leader Key is the overlay, configurator, and IPC hub that sits on top of it.
Input (keystroke → action):
Karabiner-Elements (captures keys + detects frontmost app)
→ user_command_receiver.sock (v1 JSON payload)
→ Leader Key InputMethod → Controller
→ overlay renders hints → user presses next key
→ action executes:
application → NSRunningApplication.activate()
menu → AX API (in-process)
keystroke → CGEvent.postToPid()
intellij → /tmp/intellij-leaderkey.sock (UDS)
open (URL) → NSWorkspace
Config edit → Karabiner:
Native UI or Raycast edit
→ ~/Library/Application Support/Leader Key/*.json
→ Karabiner2Exporter
→ Goku (EDN) OR karabiner.ts (TypeScript DSL)
→ ~/.config/karabiner/karabiner.json → Karabiner reloads
| Component | Language | Role | Location |
|---|---|---|---|
| Leader Key app | Swift (AppKit) | Overlay, configurator, IPC hub, exporter | Leader Key/ |
| Karabiner-Elements | External (C++) | Keyboard event capture + frontmost-app detection | karabiner-elements.pqrs.org |
| Goku | External (Clojure) | EDN → karabiner.json compiler |
yqrashawn/GokuRakuJoudo |
| karabiner.ts | TypeScript | Type-safe Karabiner DSL + builder (alternative to Goku EDN for personal profiles) | karabiner.ts/README.md |
| Raycast extension | TypeScript / React | Fast config editor, shortcut search, path editing | raycast-leader-key/README.md |
| IntelliJ plugin | Kotlin / Java | UDS action executor for intellij action type |
arabshapt/intellij-action-executor |
| Socket | Direction | Purpose |
|---|---|---|
/Library/Application Support/org.pqrs/tmp/user/$UID/user_command_receiver.sock |
Karabiner → Leader Key | Inbound key-triggered commands (v1 JSON payloads) |
/tmp/leaderkey.sock |
External tools → Leader Key | apply-config, sync-goku-profile, navigation commands (replaces the retired leaderkey:// scheme) |
/tmp/intellij-leaderkey.sock |
Leader Key → IntelliJ | Newline-delimited JSON, stream socket (SOCK_STREAM) |
See CLAUDE.md for the full architecture guide, file layout, and manual test harness.
- Typing the name of the thing can be slow and give unpredictable results.
- Global shortcuts have limited combinations.
- Leader Key offers predictable, nested shortcuts — like combos in a fighting game.
- leaderom → Launch Messages (
open messages) - leadermm → Mute audio (
media mute) - leaderwm → Maximize current window (
window maximize)
Any key can be your leader key, but modifiers alone will not work.
Examples:
- F12
- ⌘ + space
- ⌘⌥ + space
- ⌘⌥⌃⇧ + L (hyper key)
Advanced examples (via Karabiner-Elements):
- right ⌘ + left ⌘ at once, bound to F12
- caps lock bound to hyper when held, F12 when pressed
See @mikker's config in the wiki for an akimbo-cmds example.
Activate Leader Key, then cmd + ,.
This project is an enhanced fork of the original Leader Key.app created by @mikker. All original concepts, design, and core functionality are credited to the original author.
- Original project: https://github.com/mikker/LeaderKey.app
- Original author: @mikker
- Fork maintainer: @arabshapt
MIT — same as the original project.

