Skip to content

This is the multi-page printable view of this section. .

Return to the regular view of this page.

Karabiner Edition

The free, open-source Capslock layout as a Karabiner-Elements configuration: install it in one click, learn every key, customize it, and find its earlier versions.

Before Capslock was a native app, it was a configuration for Karabiner-Elements, and it still is. Capslock Enhancement V3 is a set of Karabiner rules that turns Caps Lock into Escape on a tap and a Hyper key on a hold, with the same sixteen control planes and the same layout that the native app ships as Capslock Classic. It is free and open source under the Apache 2.0 licence, with its source at github.com/Vonng/Capslock.

Which one should I use?

Karabiner EditionCapslock app
What you installKarabiner-Elements, then import one rule fileThe Capslock app
PermissionsKarabiner's driver, background services, Accessibility and Input MonitoringAccessibility only
Changing a keyEdit the JSON, or use the configuratorClick the key in the editor
Learning the layoutThese pages and the configuratorHold-to-Reveal and the Playground
Price and sourceFree, Apache 2.0, open sourceProprietary; see Download
StatusMaintained0.4.0 release candidate

Use only one of them for Caps Lock at a time. The Capslock app refuses to start while a Karabiner rule uses Caps Lock; turn the rules off in Karabiner-Elements first, as described in Coexisting with Karabiner-Elements.

Start in three steps

  1. Install Karabiner-Elements and grant the permissions it asks for.
  2. Import the rules with the button on Install.
  3. In Karabiner-Elements › Complex Modifications, enable every Capslock rule.

Tap Caps Lock: Escape. Hold it and press H J K L: the cursor moves.

Versions

VersionYearsRuns onStatus
Mac V32021 – todayKarabiner-ElementsMaintained
Mac V22017 – 2021Karabiner-ElementsArchived
Mac V12015 – 2017Karabiner and SeilArchived
Windows2013 – 2015AutoHotkeyArchived

1 - Install and Hyper basics

Install Karabiner-Elements, import the Capslock rules in one click, check that they work, and learn tap, hold, Hyper and the sixteen control planes.

Capslock Enhancement V3 current targets macOS and Karabiner-Elements. There is nothing else to install: the configuration is a set of complex-modification rules that Karabiner interprets, so nothing new runs in the background and nothing is compiled on your machine.

Note

This guide was verified with Karabiner-Elements 16.1.0 in August 2026, whose support matrix covers macOS 13 Ventura through macOS 27 on Intel and Apple silicon. Check the official site for the current release.

Install

Install Karabiner-Elements

Download the DMG from the official site and run Karabiner-Elements.pkg, or install the cask:

brew install --cask karabiner-elements

Open Karabiner-Elements Settings and follow its prompts in System Settings. Allow the privileged and non-privileged background services, Accessibility, Input Monitoring, and the Driver Extension. Under Virtual Keyboard, select the layout matching your physical keyboard. The official installation guide explains what each permission is for.

Import the rules

Open the import link below. Any browser hands it straight to Karabiner-Elements:

Import Capslock Enhancement V3.1

Or paste the URL yourself:

karabiner://karabiner/assets/complex_modifications/import?url=https://raw.githubusercontent.com/Vonng/Capslock/main/mac_v3/capslock.json

Choose Import and allow the browser to open Karabiner-Elements.

Enable the rules and check them

Under Settings › Complex Modifications, enable the rules you want. The ten rules are independent, so a family you have no use for can simply stay off; the first one, CapsLock to Hyper, is the one every other rule depends on.

Then tap ⇪: it should send ⎋. Hold it while pressing H J K L: the cursor moves. You are on plane zero.

Tip

Two alternatives lead to the same place. The Karabiner gallery page has an Import button of its own, and for a fully offline install you can drop capslock.json into ~/.config/karabiner/assets/complex_modifications/ and pick Add predefined rule. Karabiner-EventViewer shows what any key actually emits if something looks wrong.

Ten rules

The Capslock control plane zero
Control plane 0: the layout you get by holding ⇪ on its own. Fifteen more planes sit behind the left-side modifiers.
The Capslock control plane zero
Control plane 0: the layout you get by holding ⇪ on its own. Fifteen more planes sit behind the left-side modifiers.

The keyboard map is colour-coded by purpose, so a key's neighbourhood tells you roughly what it does before you look anything up. The configuration ships as ten Karabiner rules, one per family, and you enable them one by one.

The ten rules in capslock.json, and how many mappings each one carries
FamilyColourWhat it doesMappings
BasicBlueTap ⇪ for ⎋, hold it for ✱ Hyper, plus input-source switching4
NavigationPinkVim-style movement, selection, tab and window switching, pointer and wheel102
DeletionBrownNM,. delete by character, word or line without moving your hand12
MouseKeyKeypadThe numeric keypad as a complete mouse63
WindowAzureClose and cycle tabs, windows, apps and desktops; sleep, lock, log out19
ApplicationYellowLaunch or focus six applications across three planes18
TerminalGreenTerminal signals, IDE run controls, Vim and Tmux prefixes, Codex and Claude10
ClipboardPurpleFive extra text clipboards on 6–010
ShifterOrangeBrackets, braces and code punctuation within reach of the home row16
FunctionalCyanScreenshots, media, brightness, keyboard light and volume28
Tip

The configurator reads the same V3 JSON. It is the fastest way to inspect one key on any plane, or to change an application shortcut and export a configuration you can import straight away.

Tap, hold, and Hyper

Caps Lock now has two behaviours that never collide, because one is decided on release and the other while the key is down.

