# Karabiner-Elements: what changed from 15 to 16 - Product: Karabiner-Elements (https://whatsnew.fyi/product/karabiner-elements) - Vendor: pqrs.org - Range: changelog entries numbered after v15.9.0 up to and including v16.2.0, stable releases only - Entries below: 3 releases (newest first) - Resolved: 15 is v15.9.0 and 16 is v16.2.0, the newest stable release of each major we track - Carrying security changes: 0 · CVEs mentioned: 0 · Mentioning breaking changes: 1 · Removing or deprecating something: 1 - Page: https://whatsnew.fyi/product/karabiner-elements/compare/15...16 What's New is an index, not a publisher: every entry below links to the vendor's own release notes, which are the authoritative source. Entries are labelled where they are hand-curated sample data, pre-releases, or drawn from a secondary source such as a developer blog. Reuse: the summaries, labels and curation here are © What's New. Quote freely with attribution and a link back; wholesale republication of the corpus is not permitted — terms: https://whatsnew.fyi/terms. The vendors' own release notes remain their publishers'. ## What changed (48 changes, grouped by kind) ### Added #### v16.2.0 (2026-08-30) - Add the `Swap ISO layout-specific keys` configuration to Device tab - Add filtering functionality to the Complex Modifications list - Add support for buttons 6–8 on the ELECOM HUGE PLUS and DEFT trackballs - Add appearance settings for the notification window - Add `Capture Raw Input Events` and `Capture Raw Input Records` to EventViewer - Add `--set-variables-from-stdin` option to karabiner_cli - Add the `duration_milliseconds` option to `set_notification_message` - Add the `Modify events for pointing devices by default` setting to Expert tab - Add support for unbundled GUI apps in `frontmost_application_if` and `frontmost_application_unless` - Add support for `notes` in complex modification rules - Add support for accessibility.focused_ui_element.window_title_string variable in `variable_if` - Add the event timestamp in EventViewer #### v16.1.0 (2026-07-05) - Add filtering functionality to the log viewer - Support consumer_key_code::ac_keyboard_layout_select - Support consumer_key_code::ac_desktop_show_all_windows - Support consumer_key_code::ac_soft_key_left - Support consumer_key_code::ac_desktop_show_all_applications #### v16.0.0 (2026-05-03) - frontmost_application_if can now detect overlay windows such as Spotlight using the Accessibility API - variable_if now supports accessibility.focused_ui_element.role_string, accessibility.focused_ui_element.subrole_string, accessibility.focused_ui_element.title_string, accessibility.focused_ui_element.window_position_x, accessibility.focused_ui_element.window_position_y, accessibility.focused_ui_element.window_size_height, and accessibility.focused_ui_element.window_size_width - Generate JSON for Complex Modifications rules by writing JavaScript - Add your own rule using JavaScript button in the complex modifications viewer - Open in external editor button in the complex modifications editor - Clear user variables button in EventViewer - to.to_if_other_key_pressed for implementing conditional key presses based on other keys being pressed - to.send_user_command for executing actions via an external server built with Karabiner-Elements-user-command-receiver - to.from_event allowing pressed events to be passed through as-is - relative_to and fallback_to options for software_function.set_mouse_cursor_position - Enable CGEventTap fallback setting in Expert tab for receiving events via CGEventTap when IOHIDDeviceOpen fails - Setup tab in Settings ### Changed #### v16.2.0 (2026-08-30) - Integrate the Multitouch Extension menu into the Karabiner-Elements menu - Complex Modifications import now supports JavaScript files and single-rule JSON files - Improve the handling of macOS sleep shortcuts to prevent key-up events from immediately waking the Mac - Consolidate the `karabiner_console_user_server`, Menu, and NotificationWindow components into a single app named Karabiner-Console-User-Server #### v16.1.0 (2026-07-05) - Replace the IPC backend with pqrs::unix_domain_stream to improve internal communication between Karabiner-Elements processes - Change update checks to run periodically, not only at startup #### v16.0.0 (2026-05-03) - Call exit instead of abort to suppress crash reports when a fatal error prevents CFRunLoop from running in background processes - Request only Accessibility permission instead of both Accessibility and Input Monitoring permissions when Accessibility permission makes Input Monitoring permission unnecessary ### Fixed #### v16.2.0 (2026-08-30) - Fix CGEventTap leaks - Fix an issue where the core service agent could rarely abort during termination - Fix an issue where modifications could stop working for several seconds after waking from sleep on macOS - Close Karabiner-EventViewer and the Settings window after an upgrade #### v16.1.0 (2026-07-05) - Fix ac_zoom_in and ac_zoom_out key codes being swapped - Fix an issue where the settings window could open at login when the system default configuration used an old format - Fix typo in ComplexModificationsView #### v16.0.0 (2026-05-03) - Fixed an issue where modifier keys could remain stuck when physical keyboard events were missed during capture - Fixed an issue where reordering in Complex Modifications and Profiles did not work properly when dragging while scrolling - Fixed an issue where variables in expressions were not properly initialized when unset ### Removed #### v16.1.0 (2026-07-05) - Remove the karabiner_session_monitor process ## Release notes ### v16.2.0 - Date: 2026-08-30 - Version: v16.2.0 - Original notes: https://github.com/pqrs-org/Karabiner-Elements/releases/tag/v16.2.0 - Permalink: https://whatsnew.fyi/product/karabiner-elements/releases/v16.2.0 - Labels: Platforms: macOS - **added** — Add the `Swap ISO layout-specific keys` configuration to Device tab - **added** — Add filtering functionality to the Complex Modifications list - **added** — Add support for buttons 6–8 on the ELECOM HUGE PLUS and DEFT trackballs - **added** — Add appearance settings for the notification window - **added** — Add `Capture Raw Input Events` and `Capture Raw Input Records` to EventViewer - **added** — Add `--set-variables-from-stdin` option to karabiner_cli - **added** — Add the `duration_milliseconds` option to `set_notification_message` - **added** — Add the `Modify events for pointing devices by default` setting to Expert tab - **added** — Add support for unbundled GUI apps in `frontmost_application_if` and `frontmost_application_unless` - **added** — Add support for `notes` in complex modification rules - **added** — Add support for accessibility.focused_ui_element.window_title_string variable in `variable_if` - **added** — Add the event timestamp in EventViewer - **changed** — Integrate the Multitouch Extension menu into the Karabiner-Elements menu - **changed** — Complex Modifications import now supports JavaScript files and single-rule JSON files - **changed** — Improve the handling of macOS sleep shortcuts to prevent key-up events from immediately waking the Mac - **changed** — Consolidate the `karabiner_console_user_server`, Menu, and NotificationWindow components into a single app named Karabiner-Console-User-Server - **fixed** — Fix CGEventTap leaks - **fixed** — Fix an issue where the core service agent could rarely abort during termination - **fixed** — Fix an issue where modifications could stop working for several seconds after waking from sleep on macOS - **fixed** — Close Karabiner-EventViewer and the Settings window after an upgrade - [📦 Download](https://github.com/pqrs-org/Karabiner-Elements/releases/download/v16.2.0/Karabiner-Elements-16.2.0.dmg) - 📅 Release date - Aug 30, 2026 - 🔔 Important Notes - When upgrading from v15.9.0 or earlier, automatic startup of the Karabiner-Elements services will be disabled. After upgrading, open Karabiner-Elements.app to re-enable automatic startup. - 💥 Breaking changes - Integrated the Multitouch Extension menu into the Karabiner-Elements menu. Open the Multitouch Extension settings from the Karabiner-Elements menu. - ✨ New Features - Added the `Swap ISO layout-specific keys` configuration to Device tab. - Added filtering functionality to the Complex Modifications list. - Added support for buttons 6–8 on the ELECOM HUGE PLUS and DEFT trackballs. (Thanks to @z11i) - Added appearance settings for the notification window. (Thanks to @xianjianlf2) - Added `Capture Raw Input Events` and `Capture Raw Input Records` to EventViewer. - Added `--set-variables-from-stdin` option to karabiner_cli. - Added the `duration_milliseconds` option to `set_notification_message`. (Thanks to @xianjianlf2) - Added the `Modify events for pointing devices by default` setting to Expert tab. (Thanks to @xianjianlf2) - 🐛 Bug Fixes - Fixed CGEventTap leaks (Thanks to @MrMage and @VitalyShein) - ⚡️ Improvements - Complex Modifications import now supports JavaScript files and single-rule JSON files. - Improved the handling of macOS sleep shortcuts to prevent key-up events from immediately waking the Mac. - Fixed an issue where the core service agent could rarely abort during termination. - Fixed an issue where modifications could stop working for several seconds after waking from sleep on macOS. - Karabiner-EventViewer and the Settings window are now closed after an upgrade. - Added support for unbundled GUI apps in `frontmost_application_if` and `frontmost_application_unless`. - Added support for `notes` in complex modification rules. - `variable_if` now supports the following variable: - accessibility.focused_ui_element.window_title_string - Added the event timestamp in EventViewer. - The `karabiner_console_user_server`, Menu, and NotificationWindow components have been consolidated into a single app named Karabiner-Console-User-Server. - Refactored the C++ and Swift code for the Settings, EventViewer, and MultitouchExtension apps. ### v16.1.0 - Date: 2026-07-05 - Version: v16.1.0 - Original notes: https://github.com/pqrs-org/Karabiner-Elements/releases/tag/v16.1.0 - Permalink: https://whatsnew.fyi/product/karabiner-elements/releases/v16.1.0 - Labels: Platforms: macOS - **added** — Add filtering functionality to the log viewer - **fixed** — Fix ac_zoom_in and ac_zoom_out key codes being swapped - **fixed** — Fix an issue where the settings window could open at login when the system default configuration used an old format - **changed** — Replace the IPC backend with pqrs::unix_domain_stream to improve internal communication between Karabiner-Elements processes - **changed** — Change update checks to run periodically, not only at startup - **added** — Support consumer_key_code::ac_keyboard_layout_select - **added** — Support consumer_key_code::ac_desktop_show_all_windows - **added** — Support consumer_key_code::ac_soft_key_left - **added** — Support consumer_key_code::ac_desktop_show_all_applications - **fixed** — Fix typo in ComplexModificationsView - **removed** — Remove the karabiner_session_monitor process - [📦 Download](https://github.com/pqrs-org/Karabiner-Elements/releases/download/v16.1.0/Karabiner-Elements-16.1.0.dmg) - 📅 Release date - Jul 5, 2026 - ✨ New Features - Added filtering functionality to the log viewer. - 🐛 Bug Fixes - Fixed the ac_zoom_in and ac_zoom_out key codes being swapped. - Fixed an issue where the settings window could open at login when the system default configuration used an old format. - ⚡️ Improvements - Improved internal communication between Karabiner-Elements processes by replacing the IPC backend with `pqrs::unix_domain_stream`. - Changed update checks to run periodically, not only at startup. - Supported the following keys: - consumer_key_code::ac_keyboard_layout_select (Thanks to @PedroSebastiao) - consumer_key_code::ac_desktop_show_all_windows (Thanks to @omor1) - consumer_key_code::ac_soft_key_left - consumer_key_code::ac_desktop_show_all_applications - Fix typo in ComplexModificationsView (Thanks to @kiangkuang) - The `karabiner_session_monitor` process has been removed. ### v16.0.0 - Date: 2026-05-03 - Version: v16.0.0 - Original notes: https://github.com/pqrs-org/Karabiner-Elements/releases/tag/v16.0.0 - Permalink: https://whatsnew.fyi/product/karabiner-elements/releases/v16.0.0 - Labels: Platforms: macOS - **added** — frontmost_application_if can now detect overlay windows such as Spotlight using the Accessibility API - **added** — variable_if now supports accessibility.focused_ui_element.role_string, accessibility.focused_ui_element.subrole_string, accessibility.focused_ui_element.title_string, accessibility.focused_ui_element.window_position_x, accessibility.focused_ui_element.window_position_y, accessibility.focused_ui_element.window_size_height, and accessibility.focused_ui_element.window_size_width - **added** — Generate JSON for Complex Modifications rules by writing JavaScript - **added** — Add your own rule using JavaScript button in the complex modifications viewer - **added** — Open in external editor button in the complex modifications editor - **added** — Clear user variables button in EventViewer - **added** — to.to_if_other_key_pressed for implementing conditional key presses based on other keys being pressed - **added** — to.send_user_command for executing actions via an external server built with Karabiner-Elements-user-command-receiver - **added** — to.from_event allowing pressed events to be passed through as-is - **added** — relative_to and fallback_to options for software_function.set_mouse_cursor_position - **added** — Enable CGEventTap fallback setting in Expert tab for receiving events via CGEventTap when IOHIDDeviceOpen fails - **added** — Setup tab in Settings - **fixed** — Fixed an issue where modifier keys could remain stuck when physical keyboard events were missed during capture - **fixed** — Fixed an issue where reordering in Complex Modifications and Profiles did not work properly when dragging while scrolling - **fixed** — Fixed an issue where variables in expressions were not properly initialized when unset - **changed** — Call exit instead of abort to suppress crash reports when a fatal error prevents CFRunLoop from running in background processes - **changed** — Request only Accessibility permission instead of both Accessibility and Input Monitoring permissions when Accessibility permission makes Input Monitoring permission unnecessary - [📦 Download](https://github.com/pqrs-org/Karabiner-Elements/releases/download/v16.0.0/Karabiner-Elements-16.0.0.dmg) - 📅 Release date - May 3, 2026 - 🔔 Important Notes - Karabiner-Core-Service now requires Accessibility permission. Please enable it in System Settings. - ✨ New Features - `frontmost_application_if` can now detect overlay windows, such as Spotlight, using the Accessibility API. - `variable_if` now supports the following variables, making it possible to change behavior depending on whether the focused element is a text area. - accessibility.focused_ui_element.role_string - accessibility.focused_ui_element.subrole_string - accessibility.focused_ui_element.title_string - accessibility.focused_ui_element.window_position_x - accessibility.focused_ui_element.window_position_y - accessibility.focused_ui_element.window_size_height - accessibility.focused_ui_element.window_size_width - You can now generate JSON for Complex Modifications rules by writing JavaScript. - Added an "Add your own rule using JavaScript" button to the complex modifications viewer. - Added an "Open in external editor" button to the complex modifications editor. - Added a "Clear user variables" button to EventViewer. (Thanks to @BarakXYZ) - Added [`to.to_if_other_key_pressed`](https://karabiner-elements.pqrs.org/docs/json/complex-modifications-manipulator-definition/to-if-other-key-pressed/). It's now possible to implement "Change option+tab to command+tab" in a more natural way and reliable way. - Added [`to.send_user_command`](https://karabiner-elements.pqrs.org/docs/json/complex-modifications-manipulator-definition/to/send-user-command/). By using it together with an external server built with Karabiner-Elements-user-command-receiver, you can execute any action from Karabiner-Elements with low latency. (Thanks to @nikivdev) - Added [`to.from_event`](https://karabiner-elements.pqrs.org/docs/json/complex-modifications-manipulator-definition/to/from-event/), allowing pressed events to be passed through as-is. - Added `relative_to` and `fallback_to` to `software_function.set_mouse_cursor_position`. - Added `Enable CGEventTap fallback` setting to Expert tab. Enable receiving events via CGEventTap for keyboards where IOHIDDeviceOpen fails for some reason. - Added Setup tab to Settings. - 🐛 Bug Fixes - Fixed an issue where modifier keys could remain stuck when physical keyboard events were missed during capture. - Fixed an issue where reordering in Complex Modifications and Profiles didn't work properly when dragging while scrolling. - Fixed an issue where variables in expressions were not properly initialized when unset. - ⚡️ Improvements - Changed to call `exit` instead of `abort` to suppress crash reports when a fatal error prevents CFRunLoop from running in background processes. - If Accessibility permission makes Input Monitoring permission unnecessary, only Accessibility permission will be requested.