# QMK Breaking Changes - 2026 May 31 Changelog

## Notable Changes {#notable-changes}

## Deprecation Notices

In line with the [notice period](../support_deprecation_policy#how-much-advance-notice-will-be-given), deprecation notices for larger items are listed here.

### Removal of deprecated isLeftHand ([25897](https://github.com/qmk/qmk_firmware/pull/25897))

Users must migrate to `is_keyboard_left()` found in `split_util.h` instead. For example:

```diff
oled_rotation_t oled_init_user(oled_rotation_t rotation) {
-    return isLeftHand ? OLED_ROTATION_180 : OLED_ROTATION_0;
+    return is_keyboard_left() ? OLED_ROTATION_180 : OLED_ROTATION_0;
}
```

### Removal of `usb.force_nkro`/`FORCE_NKRO` ([#25262](https://github.com/qmk/qmk_firmware/pull/25262))

Unpicking the assumption that only USB can do NKRO, forcing of NKRO on every boot has been deprecated. As this setting persists, it produces unnecessary user confusion when the various NKRO keycodes (for example `NK_TOGG`) do not behave as expected.

The new defaults can be configured in the following ways:

:::::tabs

==== keyboard.json

```json [keyboard.json]
{
    "host": { // [!code focus]
        "default": { // [!code focus]
            "nkro": true // [!code focus]
        } // [!code focus]
    } // [!code focus]
}

```

==== keymap.json

```json [keymap.json]
{
    "config": {
        "host": { // [!code focus]
            "default": { // [!code focus]
                "nkro": true // [!code focus]
            } // [!code focus]
        } // [!code focus]
    }
}

```

==== config.h

```c [config.h]
#pragma once

#define NKRO_DEFAULT_ON true // [!code focus]
```

:::::

## Full changelist

Core:
* Remove deprecated `isLeftHand` ([#25897](https://github.com/qmk/qmk_firmware/pull/25897))
* Either output Unicode or insert in Leader sequence ([#25940](https://github.com/qmk/qmk_firmware/pull/25940))
* Add resolution information to digitizer ([#25958](https://github.com/qmk/qmk_firmware/pull/25958))
* Always generate .map files. ([#25961](https://github.com/qmk/qmk_firmware/pull/25961))
* Add an `mcu_reset` impl for the kiibohd bootloader. ([#25963](https://github.com/qmk/qmk_firmware/pull/25963))
* VIA v13 ([#26001](https://github.com/qmk/qmk_firmware/pull/26001))
* Added PixArt PMW-3325 mouse sensor driver ([#26065](https://github.com/qmk/qmk_firmware/pull/26065))
* Update WL backing store from 16 to 32-bit for AT32 ([#26066](https://github.com/qmk/qmk_firmware/pull/26066))
* Refactor Pixel Fractal effect ([#26071](https://github.com/qmk/qmk_firmware/pull/26071))
* Minor combo code optimisation ([#26073](https://github.com/qmk/qmk_firmware/pull/26073))
* Options to constrain Speculative Hold: `SPECULATIVE_HOLD_ONE_KEY` and `SPECULATIVE_HOLD_FLOW_TERM`. ([#26099](https://github.com/qmk/qmk_firmware/pull/26099))
* Add includes for std::setw ([#26153](https://github.com/qmk/qmk_firmware/pull/26153))
* Bind gtest colour to QMKs 'COLOR' variable ([#26159](https://github.com/qmk/qmk_firmware/pull/26159))
* Print correct test names ([#26160](https://github.com/qmk/qmk_firmware/pull/26160))
* Ignore Uninteresting test warnings during test teardown ([#26161](https://github.com/qmk/qmk_firmware/pull/26161))
* Remove FORCE_NKRO ([#26206](https://github.com/qmk/qmk_firmware/pull/26206))

CLI:
* Update lint to check all keymaps within the repo ([#25970](https://github.com/qmk/qmk_firmware/pull/25970))
* Fail when a duplicate module name is detected ([#26238](https://github.com/qmk/qmk_firmware/pull/26238))

Submodule updates:
* Update ChibiOS, ChibiOS-Contrib. ([#25730](https://github.com/qmk/qmk_firmware/pull/25730))
* Revert "Update ChibiOS, ChibiOS-Contrib." ([#26074](https://github.com/qmk/qmk_firmware/pull/26074))
* ChibiOS, ChibiOS-Contrib updates (redux) ([#26079](https://github.com/qmk/qmk_firmware/pull/26079))
* Bump googletest to v1.16.0 ([#26154](https://github.com/qmk/qmk_firmware/pull/26154))

Keyboards:
* Require "url" field to not be empty ([#25152](https://github.com/qmk/qmk_firmware/pull/25152))
* Add nomis/rpi_pico_25x1 macropad ([#25346](https://github.com/qmk/qmk_firmware/pull/25346))
* Remove override of QK_{LED,RGB}_MATRIX_TOGGLE keycode ([#25672](https://github.com/qmk/qmk_firmware/pull/25672))
* Add reverse layout to SouthPad v2 ([#25707](https://github.com/qmk/qmk_firmware/pull/25707))
* Adding Handwired Bouvet Macropad ([#26040](https://github.com/qmk/qmk_firmware/pull/26040))
* Remove blockader user keymap ([#26075](https://github.com/qmk/qmk_firmware/pull/26075))
* Remove deprecated audio pin defines ([#26111](https://github.com/qmk/qmk_firmware/pull/26111))
* Remove `OLED_DISPLAY_128X32` config ([#26190](https://github.com/qmk/qmk_firmware/pull/26190))
* Migrate SPLIT_OLED_ENABLE ([#26194](https://github.com/qmk/qmk_firmware/pull/26194))
* Add API version assertion for split_data_sync module ([#26237](https://github.com/qmk/qmk_firmware/pull/26237))

Others:
* Bump vitepress to 1.6.4 ([#26067](https://github.com/qmk/qmk_firmware/pull/26067))
* Add usage clarifications to docs/features/unicode.md ([#26156](https://github.com/qmk/qmk_firmware/pull/26156))

Bugs:
* Fix `USER_PRINT` stripping out `uprintf` ([#25919](https://github.com/qmk/qmk_firmware/pull/25919))
* Fix possible repeat key infinite recursion ([#25926](https://github.com/qmk/qmk_firmware/pull/25926))
* Fix `cc-option` on arm-none-eabi-gcc ([#26114](https://github.com/qmk/qmk_firmware/pull/26114))
* Fix color diagnostics for arm-none-eabi-gcc ([#26115](https://github.com/qmk/qmk_firmware/pull/26115))
* Mask out active mods when unregistering after retro tapping ([#26127](https://github.com/qmk/qmk_firmware/pull/26127))
* fix `make test:all` failures seen on macOS Tahoe ([#26136](https://github.com/qmk/qmk_firmware/pull/26136))
* Add workaround for undefined reference to weak function under mingw ([#26167](https://github.com/qmk/qmk_firmware/pull/26167))
* fix(ws2812-pwm): allow WS2812_PWM_TICK_FREQUENCY override ([#26186](https://github.com/qmk/qmk_firmware/pull/26186))
* Clip mouse report values to the logical range from the USB descriptor. ([#26195](https://github.com/qmk/qmk_firmware/pull/26195))
* Align Mouse USB descriptor ([#26230](https://github.com/qmk/qmk_firmware/pull/26230))