Everything Caps Lock used to do is still one chord away
GestureOutputPurpose
Tap ⇪⎋ EscapeEscape without leaving the home row
Hold ⇪✱ HyperEnter the base control plane
✱ with ⎋⇪ Caps LockToggle the original Caps Lock state
✱ with ␣⌃ with ␣Switch input source
✱ with ⌘ with ␣⌃ with ⌘ with ␣Emoji and symbols picker

✱ is not a private signal. Karabiner rewrites the held Caps Lock into all four right-side modifiers at once, ⌘ with ⌥ with ⌃ with ⇧, which has two consequences worth understanding:

  • Other software still sees an ordinary chord. Alfred, Moom, Magnet, Raycast and your IDE receive ⌃ with ⌥ with ⇧ with ⌘ plus a key and can bind it like any other shortcut.
  • Anything the rules do not claim passes straight through. ✱ with A has no rule of its own precisely so that a window manager can own it. The same trick works for any key you want to hand to another app.

Sixteen control planes

While Hyper stays held, the four left-side modifiers act as four binary switches. Read them as four bits and you get planes 0–15:

⌘ = 1 · ⌥ = 2 · ⌃ = 4 · ⇧ = 8.

Every plane in V3.1, how many mappings it carries, and the theme it follows
PlaneLeft modifiersMappingsWhat lives there
0✱89The daily layer: movement, deletion, apps, terminal, symbols
1✱ with ⌘59Selection, second-choice apps, clipboard copy
2✱ with ⌥38Pointer movement and third-choice apps
3✱ with ⌘ with ⌥8Word and paragraph selection
4✱ with ⌃12Desktop and window management
5✱ with ⌘ with ⌃—Free
6✱ with ⌥ with ⌃—Free
7✱ with ⌘ with ⌥ with ⌃—Free
8✱ with ⇧25App, window and tab switching
9✱ with ⌘ with ⇧21Accelerated wheel
10✱ with ⌥ with ⇧21Accelerated pointer
11✱ with ⌘ with ⌥ with ⇧—Free
12✱ with ⌃ with ⇧9Wheel
13✱ with ⌘ with ⌃ with ⇧—Free
14✱ with ⌥ with ⌃ with ⇧—Free
15✱ with ⌘ with ⌥ with ⌃ with ⇧—Free

Nine planes are populated; seven are free space for rules of your own. Open the configurator to browse the same sixteen rows interactively and see what each key does on the plane you select.

The planes are not arbitrary. Across the whole configuration the same modifier keeps the same meaning, which is why the layout can be learned once rather than memorized key by key:

ModifierConsistent meaning
⌘Extend the action: select instead of move, copy instead of paste, the second application
⌥Leave the text world: pointer, wheel, the third application
⌃Talk to the window server: desktops, Mission Control, screen state
⇧Switch containers: apps, windows, tabs; or accelerate a pointer action

Compatibility

  • The layout is drawn for ANSI keyboards and works the same on built-in Apple keyboards and external ones. ISO layouts work too, but the two keys that differ physically may land somewhere unexpected.
  • The MouseKey family needs a numeric keypad. Everything else works on a tenkeyless board.
  • Older macOS releases need an archived Karabiner-Elements build, which this guide does not cover.
Warning

macOS reserves a few system-wide chords of its own. The most common clash is ⌘ with ⌥ with ⌃ with ⇧ with ., which can open a diagnostics dialog; see issue #30. Remap the system shortcut if it conflicts with a plane you use.

Next

Continue with navigation, deletion, and mouse control.

2 - Navigation, deletion, and mouse

Move and select text, delete by character, word or line, and drive the pointer and wheel from the home row, the arrow keys or the keypad.

The pink and brown areas around the home row carry the layout's most frequent operations. The navigation and deletion families together carry 114 of the 282 mappings in V3.1, so this is the part of the layout worth learning first.

Important

Unless stated otherwise, every chord on this page assumes ✱ Hyper is held. "+ ⌘" therefore means ✱ with ⌘ plus the listed key.

The navigator block

H J K L move left, down, up, and right, exactly as in Vim. Directly above them, U I O P extend the same idea to whole pages and lines: Page Up, Home, End, Page Down.

Those eight keys are the only ones mapped on nine different planes. Each group of planes below covers one job, and together they account for 72 of the 282 mappings in V3.1.

Moving and selecting text

The text layer follows one rule: hold ⌘ and a movement becomes a selection, because the rule emits the same arrow key with ⇧ added. Adding ⌥ on top widens the unit: a character becomes a word, a line becomes three lines, half a line becomes the whole line.

Planes 0, 1 and 3: move, select, select more
KeyHyper+ ⌘+ ⌘ with ⌥
HLeftSelect leftSelect word left
JDownSelect line downSelect three lines down
KUpSelect line upSelect three lines up
LRightSelect rightSelect word right
UPage UpSelect page upSelect page up
IHomeSelect to line startSelect the line, end to start
OEndSelect to line endSelect the line, start to end
PPage DownSelect page downSelect page down

That is why ✱ with ⌘ with ⌥ with I jumps to the end of the line and then selects back to its start: it is the fastest way to grab exactly one line without touching the mouse.

Switching apps, windows, tabs and desktops

⇧ moves between containers, the thing you are looking at rather than the text inside it, while ⌃ talks to the window server.

