Karabiner-Elements is the Swiss Army knife of Mac keyboard customization: it remaps keys, builds layers and runs rules you write in JSON. One of those rules can select an input source when a key comes from a particular keyboard. Keyameleon does only that one job, without rules. Which is better depends on whether you already use Karabiner-Elements for something else.
At a glance
| Keyameleon | Karabiner-Elements | |
|---|---|---|
| What it is | A per-keyboard input source switcher | A general keyboard customizer |
| Per-keyboard input sources | Pick an input source for each keyboard in a list | Write a complex modification with a device condition and a select_input_source action |
| How it reads your typing | Observes keyboards in listen-only mode; cannot change or inject input | Takes over the keyboards it modifies and sends their input through its own virtual keyboard driver |
| Install | An app and the Input Monitoring permission | An app, a driver extension to approve, and Input Monitoring |
| Price and license | Free, MIT | Free, public domain (Unlicense) |
Per-keyboard switching in Karabiner-Elements
Karabiner-Elements rules (complex modifications) can be limited to certain devices with a device_if condition, matching a keyboard’s vendor and product IDs or the built-in keyboard. A rule can also run a select_input_source action, which picks an input source by language or ID. Combine the two and a key press on one keyboard can select that keyboard’s input source.
It works, but you write and maintain that rule yourself, once per keyboard, and test that it doesn’t swallow or change the keys it matches. Karabiner-Elements’ own documentation also warns that selecting input sources with an input mode (Chinese, Japanese, Korean, Vietnamese) may fail because of a macOS issue, and suggests sending the input source shortcut instead.
Keyameleon: the same job, without rules
Keyameleon lists every keyboard it finds. You pick an input source for each, including input methods like Japanese Kana or Pinyin, and it switches when you start typing on that keyboard. It never installs a driver and never sits between your keyboard and your apps: it observes keyboards through Apple’s CoreHID framework in listen-only mode and changes layouts through the macOS text input system.
It also tells you when something is wrong. The menu bar menu shows a notice when Input Monitoring is off, when switching is paused, or when an assigned input source has been removed from macOS.
Using both
Plenty of people use Karabiner-Elements for remapping and want a layout per keyboard on top. Keep in mind that Karabiner-Elements re-sends the input of the keyboards it modifies from its virtual keyboard, so other apps may no longer see which physical keyboard a key came from. If Keyameleon doesn’t switch for a keyboard while Karabiner-Elements runs, turn off Modify events for that keyboard in Karabiner-Elements’ Devices settings.
Which one should you use?
- You already maintain Karabiner-Elements rules and are comfortable with JSON: add a device rule there.
- You only want each keyboard to type in its own layout, with no driver and no rules to maintain: Keyameleon.
For the full list of options, built-in ones included, read how to switch the keyboard layout automatically on Mac.