Keyameleon and Keychange solve the same problem. macOS has one input source for every keyboard, so moving from a US MacBook keyboard to a German external one means switching the layout by hand. Both are free, open-source menu bar apps that switch it for you when you start typing on another keyboard. They differ in which Macs they run on, how they treat the first key you type, and how much access to your typing they need.
At a glance
| Keyameleon | Keychange | |
|---|---|---|
| Switches based on | The keyboard you type on | The keyboard you type on |
| Price and license | Free, MIT | Free, MIT |
| macOS | 26 or later | 14 or later |
| Permissions | Input Monitoring | Input Monitoring, plus Accessibility for “Before key press” |
| First key on a newly used keyboard | Uses the previous input source | Uses the previous input source, unless “Before key press” is on |
| Access to your typing | Listen-only: it cannot delay, change or inject a key press | Listen-only by default; “Before key press” intercepts every key press |
| Setup | Guided setup window, then a Settings window | A dropdown per keyboard in the menu bar popover |
| Install | DMG or brew install --cask mastro993/tap/keyameleon | DMG or brew install dennistimmermann/tap/keychange |
What they have in common
- Each keyboard gets an input source once, and the app selects it when you press a key on that keyboard, in every app.
- Keyboards are recognized by their hardware identity, so assignments survive unplugging and reconnecting.
- Devices that report themselves as keyboards but aren’t, such as a mouse with shortcut buttons, can be hidden so they never switch anything.
- Both need the Input Monitoring permission to tell keyboards apart, and neither records or sends what you type.
- Both launch at login if you want, and update through Sparkle. Keyameleon checks at most once a day and installs only the updates you approve; Keychange offers new GitHub releases to install.
The first key you type
An app that watches which keyboard you use only learns about a key press once macOS has it. By the time it switches, that key is usually on its way to the app in front, typed with the old layout. Both apps start from that point. They part ways on what to do about it.
Keychange has a Before key press mode. It intercepts every key press in every app (password fields aside), switches the layout and re-translates the character with the new layout, or briefly holds the key back for some input methods. The first character comes out right. It needs the Accessibility permission, and it puts Keychange between your keyboard and every app.
Keyameleon never sits in that path. It observes keyboards through Apple’s CoreHID framework in listen-only mode, which cannot delay, change or inject input, and changes layouts only through the macOS text input system. The cost is the one in its FAQ: the key that triggers a switch, and any typed before macOS finishes switching, can still use the previous input source.
If you often jump between keyboards mid-word, Keychange’s mode is the real difference. If you would rather no app could ever alter a keystroke, Keyameleon is built around that rule.
When something else changes the input source
You might pick another input source from the menu bar, or another app might change it. Keychange lets you choose what happens next: turn itself off, pause until the input source matches the keyboard again, leave your choice until you switch keyboards, or leave it until your next key press.
Keyameleon has one behavior and no setting. It notes the change, shows the mismatch in its menu, and doesn’t fight it. Your next key press on a keyboard with an assignment selects that keyboard’s input source again.
What only Keyameleon does
- Guided setup. One window walks through Input Monitoring, assigns a layout to each keyboard, and confirms everything is ready before the app moves to the menu bar.
- Verified switches. After asking macOS for an input source, Keyameleon reads it back. If the switch didn’t happen, the menu shows a warning with Retry Now.
- No silent substitutes. If an assigned input source is removed from macOS, the assignment stays, nothing is picked in its place, and the menu says so until it comes back.
- Your own keyboard names, and a menu listing each assigned keyboard with its layout’s country code.
- Pause and resume with ⌘ P from the menu.
What only Keychange does
- Runs on macOS 14 Sonoma and 15 Sequoia. Keyameleon needs macOS 26.
- Before key press mode, described above.
- A menu bar badge showing the active input source at a glance.
- Four strategies for input source changes made by something else.
- Vendor and product IDs on Option-click, to tell apart keyboards with similar names.
Which one should you use?
- Your Mac runs macOS 14 or 15: Keychange. Keyameleon doesn’t run there.
- The first character must always be right: Keychange with Before key press, if you are fine granting Accessibility and letting it intercept every key press.
- You want an app that can only observe, never touch, your typing, with guided setup and clear warnings when something is off: Keyameleon.
Both are free, so trying both costs nothing. Run one at a time, though: they change the same system setting.
New to the problem? Start with how to use a different layout for an external keyboard. Keychange credits autokbisw as its inspiration; that comparison covers the command-line option.