What the ⇧ and ⌃ planes actually send
ChordEmitsEffect
✱ with ⇧ with J / ✱ with ⇧ with K⌘ with ⇥ / ⌘ with ⇧ with ⇥Next / previous application
✱ with ⇧ with H / ✱ with ⇧ with L⌃ with ⇧ with ⇥ / ⌃ with ⇥Previous / next tab
✱ with ⇧ with I / ✱ with ⇧ with O⌘ with ⇧ with ` / ⌘ with `Previous / next window of the same app
✱ with ⇧ with U / ✱ with ⇧ with P⌘ with ⌥ with - / ⌘ with ⌥ with =Zoom out / in
✱ with ⌃ with H / ✱ with ⌃ with L⌃ with ← / ⌃ with →Previous / next desktop
✱ with ⌃ with K / ✱ with ⌃ with O⌃ with ↑Mission Control
✱ with ⌃ with J⌃ with ↓Application windows of the focused app
✱ with ⌃ with I⌘ with HHide the current app
✱ with ⌃ with U⌃ with ⌘ with FToggle full screen
✱ with ⌃ with P⌘ with ␣Spotlight
Note

Tab switching relies on ⌃ with ⇥, which most browsers and editors honour but a few apps do not. Window cycling uses ⌘ with `, the standard macOS "move focus to next window" shortcut; confirm it is enabled under System Settings › Keyboard › Keyboard Shortcuts….

Pointer and wheel from the home row

Four more planes turn the same eight keys into a mouse, without your hands moving at all. ⇧ is the accelerator in both modes.

Planes 2, 10, 12 and 9: the two fast planes double the speed of the plane beside them
Key+ ⌥
Pointer
+ ⌥ with ⇧
Pointer, fast
+ ⌃ with ⇧
Wheel
+ ⌘ with ⇧
Wheel, fast
HPointer leftPointer leftWheel leftWheel left
JPointer downPointer downWheel downWheel down
KPointer upPointer upWheel upWheel up
LPointer rightPointer rightWheel rightWheel right
ULeft buttonLeft buttonWheel rightWheel right
IRight buttonRight buttonWheel upWheel up
OBack buttonBack buttonWheel downWheel down
PForward buttonForward buttonWheel leftWheel left
Speed is Karabiner's mouse_key unit, not pixels
PlanePointer speedWheel speed
⌥ / ⌃ with ⇧160064
⌥ with ⇧ / ⌘ with ⇧3200128

The middle mouse button is the one exception: it lives on ✱ with ⌥ with ↩ rather than on a navigator key.

Arrow-key mouse control

The physical arrow keys drive the pointer too, which is often quicker than reaching for the home-row layer. Here ⌥ slows down and ⌘ speeds up, in both pointer and wheel modes.

Three pointer speeds and three wheel speeds on the arrow cluster
ChordResultSpeed
✱ + arrowsMove the pointer1600
✱ with ⌥ + arrowsMove slowly800
✱ with ⌘ + arrowsMove quickly4200
✱ with ⇧ + arrowsScroll the wheel64
✱ with ⇧ with ⌥ + arrowsScroll slowly32
✱ with ⇧ with ⌘ + arrowsScroll quickly256
Note

In V3.1 the fast wheel reverses the vertical direction: ✱ with ⇧ with ⌘ with ↑ scrolls the same way as ✱ with ⇧ with ↓, and ✱ with ⇧ with ⌘ with ↓ the same way as ✱ with ⇧ with ↑. The horizontal arrows keep their direction.

All five mouse buttons sit on ↩:

ChordButton
✱ with ↩Left click
✱ with ⌘ with ↩Right click
✱ with ⌥ with ↩Middle click
✱ with ⇧ with ↩Back
✱ with ⌃ with ↩Forward

Semantic deletion

N M , . sit directly below the navigation keys. The pair on the left deletes backwards, the pair on the right deletes forwards, and the unit grows as you add modifiers.

N and M delete backwards from the cursor, comma and period forwards
KeyHyper+ ⌘+ ⌥
NDelete the previous wordDelete back to the line startDelete back to the line start
MDelete the previous characterDelete the previous wordMove the line down
,Delete the next characterDelete the next wordMove the line up
.Delete the next wordDelete forward to the line endDelete back to the line start

Two rows break the pattern deliberately. ✱ with ⌥ with N and ✱ with ⌥ with . both send ⌘ with ⌫, clearing everything from the cursor back to the start of the line, so the outer keys of the block are the "throw this line away" pair. And ✱ with ⌥ with M / ✱ with ⌥ with , do not delete at all: they emit ⌥ with ⇧ with ↓ and ⌥ with ⇧ with ↑, the move-line-down/up shortcut that IntelliJ, VS Code and most editors share.

Numeric keypad as a mouse

If your keyboard has a keypad, Hyper turns the whole block into a mouse. The digits give eight directions around a neutral 5; the top row scrolls; the bottom and right edges are the five buttons.

Hyper plus the keypad: pointer, wheel, and all five buttons
Keypad keysMapping
7 8 9 4 6 1 2 3Eight pointer directions, including the diagonals
5Stop: sends a zero-velocity pointer event
/ =Wheel up / down
Num Lock *Wheel sideways
0Left click
.Middle click
⌤Right click
+ / -Forward / back

The same speed modifiers apply as everywhere else: ⌥ slows the pointer to half, ⌘ doubles it, and adding ⇧ converts pointer motion into wheel motion at the matching speed.

Next

Continue with windows, applications, terminal controls, clipboards, and symbols.

3 - Windows and developer workflows

Close and cycle windows, launch applications, send terminal and IDE chords, keep five extra clipboards, and type code punctuation from the home row.

The layout dedicates several colour-coded zones to the actions that interrupt a developer's flow most often: switching windows, launching tools, sending terminal signals, parking text somewhere, and typing punctuation.

Important

Every chord on this page assumes ✱ Hyper is held.

Window control

⇥ Q W A S form the azure block on the left of the keyboard. They close and cycle things, from a single tab up to the whole login session.

Closing and cycling, from a tab to the whole session
KeyHyper+ ⌘+ ⌥+ ⌃+ ⇧
⇥Next appPrevious appNext desktop—Next tab
QQuit appQuit app—Lock screenLog out
WClose windowClose windowDisplay sleep—Sleep
AWindow managerMission ControlShow desktopSpotlight—
SNext tabPrevious tabNext windowPrevious window—

Two rows deserve a note.

✱ with A is intentionally not mapped. Because Hyper is ⌃ with ⌥ with ⇧ with ⌘ on the right-hand side, an unmapped key passes straight through to whatever application is listening. Bind ⌃ with ⌥ with ⇧ with ⌘ with A inside Moom, Magnet or any other window manager and it becomes your layout key. Slate is kept only as a historical example.

Sleep is not a keystroke but a shell command: ✱ with ⇧ with W runs pmset sleepnow and ✱ with ⌥ with W runs pmset displaysleepnow. Karabiner needs no extra permission for these, but they will not fire if a modal dialog is blocking input.

Application shortcuts

The yellow keys launch or focus six applications on three planes. Each rule is a plain open -a shell command, so the target is matched by application name, which is exactly what makes them safe to rewrite.

Defaults only: every one of these eighteen names is meant to be changed
KeyHyper+ ⌘+ ⌥
ESafariFinderMail
RiTerm2PreviewTerminal
TVisual Studio CodeTyporaNotes
YSiriKarabiner-ElementsAmphetamine
FAlfred 5DashDictionary
GIntelliJ IDEAGoogle ChromeCalendar
Tip

The configurator rewrites any of these names in the browser and exports a JSON file you can import directly, without cloning the repository or installing anything.

Because open -a both launches and focuses, one key does the job of a Dock icon and a ⌘ with ⇥ hunt. If an application is already frontmost, pressing its key again does nothing: it does not toggle.

Terminal and IDE control

The green keys put the control chords a shell uses constantly under your right hand, so the left hand never has to contort into ⌃ + a letter mid-sentence.

Terminal signals, IDE run controls, and the two prefix keys
KeyHyper+ ⌘
D⌃ with D · send EOF⌃ with ⌘ with D · look up the word under the pointer
Z⌃ with Z · SIGTSTP, suspend the jobF5 · start debugging
X⌃ with R · run in the IDE⌃ with F5 · run without debugging
COpen CodexOpen Claude
V⌃ with V · Vim block-visual / literal prefix—
B⌃ with B · Tmux prefix—

✱ with C and ✱ with ⌘ with C are open -a commands like the yellow keys, so they can be repointed at whichever assistant you use.

Note

✱ with Z and ✱ with X deliberately do not shadow ⌘ with Z undo or ⌘ with X cut: those need no Hyper, so both spellings coexist on the same physical keys.

Five text clipboards

Number keys 6–0 become five independent text clipboards. ✱ with ⌘ plus a number copies the current selection into that slot; ✱ plus the number pastes it back.

Each slot is one file in your home directory
ChordWhat happens
✱ with ⌘ with 6 … ✱ with ⌘ with 0Copy the selection, then pbpaste > ~/.clip6 … ~/.clip0
✱ with 6 … ✱ with 0cat ~/.clip6 | pbcopy, then paste

Two things follow from that implementation, and both are useful:

  • The slots survive logout, reboot, and the system clipboard. They are ordinary files, so cat ~/.clip7 reads one from a shell and any editor can fill one without touching the keyboard at all.
  • They hold plain text only. Copying an image or a file into a slot stores whatever pbpaste renders as text, not the original object.
Note

V3.1 deliberately uses five slots on 6–0. Older configurations also used 1–5, so check your habits before upgrading.

Code-oriented shifter

The orange keys move the punctuation a programmer types all day within reach of the home row, with no ⇧ gymnastics for brackets.

Three bracket pairs on two keys, and := and != under one hand
KeyHyper+ ⌘+ ⌥
-_Zoom out—
=+Zoom in—
[({<
])}>
;:!—
'==—
/Toggle comment——
\Toggle comment——

The bracket keys are the payoff: [ and ] give all three pairs (round, curly and angle) from the same two positions. And because ; and ' sit side by side, : = and ! = are adjacent rolls, which is how Go and Rust assignment and comparison end up faster to type than on a bare keyboard.

Both ✱ with / and ✱ with \ emit ⌘ with /, the comment shortcut nearly every editor and IDE shares.

Next

Use system functions and reference for function keys, screenshots, symbols, customization, and troubleshooting.

4 - System functions and reference

Function keys, screenshots, the symbols used in this manual, how a rule is written, what changed in V3.1, customization, and troubleshooting.

This page collects the mappings and project details you look up rather than learn in sequence.

Function and system keys

F1–F12 behave as standard function keys by default; hold Hyper to send their media or system functions instead. The cyan block covers the whole top row plus the screenshot keys.

Karabiner-Elements 15.1 and later follow System Settings › Keyboard › Keyboard Shortcuts… › Function Keys
KeyHyper action+ ⌘
`Area screenshot to clipboardArea screenshot to file
F1 / F2Brightness down / upDesktop 1 / 2
F3Mission ControlDesktop 3
F4Spotlight—
F5 / F6Keyboard light down / up—
F7 / F8 / F9Previous / play-pause / next—
F10 / F11 / F12Mute / volume down / volume up—
F13Full screenshot to clipboardFull screenshot to file
F14Screenshot menuLegacy Touch Bar screenshot
F15Play / pause—

