Windows-style keyboard shortcuts on macOS via Karabiner-Elements: a community catalog rule and a device-scoped installer.
7
stars
9
commits
JavaScript
primary language
Aug 15, 2026
updated
Keep your Windows-keyboard muscle memory on macOS—on every keyboard or only the Windows keyboards you choose.
Open the interactive demo to pause, move to the previous or next scene, or use the arrow keys. The GIF keeps each scene visible for 7–9 seconds.
Prefer this as one native app, no Karabiner required? The same maintainer built Windsify — the free, open-source app version of this ruleset (source), with an optional one-time Pro upgrade for Finder cut-paste, system keys, and window management. This Karabiner edition stays maintained.
Windows Keyboard for Mac is a free, open-source Karabiner-Elements shortcut
layer. Its community edition has been accepted into the official
Karabiner-Elements community rules catalog. It gives macOS familiar Ctrl,
Alt+Tab, Alt+F4, Finder, Terminal, screenshot, window-tiling, Home/End, and
F1–F12 behavior without relying on a global macOS modifier-key swap.
Install from the Karabiner community catalog · Download the device-scoped edition · Quick start · Shortcut matrix
Both editions require macOS 15 or newer and Karabiner-Elements 16 or newer. The downloadable device-scoped edition remains an unsigned GitHub preview.
| Edition | Best for | Keyboard scope | Install and recovery |
|---|---|---|---|
| Community catalog | A Windows-style shortcut layer on every keyboard, including a MacBook keyboard | All keyboards | Import one predefined rule from Karabiner-Elements |
| Device-scoped GitHub edition | Converting only selected external Windows keyboards | Only keyboard models selected during setup | Guided installer with discovery, backup, diagnostics, verification, and rollback |
This edition deliberately applies to every keyboard. Use the device-scoped edition below if the MacBook keyboard or any other keyboard should retain native macOS shortcuts.
install.command, choose Open, and select the
keyboard or keyboards to convert.Ctrl+C interrupts and remote-desktop
rules that send the expected physical modifiers.The selected keyboard receives four device-level Simple Modifications. When a Mac app shows a shortcut using Apple symbols, use this reverse lookup:
| Mac key shown by the app | Physical Windows-keyboard key |
|---|---|
⌘ Command | Ctrl |
⌃ Control | Windows key |
⌥ Option | Alt |
⇧ Shift | Shift |
So a Mac shortcut shown as ⌥⇧F is pressed as Alt+Shift+F on the
Windows keyboard, while ⌘C is pressed as Ctrl+C. The Windows keyboard does
have an Option equivalent: its Alt key.
Karabiner applies Simple Modifications before Complex Modifications. This means common shortcuts such as Ctrl+C, Ctrl+V, Ctrl+S, Ctrl+Z, and Ctrl+Shift+4 naturally become the macOS Command equivalents. Complex rules are reserved for shortcuts whose meaning differs between Windows and macOS.
Explicit Windows Keyboard for Mac shortcuts take priority over this general lookup. For
example, physical Win+Space is reserved for input-source switching. When
choosing a third-party app shortcut, avoid combinations already listed in the
shortcut matrix.
Every Complex Modification also contains a device_if condition. The rules therefore do not leak onto the built-in Apple keyboard or another keyboard that was not selected during installation.
hidutil UserKeyMapping.Karabiner needs macOS Input Monitoring, Accessibility, background-service, and DriverKit approvals. Apple requires the user to grant these permissions; no legitimate installer can silently bypass them.
For the complete early-tester workflow, read
docs/quick-start.md.
Prebuilt preview archives are available from
GitHub Releases.
install.command.If exactly one non-Apple keyboard is connected, it is selected automatically. If several are connected, the installer asks which keyboard(s) to convert.
The generated rules are not tied to Microsoft. Logitech, Dell, HP, Keychron-in-Windows-mode, and other standard USB/Bluetooth HID keyboards can use the same shortcut layer. The installer records each selected keyboard by its reported vendor and product IDs.
To add another keyboard later, connect it and double-click add-keyboard.command. Existing registered keyboards are retained even if they are disconnected at the time. Re-running install.command has the same additive behavior.
The installer also reads that Mac's enabled Input Sources system shortcut and uses it behind physical Win+Space. Spotlight actions open the Spotlight app directly rather than assuming Command+Space or Option+Space. This lets the same package follow each Mac's existing shortcut customization.
The installer stops without changing anything if it finds a macOS Modifier Keys mapping or an active hidutil mapping. This prevents the inconsistent “two remappers both touching Ctrl/Command” state.
For a terminal-driven install:
./install.command --non-interactive --device 1234:5678
Use the vendor and product IDs shown by:
'/Library/Application Support/org.pqrs/Karabiner-Elements/bin/karabiner_cli' --list-connected-devices
Double-click doctor.command, or run:
./doctor.command --non-interactive
The diagnostic checks Karabiner availability and version, the live profile, target devices, rule isolation, macOS Modifier Keys conflicts, and hidutil UserKeyMapping.
Double-click uninstall.command.
The uninstaller removes only the Windows Keyboard for Mac profile and reselects the profile that was active before installation. It backs up the current config before making the change. Historical backups are kept in:
~/.config/karabiner/windows-keyboard-for-mac-backups/
If live profile activation or restoration fails, the installer/uninstaller automatically restores the pre-operation configuration.
See docs/shortcut-matrix.md for the complete behavior summary.
Highlights:
Ctrl editing shortcuts work automatically;Win+Space switches input source;Ctrl+Space for a particular app; users can choose their own dictation shortcut;Ctrl+Shift+3/4/5 invoke the corresponding macOS screenshot shortcuts;Win+Shift+S captures a selected area;Alt+Tab switches apps, while Alt+F4 closes the active top-level browser or Finder window instead of merely closing its current tab;F1 through F12 as standard function keys even when macOS media-key mode is enabled;Ctrl+Shift+C/V/N/T/W;Win+Left/Right/Up/Down uses native macOS 15+ window tiling.This repository is a functional, reversible MVP. A friend can use it after installing Karabiner, but the .command bundle is not yet code-signed or notarized.
The next product-quality packaging step is a signed and notarized SwiftUI .app or .pkg that embeds the same profile generator and adds:
Even that app will still require the one-time Apple permission approvals for Karabiner.
The distributable profile is generated from readable JavaScript without third-party packages:
npm run build
npm test
The tests cover profile generation, device scoping, JSON-with-comments input, install/readback, diagnostics, uninstall/restore, backups, and automatic rollback after a simulated live activation failure.
Windows Keyboard for Mac does not contain app-specific defaults, user names, email addresses, local file paths, or a pre-enrolled keyboard. It does not include telemetry or make network requests. The installer stores only the selected keyboard model identifiers and rollback state in the user's local Karabiner configuration directory.
Run the public-distribution audit and build a release archive with:
npm run audit
npm run package
The packaging command produces a ZIP and a SHA-256 checksum under release/.
See docs/privacy.md and
docs/releasing.md before publishing a GitHub Release.
The preview release intentionally remains unsigned rather than exposing an
individual signing identity. See docs/signing.md for the
future organization-signed App plan.
The shortcut semantics were compared with the public-domain rux616/karabiner-windows-mode project. Windows Keyboard for Mac uses a different delivery architecture: device-level modifier translation, automatic device detection, dedicated-profile installation, conflict checks, live readback, and rollback.
Relevant Karabiner documentation:
9 commits
JavaScript
79.4%
Shell
20.6%
Windows-style keyboard shortcuts on macOS via Karabiner-Elements: a community catalog rule and a device-scoped installer.
7
stars
9
commits
JavaScript
primary language
Aug 15, 2026
updated
Keep your Windows-keyboard muscle memory on macOS—on every keyboard or only the Windows keyboards you choose.
Open the interactive demo to pause, move to the previous or next scene, or use the arrow keys. The GIF keeps each scene visible for 7–9 seconds.
Prefer this as one native app, no Karabiner required? The same maintainer built Windsify — the free, open-source app version of this ruleset (source), with an optional one-time Pro upgrade for Finder cut-paste, system keys, and window management. This Karabiner edition stays maintained.
Windows Keyboard for Mac is a free, open-source Karabiner-Elements shortcut
layer. Its community edition has been accepted into the official
Karabiner-Elements community rules catalog. It gives macOS familiar Ctrl,
Alt+Tab, Alt+F4, Finder, Terminal, screenshot, window-tiling, Home/End, and
F1–F12 behavior without relying on a global macOS modifier-key swap.
Install from the Karabiner community catalog · Download the device-scoped edition · Quick start · Shortcut matrix
Both editions require macOS 15 or newer and Karabiner-Elements 16 or newer. The downloadable device-scoped edition remains an unsigned GitHub preview.
| Edition | Best for | Keyboard scope | Install and recovery |
|---|---|---|---|
| Community catalog | A Windows-style shortcut layer on every keyboard, including a MacBook keyboard | All keyboards | Import one predefined rule from Karabiner-Elements |
| Device-scoped GitHub edition | Converting only selected external Windows keyboards | Only keyboard models selected during setup | Guided installer with discovery, backup, diagnostics, verification, and rollback |
This edition deliberately applies to every keyboard. Use the device-scoped edition below if the MacBook keyboard or any other keyboard should retain native macOS shortcuts.
install.command, choose Open, and select the
keyboard or keyboards to convert.Ctrl+C interrupts and remote-desktop
rules that send the expected physical modifiers.The selected keyboard receives four device-level Simple Modifications. When a Mac app shows a shortcut using Apple symbols, use this reverse lookup:
| Mac key shown by the app | Physical Windows-keyboard key |
|---|---|
⌘ Command | Ctrl |
⌃ Control | Windows key |
⌥ Option | Alt |
⇧ Shift | Shift |
So a Mac shortcut shown as ⌥⇧F is pressed as Alt+Shift+F on the
Windows keyboard, while ⌘C is pressed as Ctrl+C. The Windows keyboard does
have an Option equivalent: its Alt key.
Karabiner applies Simple Modifications before Complex Modifications. This means common shortcuts such as Ctrl+C, Ctrl+V, Ctrl+S, Ctrl+Z, and Ctrl+Shift+4 naturally become the macOS Command equivalents. Complex rules are reserved for shortcuts whose meaning differs between Windows and macOS.
Explicit Windows Keyboard for Mac shortcuts take priority over this general lookup. For
example, physical Win+Space is reserved for input-source switching. When
choosing a third-party app shortcut, avoid combinations already listed in the
shortcut matrix.
Every Complex Modification also contains a device_if condition. The rules therefore do not leak onto the built-in Apple keyboard or another keyboard that was not selected during installation.
hidutil UserKeyMapping.Karabiner needs macOS Input Monitoring, Accessibility, background-service, and DriverKit approvals. Apple requires the user to grant these permissions; no legitimate installer can silently bypass them.
For the complete early-tester workflow, read
docs/quick-start.md.
Prebuilt preview archives are available from
GitHub Releases.
install.command.If exactly one non-Apple keyboard is connected, it is selected automatically. If several are connected, the installer asks which keyboard(s) to convert.
The generated rules are not tied to Microsoft. Logitech, Dell, HP, Keychron-in-Windows-mode, and other standard USB/Bluetooth HID keyboards can use the same shortcut layer. The installer records each selected keyboard by its reported vendor and product IDs.
To add another keyboard later, connect it and double-click add-keyboard.command. Existing registered keyboards are retained even if they are disconnected at the time. Re-running install.command has the same additive behavior.
The installer also reads that Mac's enabled Input Sources system shortcut and uses it behind physical Win+Space. Spotlight actions open the Spotlight app directly rather than assuming Command+Space or Option+Space. This lets the same package follow each Mac's existing shortcut customization.
The installer stops without changing anything if it finds a macOS Modifier Keys mapping or an active hidutil mapping. This prevents the inconsistent “two remappers both touching Ctrl/Command” state.
For a terminal-driven install:
./install.command --non-interactive --device 1234:5678
Use the vendor and product IDs shown by:
'/Library/Application Support/org.pqrs/Karabiner-Elements/bin/karabiner_cli' --list-connected-devices
Double-click doctor.command, or run:
./doctor.command --non-interactive
The diagnostic checks Karabiner availability and version, the live profile, target devices, rule isolation, macOS Modifier Keys conflicts, and hidutil UserKeyMapping.
Double-click uninstall.command.
The uninstaller removes only the Windows Keyboard for Mac profile and reselects the profile that was active before installation. It backs up the current config before making the change. Historical backups are kept in:
~/.config/karabiner/windows-keyboard-for-mac-backups/
If live profile activation or restoration fails, the installer/uninstaller automatically restores the pre-operation configuration.
See docs/shortcut-matrix.md for the complete behavior summary.
Highlights:
Ctrl editing shortcuts work automatically;Win+Space switches input source;Ctrl+Space for a particular app; users can choose their own dictation shortcut;Ctrl+Shift+3/4/5 invoke the corresponding macOS screenshot shortcuts;Win+Shift+S captures a selected area;Alt+Tab switches apps, while Alt+F4 closes the active top-level browser or Finder window instead of merely closing its current tab;F1 through F12 as standard function keys even when macOS media-key mode is enabled;Ctrl+Shift+C/V/N/T/W;Win+Left/Right/Up/Down uses native macOS 15+ window tiling.This repository is a functional, reversible MVP. A friend can use it after installing Karabiner, but the .command bundle is not yet code-signed or notarized.
The next product-quality packaging step is a signed and notarized SwiftUI .app or .pkg that embeds the same profile generator and adds:
Even that app will still require the one-time Apple permission approvals for Karabiner.
The distributable profile is generated from readable JavaScript without third-party packages:
npm run build
npm test
The tests cover profile generation, device scoping, JSON-with-comments input, install/readback, diagnostics, uninstall/restore, backups, and automatic rollback after a simulated live activation failure.
Windows Keyboard for Mac does not contain app-specific defaults, user names, email addresses, local file paths, or a pre-enrolled keyboard. It does not include telemetry or make network requests. The installer stores only the selected keyboard model identifiers and rollback state in the user's local Karabiner configuration directory.
Run the public-distribution audit and build a release archive with:
npm run audit
npm run package
The packaging command produces a ZIP and a SHA-256 checksum under release/.
See docs/privacy.md and
docs/releasing.md before publishing a GitHub Release.
The preview release intentionally remains unsigned rather than exposing an
individual signing identity. See docs/signing.md for the
future organization-signed App plan.
The shortcut semantics were compared with the public-domain rux616/karabiner-windows-mode project. Windows Keyboard for Mac uses a different delivery architecture: device-level modifier translation, automatic device detection, dedicated-profile installation, conflict checks, live readback, and rollback.
Relevant Karabiner documentation:
9 commits
JavaScript
79.4%
Shell
20.6%