Why show keystrokes at all
In a tutorial, a shortcut is invisible. You press ⌘⇧T, a closed tab comes back, and the viewer sees a tab appear out of nowhere. Saying the shortcut out loud helps, but people miss it, mishear it, or join halfway through.
A keystroke display puts the shortcut on screen for a second or two. The viewer can copy it, pause the recording on it, or just understand what happened. It also tends to slow presenters down in a good way: when your shortcuts are on screen, you stop chaining five of them in half a second.
What macOS has built in
Nothing designed for an audience. The closest thing is the Keyboard Viewer:
- Open System Settings → Keyboard, then Text Input → Edit, and turn on Show Input menu in menu bar.
- Click the Input menu in the menu bar and choose Show Keyboard Viewer.
It shows an on-screen keyboard and marks the modifier keys you hold. It is a tool for finding characters on your layout, not a keystroke display: a whole keyboard image takes up a large part of the screen, and viewers have to work out which key just changed.
The Screenshot toolbar (⇧⌘5 → Options) can show mouse clicks in a recording, but not keys. So in practice, showing keystrokes means a small app.
KeyCastr: the free, open-source answer
KeyCastr has been the standard answer on the Mac for well over a decade. It is free and open source, and it draws your keystrokes in a small floating window that any recorder and any full-screen share picks up.
- Display modes: command keys only, all modified keys, or every keystroke, with mouse clicks as an option.
- Look: a couple of visual styles, with adjustable size and how long each key stays on screen.
- Permission: like every tool of this kind, it asks for macOS permission to read the keyboard.
If keystrokes are all you need, start with KeyCastr. It is free, the code is public, and it does this one job well.
Shortcuts only, or every key?
Most keystroke tools offer the same choice, and for most presenting the answer is shortcuts only – key combinations that include ⌘, ⌃ or ⌥. Viewers see ⌘K; they do not see you typing a search, a URL or a chat message.
Show every key only when the typing itself is the lesson: Vim, a terminal walkthrough, a typing course, keyboard-driven games. And when you do, remember that everything you type in that session is on screen, in every app.
Passwords and privacy
A keystroke display has to read your keyboard – that is the permission you grant it. Three things are worth checking before you rely on one in front of people.
- Trust the app. Prefer one whose code is public, like KeyCastr, or one that states plainly that keys are only drawn on screen and never stored or sent.
- Password fields. In most password fields macOS turns on secure input, which stops other apps from reading what you type. That covers the usual login sheets and browser password fields.
- Terminal password prompts are the exception. A
sudoprompt is not a secure text field. Terminal and iTerm2 both have a Secure Keyboard Entry option in their app menu – turn it on before you type passwords at a prompt while a keystroke display is running.
Then test it: open a password field, type something, and confirm nothing appears. Thirty seconds now beats finding out on a recording you have already published.
Making it readable on a call
- Go bigger than feels right. Your screen is scaled down into the viewer's window, so a comfortable size on your display arrives small.
- Pick a spot nothing else uses. Bottom centre works until a call app parks its controls there. Check where your call app puts its own toolbar and your self-view.
- Share the entire screen. A keystroke display is its own window, and a single-window share leaves it out.
- Keep the time on screen short. One to two seconds is enough; longer, and three shortcuts pile into a queue nobody can read.
Keystrokes together with zoom and webcam
If you present often, keystrokes are usually one of several things you want on screen at once: a zoom viewers can see, your face, a pointer they can find. Running three separate apps for that works, but each brings its own window, permission and hotkeys.
Gaze draws keystrokes in the same layer as its zoom, its webcam bubble and its drawings, so they all land in the screen share and the recording together. By default it shows only shortcuts, it shows nothing while macOS secure input is on, and keystrokes are never stored or sent. Keystrokes are part of Gaze Pro; if they are all you need, KeyCastr is the better deal.