The screenshot keys follow one convention: the plain Hyper chord puts the capture on the clipboard, and adding ⌘ writes it to a file on the desktop.

ChordEmitsResult
✱ with `⌃ with ⇧ with ⌘ with 4Select an area → clipboard
✱ with ⌘ with `⇧ with ⌘ with 4Select an area → file
✱ with F13⌃ with ⇧ with ⌘ with 3Whole screen → clipboard
✱ with ⌘ with F13⇧ with ⌘ with 3Whole screen → file
✱ with F14⇧ with ⌘ with 5Screenshot and recording menu
Note

Enable the Desktop 1/2/3 shortcuts under System Settings › Keyboard › Keyboard Shortcuts… › Mission Control before using ⌘ with F1–⌘ with F3; macOS ships them disabled. Touch Bar behaviour applies only to legacy Touch Bar Macs; see the official troubleshooting note.

The six-key navigation cluster on a full-size keyboard gives the same three system controls in smaller steps, by emitting ⇧ with ⌥ together with the media key, macOS's own quarter-step modifier.

Quarter steps instead of the full increments on F1–F12
Cluster keysAction
Insert / ⌦Fine brightness up / down
↖ / ↘Fine keyboard-light up / down
Page Up / Page DownFine volume up / down

Symbols

The notation used across this manual and in the keyboard maps
GlyphNameGlyphName
⇪Caps Lock✱Hyper
⎋Escape␣Space
⌘Command⌥Option
⌃Control⇧Shift
↩Return⌤Keypad Enter
⇥ ⇤Tab / Back-tab⇭Num Lock
← ↓ ↑ →Arrow keys↖ ↘Home / End
⇞ ⇟Page Up / Page Down⌫ ⌦Delete / Forward Delete
⏫ ⏬Faster / slower🖲️Mouse wheel
🖱️L / 🖱️R / 🖱️MButtons 1 / 2 / 3🖱️B / 🖱️FButtons 4 / 5, back and forward

