Every keyboard shortcut on your Mac, in one place.
A menu bar app that reads the menus of every running application and shows you the whole
map — grouped by app, searchable, and exportable to PDF or PNG. Press ⌥⌘/ and
there it is.
Version 0.5.2 · Free and open source · macOS 14+ · Apple silicon
Shortcut Map
1,256 shortcuts across 22 apps · 7 conflicts
Search apps, menus, or a chord like ⇧⌘
⚠ Conflicts
Export
All running apps ⌘0
Running
Terminal ⌘1
Mail ⌘2
Numbers ⌘3
Photos ⌘4
Notes ⌘5
Preview ⌘6
macOS System ⌘7
Terminal 42
⌘KClear Scrollback
Edit
⌘NNew Window
Shell
⌘TNew Tab
Shell
⌃←Move Left
Window ▸ Move & Resize
⌥⌘IInspector
Shell
Notes 31
⇧⌘NNew Folder
File
⌥⌘CChecklist
Format
Mail 54
⌘⌫Move to Trash
Message
⇧⌘DSend
Message
⌥⌘SSidebar
View ▸ customized
⌘RReply
Message
⇧⌘RReply All
Message
⌘⇧JMove to Junk
Message
macOS System 28
⌘␣Show Spotlight search
Keyboard Shortcuts
⇧⌘4Save picture of selected area
Keyboard Shortcuts
⌃←Move left a space
Keyboard Shortcuts
⌃↑Mission Control
Keyboard Shortcuts
Numbers 67
⌥⌘KAdd Link
Format
Shortcut Map 0.5.2 — macOS 26.6⌘0 all running · ⌘1–9 by app · Esc to close
Yellow marks a conflict — the same chord bound twice, or an app shortcut that a system
hotkey swallows before the app ever sees it.
What's new in 0.5.2
Unpinning takes effect straight away. After unpinning, clicking outside the
overlay closes it again — previously it kept staying open until you closed and reopened
it.
Clearer version line. The footer showed two macOS versions with nothing to say
which was which. It now shows the one you are running, with the build machine's on
hover.
0.5.1 — a grip you can grab
A corner grip you can actually grab. 0.5.0 made the overlay resizable, but with no
frame and no grip there was nothing to aim at. There is now a visible handle in the
bottom-right corner, with a proper resize cursor.
0.5.0 — resize, pin, and one-click update checks
Resize it, and pin it. Size the overlay to suit you — the size and position are
remembered. The pin keeps it on screen when you switch apps, instead of dismissing, which
is what you want while copying a shortcut into something else.
"Check for Updates" now just checks. Click it and it looks immediately, then
installs what it finds. It works whether or not the daily automatic check is switched on,
which is now a separate item rather than something you toggle to force a check.
0.4.0 — one app, full screen
Select one app and it fills the screen. Instead of a single narrow card, the app
opens out into its own menus — File, Edit, View, Window — as separate panels across the
full width, in the order the menus actually appear rather than alphabetically.
0.3.1 — BetterTouchTool fixes
Conflicts on arrow keys are found again. A trigger like ⌃⌘→ was being
compared against a hidden fn flag that only raw key events carry, never menus
— so BTT could quietly take an arrow shortcut from an app and it would never be reported.
On one machine that was five real conflicts nobody could see.
BetterTouchTool is no longer listed as "not running", and hiding it now hides it
everywhere rather than only in the conflicts list.
0.3.0 — one-click updating
Updating is one click. When a new version is published the menu bar icon grows a
badge, and so does the overlay next to the app's name. Clicking it downloads the build,
checks it, installs it and reopens — no Terminal, and your Accessibility permission and
settings are kept.
It checks who built it, not just where it came from. An update only installs if it
is signed with the same certificate as the copy already running. A build substituted or
re-signed by anyone else is refused, wherever it was downloaded from.
Nothing is left broken if it goes wrong. Anything unexpected — no write access, a
signature mismatch, a failed download — falls back to the install command here, and a failed
swap puts the working app back.
The name is a link. Clicking "Shortcut Map" in the overlay opens this page.
Plus everything from 0.2.0: BetterTouchTool support, instant cached loading, hiding the
shortcuts every app has, ⌘0/⌘1–⌘9 navigation, pinning, and a
clean uninstall.
Reads the real thing. It walks the menu bar of every running app, so the map
shows what your apps actually define — not a list somebody typed out once.
Includes the system. Spotlight, Mission Control, screenshots, and anything you
rebound in System Settings, with your customizations taking precedence.
Finds conflicts. Two commands on one chord, or a system hotkey shadowing an app's,
get called out in yellow with a conflicts-only view.
Knows about BetterTouchTool. BTT's global triggers are invisible to every macOS
API, so they are read from BTT's own store and shown in cyan — and since a BTT binding
stealing a chord is usually deliberate, you can highlight, hide, or exclude them from
conflicts entirely.
Gets out of the way.⌘0 for everything running, ⌘1–⌘9
to jump to one app, click a title to collapse it, pin the ones you use to the top-left.
Exports. A paginated PDF or a single PNG, honoring whatever you have filtered.
Install
curl -fsSL https://github.com/dharmaje/shortcut-map/releases/download/latest/install.sh | sh
It downloads the disk image, copies the app to /Applications, and opens it.
On first launch macOS asks for Accessibility access — Shortcut Map reads the menu bars of
running apps, so it shows very little without it.
Why Terminal and not a download button?
Shortcut Map is ad-hoc signed, not notarized, because there is no paid Apple Developer
account behind it. Anything a browser downloads gets macOS's quarantine flag, and for
an unnotarized app that produces a Gatekeeper dialog with no way through — the old
Control-click → Open escape hatch is gone. Files fetched by curl are never
quarantined, so the Terminal route avoids the problem rather than fighting it.
If you would rather have the disk image, take
the DMG,
drag the app to Applications, and then run this once:
Run the install command again. It is a plain overwrite and always fetches the newest build;
your pinned and collapsed apps are kept.
The app checks once a day whether a newer release exists and, if so, says so in the menu bar
and hands you the command. That check is the only network request Shortcut Map ever
makes, and you can switch it off in the same menu — with it off, the app makes none at all.
Updating should not disturb your Accessibility grant: release builds are signed with a
stable identity, so macOS recognizes the new version as the same app. If it does ask again,
granting it once more is all that is needed.
Uninstalling
Either drag ShortcutMap.app to the Trash, or:
curl -fsSL https://github.com/dharmaje/shortcut-map/releases/download/latest/uninstall.sh | sh
The menu bar icon also has Uninstall Shortcut Map…, which does the same thing from
inside the app.
What it leaves behind, if you just use the Trash
~/Library/Application Support/ShortcutMap/ — the scan cache
~/Library/Preferences/us.epel.ShortcutMap.plist — pinned apps and settings
That is the whole list. The uninstaller removes both. macOS will not let any app remove its
own Accessibility entry, so that one is left for you in System Settings.
What it can't see
Shortcuts with no menu item are invisible to every API involved here, so the map will not
include them:
an editor's internal keymap — VS Code's command palette bindings, Vim inside a terminal
browser chrome shortcuts that aren't in a menu
global hotkeys other apps registered for themselves
Electron and Catalyst apps also fill in their submenus lazily, so a first scan can
under-report; rescanning fixes it, and every app card shows when it was last read.
Found a problem, or want something?
Bug reports and feature requests both live on GitHub, with a short form for each.
Both need a free GitHub account — GitHub does not allow anonymous issues, and there is
no way around that short of running a form service, which this project does not.
Report a bug
— what happened, how to reproduce it, and your macOS version
Request a feature
— the problem you are trying to solve matters more than the solution
The app source is private, but this is the right place for both. Issues are public, and a
shortcut map can reveal which applications you use — redact anything you would rather not
publish before pasting output.
About that permission
Accessibility access is a serious thing to hand out, so plainly: Shortcut Map reads
menu item titles and their key equivalents from running applications. It does not
read keystrokes, does not watch what you type, and sends nothing anywhere. The entire scan is
about two hundred lines in one file, and the source is
on GitHub — including the parts that
say what it gets wrong.