Karabiner-Elements: a macOS key remapper that runs below the app layer
Karabiner-Elements is a powerful tool for customizing keyboards on macOS
At a glance
- What is it?
- Karabiner-Elements rewrites keyboard input at the system level on macOS, which is why it can do things per-app remappers cannot and why it needs Accessibility and background-service permissions. This review covers what it does, how to install it with Homebrew, where it breaks, and who should skip it.
- Who is it for?
- Adopt Karabiner-Elements if you are on a supported macOS version (13 Ventura through 27 Golden Gate, per the README) and you need remapping that works across every app, including the login window and tools that ignore per-app shortcut settings. Do not adopt it if you need Windows or iPad support, or if you are unwilling to grant Accessibility access and run background services.
- Can I use it commercially?
- Yes. Unlicense is a permissive licence: you can use, modify and sell software built on it, as long as you keep its copyright and licence notices.
- Is it still maintained?
- Yes. The repository last received commits 4 days ago.
- What is it written in?
- Mainly C++, according to GitHub's language statistics.
Answers come from the project's GitHub data, last synced on September 25, 2026, and from our analysis. They are not legal advice.
DEEP OPEN-SOURCE ANALYSIS
What Karabiner-Elements actually solves on macOS
macOS gives you a keyboard settings pane that can swap a handful of modifier keys and not much else. Per-app shortcut editors go further but only inside apps that cooperate with them, and they cannot touch input before an app sees it. Karabiner-Elements takes a different position in the stack: it is a key remapper that intercepts and rewrites keyboard events at the system level, so a rule applies in every application, including ones with no shortcut editor of their own.
The audience is narrow but real. People who want a Caps Lock that acts as Control when held and Escape when tapped. People who move between a Mac keyboard and a Windows keyboard and want the same physical layout to produce the same characters. People who use one machine for several contexts and want the keyboard to change with the frontmost app. The README describes the project simply as "a powerful key remapper for macOS," and that scope is honest: it is not a macro recorder, not a text expander, and not a cross-platform tool.
How the remapping mechanism is put together
The architecture visible from the repository is a set of cooperating processes rather than a single app. The README refers to two background services, Karabiner-Elements Non-Privileged Agents v2 and Karabiner-Elements Privileged Daemons v2, and to Accessibility access as a separate grant. That split matters: the privileged daemon is what lets the tool see and rewrite input system-wide, and the non-privileged agent handles the parts that do not need elevated rights. A menu bar app is the user-facing surface where rules are configured.
The source tree backs this up. There is a src/ directory for the code, a vendor/ directory holding a pre-built Karabiner-DriverKit-VirtualHIDDevice package, and a tools/ directory with a clean-launch-services-database target. The virtual HID device is the piece that lets remapped keys be delivered as if they came from a real keyboard. Because these permissions are tied to the code signing identity, the README warns that switching from the official package to your own build invalidates them and they must be granted again.
That design has a consequence worth stating plainly: Karabiner-Elements is not a user-space convenience layer. It sits between the hardware and everything else, which is exactly why it can remap keys in apps that ignore other tools, and exactly why it asks for permissions that a simpler remapper would not.
Installing Karabiner-Elements with Homebrew or the official download
The README gives two routes. The official site at karabiner-elements.pqrs.org hosts the download, and Homebrew users can install the cask instead. The Homebrew command is the shorter path and is quoted directly in the README:
brew install --cask karabiner-elementsAfter that, open the app from Applications. On first launch macOS will ask for the permissions the background services need, including Accessibility. The README notes that these permissions are tied to the signing identity, so if you later replace the official build with one you compiled, you will have to grant them again, and System Settings may not refresh its UI to show that they became invalid.
For a first real use, the practical starting point is a simple modifier remap rather than a complex rule set. Configure it in the app's interface, then test it in two places: a normal text field and an app you use daily. If the remap works in both, the background services and Accessibility grant are functioning. If it works in neither, the permissions are the first thing to check. The README does not document a rollback procedure for individual rules, so keep your configuration simple enough to reverse by hand while you are learning the interface.
Building from source, and the permission reset it forces on you
The README devotes a full section to building, and the requirements are specific: macOS 15 or later, Xcode 26 or later, Command Line Tools, xz, XcodeGen and CMake, all installable through Homebrew. The build steps are a shallow clone with submodules, code signing identity setup, and make package.
git clone --depth 1 https://github.com/pqrs-org/Karabiner-Elements.git
cd Karabiner-Elements
git submodule update --init --recursive --depth 1Code signing is not optional here. The README states that signing is required for the background services to run, and it walks through obtaining identity hashes with security find-identity -v and exporting them as PQRS_ORG_CODE_SIGN_IDENTITY and PQRS_ORG_INSTALLER_CODE_SIGN_IDENTITY. Then make package produces a dmg.
The part that catches people is what happens after installation. Because permissions follow the signer, moving from the official package to your own build invalidates the background service and Accessibility grants. The README's recovery procedure is to install your package, disable both background services and remove Accessibility access in System Settings, restart macOS, then open Karabiner-Elements and grant the permissions again. That is a heavy loop for anyone iterating on the source. The README also notes that make package does not rebuild the pre-built binaries in vendor/, so a source build still ships the upstream virtual HID device package.
Where Karabiner-Elements is the wrong tool
The most obvious boundary is the platform. The README lists supported systems as macOS 27 Golden Gate on Apple Silicon, macOS 26 Tahoe, macOS 15 Sequoia, macOS 14 Sonoma and macOS 13 Ventura on both Intel and Apple Silicon. Windows and iPad do not appear anywhere in that list, and there is no cross-platform story in the repository. If your search started with a Windows keyboard on a Mac, the tool can help with the layout mismatch, but it will not follow you to a Windows machine.
The second boundary is the permission model. Anything that needs Accessibility access and a privileged daemon is a hard sell on a managed corporate Mac where those grants are controlled by policy. If you cannot enable the two background services, the remapping will not work, and no amount of rule editing will change that.
The third is scope. Karabiner-Elements rewrites key events. It is not a clipboard manager, not a launcher, and not a text expander. If your actual problem is triggering a long snippet with a short phrase, this is the wrong layer. There is also a maintenance dimension: the last push to the repository was on 2026-07-05, with v16.1.0 released the same day, so the project is current, but a tool that hooks system input is the kind of dependency that breaks on major macOS releases, and the supported-version list is the thing to watch.
Alternatives and how their approach differs
The clearest alternative for many users is macOS's own keyboard settings, which can remap a small set of modifier keys without any third-party software, any Accessibility grant, or any background service. The difference is reach: the built-in pane cannot express conditional rules, per-app behavior, or taps versus holds on the same key. If your need is swapping Command and Control, you do not need Karabiner-Elements at all.
A second category is per-app shortcut customization built into the apps themselves, or system-level shortcut editors that operate inside the app layer. These avoid the privileged daemon entirely and are easier to justify on a locked-down machine. Their limit is the opposite one: they only affect apps that participate, and they cannot change what a key does before an app receives it. Karabiner-Elements wins precisely where those tools stop, and loses on install friction and permission requirements.
The licensing difference is worth naming too. Karabiner-Elements is released under the Unlicense, which places it in the public domain and imposes no attribution requirement. That is unusually permissive compared with many keyboard utilities, and it means the source can be reused without the obligations a copyleft license would impose.
Maintenance, licensing and what to check before you commit
The repository is not archived, and the last push was on 2026-07-05, so the project is actively receiving changes. Release cadence is visible in the recent tags: v16.0.0 on 2026-05-03 and v16.1.0 on 2026-07-05, with a beta published the same day as v16.1.0. That suggests a roughly two-month cycle between stable releases, which is a reasonable pace for a tool that has to track macOS input APIs.
The upgrade cost is mostly on the permission side rather than the code side. The README's warning about signing identities applies to source builds, not to normal upgrades of the official package, but the underlying point stands: anything that depends on Accessibility and background services can require re-authorization when the signer or the OS changes. Budget time for that, especially after a major macOS upgrade.
The license is the Unlicense. That is a public-domain dedication rather than a permissive license with conditions, so there is no attribution clause to satisfy and no copyleft obligation on derivative work. This is not legal advice; if you plan to redistribute a modified build, read LICENSE.md in the repository and confirm the terms yourself.
Editorial conclusion
Adopt Karabiner-Elements if you are on a supported macOS version (13 Ventura through 27 Golden Gate, per the README) and you need remapping that works across every app, including the login window and tools that ignore per-app shortcut settings. Do not adopt it if you need Windows or iPad support, or if you are unwilling to grant Accessibility access and run background services. Before committing, verify three things on your own machine: that your macOS version is in the supported list, that the app shows both background services enabled in System Settings, and that your rules survive a reboot. If you build from source instead of the official package, expect to re-grant permissions after the signer changes.
Frequently asked questions
What is Karabiner-Elements on a Mac?
It is a key remapper for macOS that rewrites keyboard input at the system level, so rules apply across applications rather than only inside one app. The README describes it as "a powerful key remapper for macOS."
How do I install Karabiner-Elements on macOS?
Download it from the official site at karabiner-elements.pqrs.org, or install the Homebrew cask with brew install --cask karabiner-elements. After launching it, grant the background service and Accessibility permissions it requests.
How do I use Karabiner-Elements?
Configure your remapping rules in the app, then test them in a text field and in a daily-use app to confirm the background services and Accessibility grant are working. The README points to the documentation site for usage details.
Are Karabiner-Elements trustworthy?
The project is open source under the Unlicense and its repository is not archived, with the last push on 2026-07-05. It does require Accessibility access and two background services to function, so the permission model is the thing to evaluate for your own threat model.
Why isn't Karabiner-Elements working?
The most likely cause is missing permissions. The README states that code signing is required for the background services to run, and that if you switch to your own build the permissions become invalid and must be granted again, sometimes requiring a macOS restart first.
Is there an alternative to Karabiner-Elements?
macOS's own keyboard settings can remap a small set of modifier keys without any third-party software or Accessibility grant, and per-app shortcut editors work inside the app layer. Neither can change what a key does before an app receives it, which is where Karabiner-Elements operates.
Official sources
Add this badge to your README
If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.
[](https://hysenlabs.com/projects/pqrs-org-karabiner-elements)
Community notes