The ✱ symbol is a heavy asterisk. The ordinary asterisk has ASCII code 42, the answer to life, the universe, and everything.

How a rule is written

Every mapping in the configuration has the same shape. Reading one makes the whole file legible, and makes the customization section below far less intimidating:

- description: 'control + h = ctrl + left (prev desktop)'
  type: basic
  from:
    key_code: h
    modifiers:
      mandatory: [left_control, right_command, right_control, right_shift, right_option]
  to:
    - key_code: left_arrow
      modifiers: [left_control]

The four right_* modifiers in mandatory are Hyper itself; they appear in every rule that Hyper drives. Whatever else sits beside them, left_control here, selects the control plane. to is what the application actually receives.

What changed in V3.1

V2 used only a handful of planes. V3 introduced the four-bit plane model, which is what let the layout grow to 282 mappings without becoming arbitrary. The earlier configurations are listed under Versions.

V3.1 then intentionally changed several defaults that older users will notice:

  • clipboards moved to 6–0, and 1–5 are no longer slots;
  • C and ⌘ with C launch Codex and Claude;
  • Spotlight and Alfred 5 replace Launchpad and Alfred 4;
  • F13 and F14 provide screenshots instead of previous / next track;
  • ⌘ with D performs Define rather than opening Dictionary.

Customize the configuration

Configuratorno tools needed

Browse all sixteen planes, inspect the real Karabiner output of any key, rename the applications behind the yellow keys, and export a ready-to-import JSON file.

Fork the repository, edit the human-readable mac_v3/capslock.yml, and regenerate the JSON. Any rule the Karabiner schema allows is available here.

The YAML is the source of truth and the JSON is generated from it. Regenerating takes one command and yq v4:

make -C mac_v3 compile

A good first customization is claiming one of the seven free planes. Copy any rule, change the left modifier in mandatory, and you have a whole keyboard's worth of space that nothing else uses: plane 5 (✱ with ⌘ with ⌃) and plane 7 (✱ with ⌘ with ⌥ with ⌃) are both completely empty.

Keep the YAML and the generated JSON synchronized: the import link and the Karabiner gallery both publish the JSON.

FAQ and troubleshooting

A chord does nothing at all.

Check Settings › Complex Modifications first: the ten rules are enabled individually, and a fresh import leaves nothing on. If the rule is enabled, open Karabiner-EventViewer and press the chord. It shows exactly what reaches the system, which distinguishes a missing rule from an application that swallows the shortcut.

Caps Lock sends Escape but nothing else works.

That is the signature of enabling only the first rule. CapsLock to Hyper provides tap-Escape and hold-Hyper; the other nine rules provide everything that Hyper then does.

Why can a chord trigger macOS diagnostics?

Issue #30 documents that ⌘ with ⌥ with ⌃ with ⇧ with . can trigger macOS diagnostics. Remap that system shortcut if it conflicts with your chosen plane.

Why is Linux not supported?

Desktop environments differ substantially. The author primarily uses Linux through a macOS terminal. Native support could be implemented with tools such as xmodmap; contributions are welcome.

Why does the repository contain older macOS versions?

Legacy Karabiner used XML. Karabiner-Elements replaced it for macOS Sierra and later, so the older configurations remain for historical systems. They are listed under Versions.

Is the design original?

The first AutoHotkey version dates to 2013 and the first Mac version to 2015. The current configuration is listed in the Karabiner-Elements complex-modifications gallery.

Project

