import { _ as _export_sfc, c as createElementBlock, o as openBlock, a8 as createStaticVNode } from "./chunks/framework.DyMmIvSC.js"; const __pageData = JSON.parse('{"title":"QMK Breaking Changes - 2021 August 28 Changelog","description":"","frontmatter":{},"headers":[],"relativePath":"ChangeLog/20210828.md","filePath":"ChangeLog/20210828.md"}'); const _sfc_main = { name: "ChangeLog/20210828.md" }; const _hoisted_1 = /* @__PURE__ */ createStaticVNode('

QMK Breaking Changes - 2021 August 28 Changelog

Notable Features

Combo processing improvements (#8591)

Combo processing has been reordered with respect to keypress handling, allowing for much better compatibility with mod taps.

It is also now possible to define combos that have keys overlapping with other combos, triggering only one. For example, a combo of A, B can coexist with a longer combo of A, B, C -- previous functionality would trigger both combos if all three keys were pressed.

Key Overrides (#11422)

QMK now has a new feature: key overrides. This feature allows for overriding the output of key combinations involving modifiers. As an example, pressing Shift+2 normally results in an @ on US-ANSI keyboard layouts -- the new key overrides allow for adding similar functionality, but for any modifier + key press.

To illustrate, it's now possible to use the key overrides feature to translate Shift + Backspace into Delete -- an often-requested example of where this functionality comes in handy.

There's far more to describe that what lives in this changelog, so head over to the key overrides documentation for more examples and info.

Digitizer support (#12851)

QMK gained the ability to pretend to be a digitizer device -- much like a tablet device. A mouse uses delta-coordinates -- move up, move right -- but a digitizer works with absolute coordinates -- top left, bottom right.

Changes Requiring User Action

Updated Keyboard Codebases

The following keyboards have had their source moved within QMK:

Old Keyboard NameNew Keyboard Name
aeboards/constellationaeboards/constellation/rev1, aeboards/constellation/rev2
bakeneko65bakeneko65/rev2, bakeneko65/rev3
bm16akprepublic/bm16a
bm16skprepublic/bm16s
bm40hsrgbkprepublic/bm40hsrgb
bm43akprepublic/bm43a
bm60pokerkprepublic/bm60poker
bm60rgbkprepublic/bm60rgb
bm60rgb_isokprepublic/bm60rgb_iso
bm68rgbkprepublic/bm68rgb
clawsome/gamebuddyclawsome/gamebuddy/v1_0, clawsome/gamebuddy/v1_m
cospadkprepublic/cospad
custommk/genesiscustommk/genesis/rev1, custommk/genesis/rev2
daisyktec/daisy
durgod/k320durgod/k3x0/k320
dztech/volcano660ilumkb/volcano660
ergodonektec/ergodone
gmmk/progmmk/pro/ansi, gmmk/pro/iso
handwired/p1800flteam0110/p1800fl
jj40kprepublic/jj40
jj4x4kprepublic/jj4x4
jj50kprepublic/jj50
kyriasplitkb/kyria
lazydesigners/the60lazydesigners/the60/rev1, lazydesigners/the60/rev2
matrix/m12ogmatrix/m12og/rev1, matrix/m12og/rev2
mechlovin/hannah65/mechlovin9mechlovin/mechlovin9/rev1, mechlovin/mechlovin9/rev2
peiorisboards/ixoracoarse/ixora
ramonimbao/monaramonimbao/mona/v1, ramonimbao/mona/v1_1
staryuktec/staryu
tokyo60tokyokeyboard/tokyo60
vintacoarse/vinta
xd002xiudi/xd002
xd004xiudi/xd004
xd60xiudi/xd60
xd68xiudi/xd68
xd75xiudi/xd75
xd84xiudi/xd84
xd84proxiudi/xd84pro
xd87xiudi/xd87
xd96xiudi/xd96

Bootmagic Full Removal (#13846)

As noted during last breaking changes cycle, QMK has decided to deprecate the full Bootmagic feature and leave Bootmagic Lite as the only remaining option.

This pull request changes the behavior of BOOTMAGIC_ENABLE such that specifying full results in an error, allowing only no, yes, or lite.

Currently lite is the equivalent of yes in rules.mk. Next cycle the use of the lite keyword will be prevented in favour of yes -- any new submissions should now be using yes or no to minimise disruption.

Bootmagic Full Deprecation Schedule

This is the current roadmap for the behavior of BOOTMAGIC_ENABLE:

DIP switch callbacks are now boolean (#13399)

To match the encoder change last breaking changes cycle, DIP switch callbacks now return bool, too.

Example code before change:

c
void dip_switch_update_kb(uint8_t index, bool active) {\n    dip_switch_update_user(index, active);\n}\n\nvoid dip_switch_update_user(uint8_t index, bool active) {\n    switch (index) {\n        case 0:\n            if(active) { audio_on(); } else { audio_off(); }\n            break;\n    }\n}\n\nvoid dip_switch_update_mask_kb(uint32_t state) { \n    dip_switch_update_mask_user(state);\n}\n\nvoid dip_switch_update_mask_user(uint32_t state) {\n    if (state & (1UL<<0) && state & (1UL<<1)) {\n        layer_on(_ADJUST); // C on esc\n    } else {\n        layer_off(_ADJUST);\n    }\n}

Example code after change:

c
bool dip_switch_update_kb(uint8_t index, bool active) {\n    if !(dip_switch_update_user(index, active)) { return false; }\n    return true;\n}\n\nbool dip_switch_update_user(uint8_t index, bool active) {\n    switch (index) {\n        case 0:\n            if(active) { audio_on(); } else { audio_off(); }\n            break;\n    }\n    return true; // Returning true allows keyboard code to execute, false will tell the keyboard code "I've already handled it".\n}\n\nbool dip_switch_update_mask_kb(uint32_t state) {\n    if (!dip_switch_update_mask_user(state)) { return false; }\n    return true;\n}\n\nbool dip_switch_update_mask_user(uint32_t state) {\n    if (state & (1UL<<0) && state & (1UL<<1)) {\n        layer_on(_ADJUST); // C on esc\n    } else {\n        layer_off(_ADJUST);\n    }\n    return true; // Returning true allows keyboard code to execute, false will tell the keyboard code "I've already handled it".\n}

Notable core changes

Split transport improvements

Split keyboards gained a significant amount of improvements during this breaking changes cycle, specifically:

WARNING

If you're updating your split keyboard, you will need to flash both sides of the split with the your firmware.

Teensy 4.x support (#13056, #13076, #13077)

Updated ChibiOS and ChibiOS-Contrib, which brought in support for Teensy 4.x dev boards, running NXP i.MX1062.

Data Driven Improvements (#13366)

QMK's pursuit of data-driven keyboards has progressed, allowing substantially more configurable options to be specified in info.json.

Tags

Tags will let you categorize your keyboard, and will be used in the future to allow browsing and sorting through keyboards in QMK. Tags are free-form text identifiers that identify attributes about your keyboard. To add tags you simply add a tags key to your info.json:

"tags": ["tkl", "backlight", "encoder"]\n

Dot Notation

With this release we are moving towards using JSON dot notation in more places. For example, when using qmk info -f text:

$ qmk info -f text -kb clueboard/card\n  bootloader: atmel-dfu\n  debounce: 20\n  diode_direction: ROW2COL\n  features.audio: True\n  features.backlight: True\n  features.bluetooth: False\n  features.bootmagic: False\n  features.command: True\n  features.console: True\n  features.extrakey: True\n  features.lto: True\n  features.midi: False\n  features.mousekey: True\n  features.nkro: False\n  features.rgblight: True\n  features.unicode: False\n  height: 8\n  keyboard_folder: clueboard/card\n  keyboard_name: Cluecard\n  layout_aliases.LAYOUT: LAYOUT_all\n  layouts: LAYOUT_all\n  maintainer: skullydazed\n  manufacturer: Clueboard\n  matrix_pins.cols: F1, F6, F7\n  matrix_pins.rows: B4, F0, F4, F5\n  platform: unknown\n  processor: atmega32u4\n  processor_type: avr\n  protocol: LUFA\n  rgblight.brightness_steps: 17\n  rgblight.hue_steps: 10\n  rgblight.led_count: 4\n  rgblight.pin: E6\n  rgblight.saturation_steps: 17\n  split.transport.protocol: serial\n  usb.device_ver: 0x0001\n  usb.pid: 0x2330\n  usb.vid: 0xC1ED\n  width: 10

New configuration keys

We've added dozens of new keys to info.json so that you can configure more than ever without writing a single line of code. A quick overview of the new items you can configure:

Codebase restructure and cleanup

QMK was originally based on TMK, and has grown in size considerably since its first inception. To keep moving things forward, restructure of some of the core areas of the code is needed to support new concepts and new hardware, and progress is happening along those lines:


Full changelist

Core:

CLI:

Submodule updates:

Keyboards:

Keyboard fixes:

Others:

Bugs:

', 65); const _hoisted_66 = [ _hoisted_1 ]; function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) { return openBlock(), createElementBlock("div", null, _hoisted_66); } const _20210828 = /* @__PURE__ */ _export_sfc(_sfc_main, [["render", _sfc_render]]); export { __pageData, _20210828 as default };