unikeys

Thirteen apps · one table

Every shortcut,
side by side.

Your editor, your other editor, your terminal and your notes all disagree about ⇧⌘P. unikeys reads the real keybinding files on your Mac, lays every action out as a row and every app as a column, and settles a whole row with one press.

5 rows · 4 diverging no pending changes
Action VSCode Cursor Antigravity WebStorm Ghostty
Nothing here touches your Mac. In the app, matching stages a change — pressing Save writes it.

The table

One row per action.
One column per app.

Each row is an action. Each column is an app. Each cell is the chord that action is bound to there. Forty actions across editing, navigation, terminal and window management, with the ones your apps disagree about marked as you scroll.

The unikeys Keys table: actions down the left, VSCode, Cursor, Kiro, Antigravity, WebStorm and Ghostty across the top, each cell showing a chord.

Match

Match a row
in one press.

unikeys shows you which chords are already in play and who uses each one. Pick the one you want and every app that supports the action takes it. This happens once — a later edit to a single cell changes that cell alone.

The Match dialog for Command Palette, offering ⇧⌘P used by VSCode, Cursor, Kiro, Antigravity and cmux, or ⇧⌘A used by WebStorm.

Nothing lands by surprise

Read every change
before it saves.

Edits stack up as pending changes — action, app, the chord it was on, the chord it is going to. Read the list, save it, or discard the lot. Nothing reaches a config file until you say so.

The Pending changes dialog listing six Command Palette changes across Zed, WebStorm, IntelliJ IDEA, PyCharm, Warp and Obsidian, with Discard all and Save to apps.

It knows where they live

You choose
which apps.

unikeys finds each app's real config file, shows you the path, and tells you what it found there. Turn an app off and it is left alone entirely. Keep your config somewhere unusual? Point unikeys at it.

The Apps panel showing VSCode, Cursor, Kiro, Antigravity and Zed with toggles, config file paths and a per-app status.

Backed up, then written

Every save
is reversible.

Each save is kept with what every binding was before it. Reverting loads the old values back as pending changes, so you get to read the undo before it happens too. Every file is backed up before its first write in a session.

The History panel: a save from today with three Command Palette changes across Ghostty, cmux and iTerm2, each marked written, with a Revert button.

Supported

Thirteen apps, and where they keep their keys.

Editors

  • VSCode keybindings.json
  • Cursor keybindings.json
  • Kiro keybindings.json
  • Antigravity keybindings.json
  • Zed keymap.json

JetBrains

  • WebStorm keymaps/*.xml
  • IntelliJ IDEA keymaps/*.xml
  • PyCharm keymaps/*.xml

Terminals

  • Ghostty config
  • cmux config
  • iTerm2 plist
  • Warp keybindings.yaml

Notes

  • Obsidian hotkeys.json

macOS

Get unikeys.

Available on the Mac App Store as a universal build — Apple Silicon and Intel. unikeys asks for access to each app's config folder before it reads or writes anything.

  • Surgical writes Only the actions unikeys manages are touched. Comments, ordering and formatting in your files survive untouched.
  • Backed up first Every file is copied before its first write in a session.
  • Reversible History keeps what each binding was, and reverting comes back as pending changes to review.

Honest about version 1.0: most of the format adapters were built from each app's documented config format rather than tested against a live install — iTerm2 and Antigravity are the exceptions so far. Read the pending list before your first save. The README says exactly which is which.