Capslock Enhancement is maintained by Vonng and distributed under the Apache License 2.0. Source, releases, and issue tracking live on GitHub.

5 - Configurator

Browse all sixteen control planes of the Karabiner rules, inspect any key, rename the application shortcuts, and export a JSON file to import.

Pick a control plane from the table or by clicking the left-side modifiers, then click any key to see the Karabiner rule behind it. Keys that launch an application can be renamed. Your edits stay in this page until you copy or download the JSON; nothing is sent anywhere.

The interactive configurator runs only on the web page: it shows all sixteen control planes, lets you rename the application shortcuts, and exports a JSON file for Karabiner-Elements. Current configuration (3.1.0): capslock.json

Import your copy

  1. Choose Download config. The file is named capslock-3.1.0-custom.json.
  2. Move it into ~/.config/karabiner/assets/complex_modifications/.
  3. In Karabiner-Elements › Settings › Complex Modifications, remove the original Capslock rules, choose Add predefined rule, and enable the rules from your file.

The import link on Install always fetches the unmodified configuration, so use it to go back to the defaults.

6 - Earlier versions

The Mac V2, Mac V1 and Windows editions of the Capslock layout, kept for history and no longer maintained.

Before V3, the Capslock layout went through three editions: an AutoHotkey script for Windows, an XML configuration for the original Karabiner on OS X, and a first set of rules for Karabiner-Elements. Their files are still in the GitHub repository. These pages record what each edition did and how it was installed.

Kept for history only

These versions are not maintained. They were written for operating systems that are many years old, and nobody has checked them against current macOS or Windows. To use the layout today, install Mac V3.

VersionYearsRan onConfiguration
Mac V22017 – 2021Karabiner-Elements on macOS 10.11 – 10.13Complex-modification rules in JSON
Mac V12015 – 2017Karabiner and Seil on OS X 10.10 – 10.11A Karabiner private.xml
Windows2013 – 2015AutoHotkey on Windows XP – 10An AutoHotkey script and a prebuilt .exe

The Mac editions wrote Hyper as ✱, and these pages keep that notation: ✱ H means hold Caps Lock and press H.

6.1 - Mac V2

Capslock Enhancement Mac V2, the 2017–2021 Karabiner-Elements rules that made Caps Lock Escape on a tap and Hyper on a hold.
Archived, not maintained

Mac V2 was written for Karabiner-Elements on macOS 10.11 El Capitan, 10.12 Sierra and 10.13 High Sierra, the systems its README listed. It was replaced by Mac V3 in 2021 and has not been checked against current macOS or Karabiner-Elements.

Mac V2 was the first Capslock edition for Karabiner-Elements, the rewrite of Karabiner that macOS Sierra required. It is a set of ten complex-modification rules. A tap on Caps Lock sends Escape. Holding it turns it into Hyper (✱): Karabiner-Elements holds the four right-hand modifiers, ⌃ ⌥ ⇧ ⌘, together, so Hyper still combines with the left-hand ones and most apps accept it.

The Mac V2 layout drawn on a full keyboard, with the action of each key under Hyper
The layout diagram from the V2 README. A few app keys in it differ from the tables on this page, which follow the rule file.

Caps Lock

KeyResult
Tap Caps LockEscape
Hold Caps LockHyper (✱), the right-hand ⌃ ⌥ ⇧ ⌘ held together
✱ EscapeCaps Lock. The README notes a bug: Caps Lock was hard to turn off again

Navigation

Hyper alone moves the cursor. Adding one left-hand modifier selects instead, moves the pointer, switches tabs and apps, or works with Spaces.

Key✱ move✱ ⌘ select✱ ⌥ pointer✱ ⇧ switch✱ ⌃ Spaces
H←⇧←Pointer leftPrevious tab (⌃⇧Tab)Space to the left (⌃←)
J↓⇧↓Pointer downNext app (⌘Tab)Windows of the current app (⌃↓)
K↑⇧↑Pointer upPrevious app (⇧⌘Tab)Mission Control (⌃↑)
L→⇧→Pointer rightNext tab (⌃Tab)Space to the right (⌃→)
UPage Up⇧Page Up———
IHome⇧Home———
OEnd⇧End———
PPage Down⇧Page Down———

Mouse

KeyResult
✱ ← ↓ ↑ →Move the pointer, like ✱ ⌥ H J K L
✱ ReturnLeft click
✱ ⌘ ReturnRight click

Deleting

KeySendsDeletes
✱ N⌥⌫The word before the cursor
✱ M⌫The character before the cursor
✱ ,⌦The character after the cursor
✱ .⌥⌦The word after the cursor
✱ ⌘ N, ✱ ⌘ M⌘⌫Back to the start of the line

Windows and tabs

KeySendsResult
✱ Tab⌘TabNext app
✱ ⌘ Tab⇧⌘TabPrevious app
✱ Q⌘QQuit the app
✱ W⌘WClose the tab
✱ S⌃TabNext tab
✱ ⌘ S⌃⇧TabPrevious tab
✱ A⌃⌥⇧⌘ALeft free for the window manager Moom
✱ ⌘ A⌃↑Mission Control

Terminal keys

KeySendsUsed for
✱ Z⌃ZSuspend the job (SIGTSTP)
✱ X⌃RRun, in IDEs
✱ C⌃CInterrupt (SIGINT)
✱ V⌃VVim prefix
✱ B⌃BThe default tmux prefix
✱ D⌃DEnd of input (EOF)

Apps

The README suggested replacing these with your own favourite apps.

