What changed in Karabiner-Elements from 15 to 16

3 releases numbered after v15.9.0 up to and including v16.2.0, stable releases only. v15.9.0 and v16.2.0 are the newest stable releases of 15 and 16 we track; this page follows them as new ones ship.

48 changes across 3 releases

Added 29

v16.2.0

  • 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

  • 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

  • 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 8

v16.2.0

  • 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

  • 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

  • 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 10

v16.2.0

  • 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

  • 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

  • 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 1

v16.1.0

  • Remove the karabiner_session_monitor process

Original release notes, newest first

The list above is our reading of these notes; the originals from pqrs.org are here, one fold per release.

v16.2.0
  • 📦 Download
  • 📅 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.

View originalPermalink

v16.1.0
  • 📦 Download
  • 📅 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.

View originalPermalink

v16.0.0
  • 📦 Download
  • 📅 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. 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. 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, 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.

View originalPermalink