Dvorak remapping with Karabiner-Elements on macOS Sierra works!

With some config file elbow grease, Karabiner-Elements works wonderfully on macOS Sierra to remap your keyboard to Dvorak.

I have been using Karabiner for a while now to remap my keyboard to Dvorak, as the OSX system Dvorak keyboard mapping exposes a bug in many Java apps, including all of the JetBrains development environment tools I use intensively, whereby the keyboard is in fact Dvorak, but all shortcut keys are Qwerty, which is of course tremendously confusing. You can read more about the issue in this StackOverflow answer.

I was postponing the upgrade to macOS Sierra, because Karabiner, fantastic keyboard remapping tool, is unable to function on the new OS due to changed APIs and whatnot.

Fortunately Takayama Fumihiko, awesome hacker behind Karabiner, has been re-implementing his work in a new tool called Karabiner-Elements. The GUI is not up to pre-Sierra level yet, but the tool works perfectly to solve my Dvorak-remapping (and other) issues!

After upgrading to Sierra, install from the dmg file, start Karabiner-Elements, then copy qwerty_to_dvorak.json from the examples into your ~/.karabiner.d/configuration/ directory and name it karabiner.json. It will be immediately picked up, so you’re typing in Dvorak. NB: Since 2016, this has changed. See new instructions in the update below!

Personally I have also added the relevant lines from the change_caps_lock_to_left_control.json and change_section_key_to_accent_key.json examples to the simple_modifications clause of my karabiner.json file. Using caps-lock as control is essential for efficient Emacs use, and that section key at the top-left of the MBP 2015 keyboards should have been backtick / tilde to start with.

Update on 2021-01-06: qwerty_to_dvorak.json missing :(

Andrei in the comments has let me know that qwerty_to_dvorak.json is not available on the karabiner elements github anymore.

I’ve searched in the karabiner docs, but could find no mention of Dvorak.

So, in case it helps anyone, my old karabiner.json is shown below. Yours should be at ~/.config/karabiner/karabiner.json. You should be able to copy over the simple_modifications clause from the example below.

    "global": {
        "check_for_updates_on_startup": true,
        "show_in_menu_bar": true,
        "show_profile_name_in_menu_bar": false
    "profiles": [
            "devices": [],
            "fn_function_keys": {
                "f1": "display_brightness_decrement",
                "f10": "mute",
                "f11": "volume_decrement",
                "f12": "volume_increment",
                "f2": "display_brightness_increment",
                "f3": "mission_control",
                "f4": "launchpad",
                "f5": "illumination_decrement",
                "f6": "illumination_increment",
                "f7": "rewind",
                "f8": "play_or_pause",
                "f9": "fastforward"
            "name": "Default profile",
            "selected": true,
            "simple_modifications": {
                "a": "a",
                "b": "x",
                "backslash": "backslash",
                "c": "j",
                "caps_lock": "left_control",
                "close_bracket": "equal_sign",
                "comma": "w",
                "d": "e",
                "e": "period",
                "equal_sign": "close_bracket",
                "f": "u",
                "g": "i",
                "h": "d",
                "hyphen": "open_bracket",
                "i": "c",
                "j": "h",
                "k": "t",
                "l": "n",
                "m": "m",
                "n": "b",
                "non_us_backslash": "grave_accent_and_tilde",
                "o": "r",
                "open_bracket": "slash",
                "p": "l",
                "period": "v",
                "q": "quote",
                "quote": "hyphen",
                "r": "p",
                "s": "o",
                "semicolon": "s",
                "slash": "z",
                "t": "y",
                "u": "g",
                "v": "k",
                "w": "comma",
                "x": "q",
                "y": "f",
                "z": "semicolon"
            "virtual_hid_keyboard": {
                "caps_lock_delay_milliseconds": 0,
                "keyboard_type": "ansi"