Key✱✱ ⌘
ESafariFinder
RiTerm2Preview
TVisual Studio CodeTypora
D⌃D (see above)Dictionary
F⌃⌥⇧⌘F, left free for AlfredDash
GIntelliJ IDEAGoogle Chrome

Function keys

V2 expected F1 to F12 to act as standard function keys and used Hyper to get the printed functions back. On a MacBook Pro with a Touch Bar, the README suggested turning on Karabiner-Elements › Function Keys › "Use all F1, F2, etc. keys as standard function keys".

Key✱Key✱
F1Brightness downF7Previous track
F2Brightness upF8Play or pause
F3Mission ControlF9Next track
F4LaunchpadF10Mute
F5Keyboard backlight downF11Volume down
F6Keyboard backlight upF12Volume up

Keys found on full-size keyboards:

Key✱
F13 (Print Screen)Previous track
F14 (Scroll Lock)Next track
F15 (Pause)Mute
Insert, DeleteBrightness up, down, in fine steps
Home, EndKeyboard backlight up, down, in fine steps
Page Up, Page DownVolume up, down, in fine steps

Shifted symbols

Key✱ types
1 2 3 4 5 6 7 8 9 0! @ # $ % ^ & * ( )
- =_ +
[ ]( )
;!
'=
✱ ⌘ ;:
✱ ⌘ '=

The last four rows make != and := quick to type.

Other keys

KeySendsResult
✱ `⌃⇧⌘4Screenshot of an area, to the clipboard
✱ ⌘ `⇧⌘4Screenshot of an area, to a file
✱ Delete⌘⌫Move to Trash in Finder
✱ / and ✱ \⌘/Comment or uncomment, in many editors
✱ Space⌃SpaceSwitch input source

How it was installed

These are the steps from the V2 README, kept for the record.

  1. Download and install Karabiner-Elements.
  2. Import the rules by opening this address in Safari:
    karabiner://karabiner/assets/complex_modifications/import?url=https://raw.githubusercontent.com/Vonng/Capslock/main/mac_v2/capslock.json
    Or copy capslock.json into ~/.config/karabiner/assets/complex_modifications/, which is what make install in the mac_v2 folder does.
  3. In Karabiner-Elements, open the Complex Modifications tab, click Add Item, and enable the rules you want.
  4. To change the apps or any other key, edit the imported file in ~/.config/karabiner/assets/complex_modifications/.
Note

The README's own import link pointed at the repository's mac/ folder, which now holds V3, and its second link pointed at the Karabiner-Elements gallery, which also lists V3 today. The address above points at the V2 file.

Files

All of V2 is in mac_v2/ in the repository.

FileWhat it is
capslock.jsonThe ten V2 rules, ready to import
karabiner.jsonA complete Karabiner-Elements configuration with the same rules. make all copies it over ~/.config/karabiner/karabiner.json and replaces your existing settings
makefileThe install and all targets described above
README.mdThe original V2 documentation

Differences from V3

  • Planes. V2 combined Hyper with one left-hand modifier at a time, which gave it only a few planes. V3 combines Hyper with any of the four left-hand modifiers, for up to 16 planes.
  • Changed keys. In V3.1, F13 and F14 control screenshots instead of the previous and next track, ✱ ⌘ D runs Define instead of opening Dictionary, and Spotlight replaces Launchpad.

6.2 - Mac V1

Capslock Mac V1, the 2015–2017 private.xml that used Seil and the original Karabiner to turn Caps Lock into Hyper on OS X 10.10 and 10.11.
Archived, not maintained

Mac V1 ran on the original Karabiner together with Seil, on OS X 10.10 Yosemite and 10.11 El Capitan. The original Karabiner does not run on macOS 10.12 Sierra or later, so V1 cannot run on any current Mac. It was replaced by Mac V2, and the maintained edition today is Mac V3.

Mac V1 was the first Capslock edition for the Mac. It needed two tools. Seil changed the key code that Caps Lock sends to 80, the code of F19. Karabiner then read V1's private.xml, which turned that key into Hyper (✱) while held and defined each group of shortcuts as a separate item to switch on in Karabiner's preferences.

The Mac V1 layout drawn on a full keyboard; key labels in English, colour legend in Chinese
The layout diagram from the V1 README. Its colour legend is in Chinese, and some app keys in it differ from the lists on this page.

Caps Lock

KeyResult
Hold Caps LockHyper (✱)
Tap Caps LockEscape, or ⌃Space to switch input source. These are two separate items that conflict, so turn on only one
✱ EscapeCaps Lock
✱ SpaceEscape

Navigation

Hold Hyper to move the cursor; add the left ⌘ to select as you move.

Key✱ move✱ ⌘ select
H←⇧←
J↓⇧↓
K↑⇧↑
L→⇧→
UPage Up⇧Page Up
IHome⇧Home
OEnd⇧End
PPage Down⇧Page Down

Deleting

KeySendsDeletes
✱ N⌥⌫The word before the cursor
✱ M⌫The character before the cursor
✱ ,⌦The character after the cursor
✱ .⌥⌦The word after the cursor

Windows and tabs

KeySendsResult
✱ A⌃⌥⇧⌘ALeft free for the window manager Moom
✱ ⌘ AF11Show the desktop
✱ Q⌘QQuit the app
✱ Tab⌘TabNext app
✱ ⌘ Tab⇧⌘TabPrevious app
✱ S⌃TabNext tab
✱ ⌘ S⌃⇧TabPrevious tab
✱ W⌘WClose the tab

Terminal keys

KeySendsUsed for
✱ Z⌃ZSuspend the job (SIGTSTP)
✱ X⌃BThe default tmux prefix
✱ C⌃CInterrupt (SIGINT)
✱ D⌃DEnd of input (EOF)

Apps

The README suggested replacing these with your own favourite apps.

Key✱✱ ⌘
EGoogle Chrome, or Safari through a separate itemFinder
RiTerm⌃R, Run in IDEs
TTyporaMWeb
FDashDictionary
GIntelliJ IDEA—
VVisual Studio Code—

Function keys

Key✱Key✱
F1Brightness downF7Previous track
F2Brightness upF8Play or pause
F3Mission ControlF9Next track
F4LaunchpadF10Mute
F5Keyboard backlight downF11Volume down
F6Keyboard backlight upF12Volume up

Keys found on full-size keyboards:

Key✱
Insert, DeleteBrightness up, down, in fine steps
Home, EndKeyboard backlight in fine steps
Page Up, Page DownVolume up, down, in fine steps
Scroll LockMute
PausePlay

Shifted symbols

Key✱ types
1 2 3 4 5 6 7 8 9 0! @ # $ % ^ & * ( )
- =_ +
[ ]( )
;_
'=

Mouse

KeyResult
✱ ← ↓ ↑ →Move the pointer
✱ ReturnLeft click
✱ \Right click

Other keys

KeySendsResult
✱ /⌘/Comment or uncomment, in many editors
✱ `⌃⇧⌘4Screenshot of an area, to the clipboard
✱ ⌘ `⇧⌘4Screenshot of an area, to a file

How it was installed

These are the steps from the V1 README, kept for the record.

  1. Download and install Seil.
  2. Download and install Karabiner.
  3. In Seil, turn on Change the caps lock key and set its key code to 80.
  4. In Karabiner, open the Misc & Uninstall tab and click Open private.xml. Replace that file with V1's private.xml. The setup script in the mac_v1 folder copies it to ~/Library/Application Support/Karabiner/private.xml for you.
  5. Return to the Change Key tab, click Reload XML, and enable the items you want.
Seil's Setting tab with Change the caps lock key turned on and key code 80 entered
Step 3: Caps Lock set to key code 80 in Seil.
Karabiner's Misc & Uninstall tab, with an arrow pointing at the Open private.xml button and the file shown in Finder
Step 4: Open private.xml in Karabiner reveals the file to replace.

Files

All of V1 is in mac_v1/ in the repository.

FileWhat it is
private.xmlThe V1 configuration for the original Karabiner
setupA shell script that copies private.xml into Karabiner's folder
README.mdThe original V1 documentation

Differences from V3

  • Tools. V1 needed Seil and the original Karabiner, configured in XML. Karabiner-Elements replaced the original Karabiner for macOS Sierra and later; V2 and V3 are JSON rules for it and do not need Seil.
  • Tapping Caps Lock. V1 let you choose between Escape and switching input source. V3 sends Escape on a tap.

6.3 - Windows

The 2013–2015 AutoHotkey script where Capslock began, kept with its source and an old prebuilt executable.
Archived, not maintained

The Windows version is an AutoHotkey script from 2013–2015. The Mac V2 README listed Windows XP, Vista, 7, 8 and 10 as its systems. Neither the script nor the prebuilt executable is tested on current Windows.

Capslock began on Windows in 2013, two years before the first Mac version. The script turns Caps Lock, which it calls the "useless key", into a function key like Ctrl and Alt by combining it with almost every other key on the keyboard. Caps Lock itself is kept off, and its old job moves to Caps Lock + `.

Some of its bindings differ from the Mac versions. The Mac V2 README notes this, and that the Windows version is no longer maintained.

What it did

The README summarises the script in one table. This version of it fills in the details from the script itself.

KeysWhat they do
Caps LockEscape, handy in Vim
Caps Lock + `Turn Caps Lock on or off
Caps Lock + H J K LVim-style arrow keys
Caps Lock + W BOne word right, one word left
Caps Lock + U I O PPage Up, Home, End, Page Down
Caps Lock + N M , .Delete: Ctrl+Backspace, Backspace, Delete, Ctrl+Delete
Caps Lock + Z X C V A YCtrl+Z, X, C, V, A, Y: the usual Windows editing shortcuts
Caps Lock + arrow keysMove the mouse pointer
Caps Lock + EnterMouse click
Caps Lock + F1 – F6Mute, volume down, volume up, play or pause, next track, stop
Caps Lock + Q SWindow and tab control
Caps Lock + ; ' [ ]Convenience mappings
Caps Lock + D F E R TFrequently used programs, chosen by the user
Caps Lock + 1 – 5Visual Studio shortcuts, chosen by the user
Caps Lock + 6 7 8 9 0 - =The shifted symbols, as if Shift were held

Running it

The README gives no installation steps. The repository holds the script in two forms:

  • The source, CapsLock.ahk, runs with AutoHotkey. It uses AutoHotkey v1 syntax.
  • A prebuilt executable, CapsLock.exe, runs without AutoHotkey.
Old, unsigned binary

CapsLock.exe is an old, unsigned, 32-bit prebuilt binary. It has not been tested on current Windows. If you want to try the layout, read the source and run it with AutoHotkey v1 instead.

Files

All of the Windows version is in win/ in the repository.

FileWhat it is
CapsLock.ahkThe AutoHotkey source
CapsLock.exeThe prebuilt executable, 207,868 bytes
README.mdThe original summary

The SHA-256 of CapsLock.exe in the repository is e0d6a4d2de155860aed164281ed16f5871aaca95cccc6fe1d46db2b16004cb80.