<spanclass="line"><spanstyle="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">}</span></span></code></pre></div><h3id="led-callback-refactor"tabindex="-1">LED Indicator callback refactoring (<ahref="https://github.com/qmk/qmk_firmware/pull/18450"target="_blank"rel="noreferrer">#14864</a>) <aclass="header-anchor"href="#led-callback-refactor"aria-label="Permalink to "LED Indicator callback refactoring ([#14864](https://github.com/qmk/qmk_firmware/pull/18450)) {#led-callback-refactor}""></a></h3><p><em>RGB Matrix</em> and <em>LED Matrix</em> Indicator display code was traditionally difficult to override in keymaps as they did not follow the standard pattern of <code>bool *_kb()</code> deferring to <code>bool *_user()</code> functions, allowing signalling to the higher level that processing had already been done.</p><p>This changes the standard callback model to allow for a base implementation to be provided by a keyboard, but also still allow for keymap-level overrides without needing to modify the keyboard's code.</p><p>The old RGB Matrix keymap code went something like this:</p><divclass="language-c vp-adaptive-theme"><buttontitle="Copy Code"class="copy"></button><spanclass="lang">c</span><preclass="shiki shiki-themes github-light github-dark vp-code"><code><spanclass="line"><spanstyle="--shiki-light:#D73A49;--shiki-dark:#F97583;">void</span><spanstyle="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> rgb_matrix_indicators_user</span><spanstyle="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(</span><spanstyle="--shiki-light:#D73A49;--shiki-dark:#F97583;">void</span><spanstyle="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">) {</span></span>
<spanclass="line"><spanstyle="--shiki-light:#6A737D;--shiki-dark:#6A737D;"> // keymap LED code</span></span>
<spanclass="line"><spanstyle="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">}</span></span></code></pre></div><p>...but the new RGB Matrix keymap code looks like this:</p><divclass="language-c vp-adaptive-theme"><buttontitle="Copy Code"class="copy"></button><spanclass="lang">c</span><preclass="shiki shiki-themes github-light github-dark vp-code"><code><spanclass="line"><spanstyle="--shiki-light:#D73A49;--shiki-dark:#F97583;">bool</span><spanstyle="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> rgb_matrix_indicators_user</span><spanstyle="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(</span><spanstyle="--shiki-light:#D73A49;--shiki-dark:#F97583;">void</span><spanstyle="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">) {</span></span>
<spanclass="line"><spanstyle="--shiki-light:#6A737D;--shiki-dark:#6A737D;"> // keymap LED code</span></span>
<spanclass="line"><spanstyle="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">}</span></span></code></pre></div><p>Keyboard designers should now structure their keyboard-level routines like the following, in order to allow for keymap overrides:</p><divclass="language-c vp-adaptive-theme"><buttontitle="Copy Code"class="copy"></button><spanclass="lang">c</span><preclass="shiki shiki-themes github-light github-dark vp-code"><code><spanclass="line"><spanstyle="--shiki-light:#D73A49;--shiki-dark:#F97583;">bool</span><spanstyle="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> rgb_matrix_indicators_kb</span><spanstyle="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(</span><spanstyle="--shiki-light:#D73A49;--shiki-dark:#F97583;">void</span><spanstyle="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">) {</span></span>
<spanclass="line"><spanstyle="--shiki-light:#6A737D;--shiki-dark:#6A737D;"> // Defer to the keymap if they want to override</span></span>
<spanclass="line"><spanstyle="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">}</span></span></code></pre></div><p>The equivalent transformations should be done for LED Matrix boards.</p><h3id="unicode-mode-renaming"tabindex="-1">Unicode mode refactoring <aclass="header-anchor"href="#unicode-mode-renaming"aria-label="Permalink to "Unicode mode refactoring {#unicode-mode-renaming}""></a></h3><p>Unicode modes were renamed in order to prevent collision with equivalent keycodes. The available values for <code>UNICODE_SELECTED_MODES</code> changed -- see <ahref="./../features/unicode#setting-the-input-mode">Feature: Unicode</a> for the new list of values and how to configure them.</p><h2id="notable-core"tabindex="-1">Notable core changes <aclass="header-anchor"href="#notable-core"aria-label="Permalink to "Notable core changes {#notable-core}""></a></h2><p>This breaking changes cycle, a lot of the core changes are related to cleanup and refactoring -- commonly called "tech debt".</p><h3id="keycodes-overhaul-core-changes"tabindex="-1">Keycodes refactoring <aclass="header-anchor"href="#keycodes-overhaul-core-changes"aria-label="Permalink to "Keycodes refactoring {#keycodes-overhaul-core-changes}""></a></h3><p>We aren't going to list each and every change -- they're far too numerous -- instead, we'll just list the related PRs in order to convey just how wide-reaching these changes were:</p><ul><li>Align audio keycode names (<ahref="https://github.com/qmk/qmk_firmware/pull/18962"target="_blank"rel="noreferrer">#18962</a>)</li><li>Align dynamic tapping term keycode names (<ahref="https://github.com/qmk/qmk_firmware/pull/18963"target="_blank"rel="noreferrer">#18963</a>)</li><li>Align haptic feedback keycode names (<ahref="https://github.com/qmk/qmk_firmware/pull/18964"target="_blank"rel="noreferrer">#18964</a>)</li><li>Deprecate <code>CAPS_WORD</code>/<code>CAPSWRD</code> for <code>CW_TOGG</code> (<ahref="https://github.com/qmk/qmk_firmware/pull/18834"target="_blank"rel="noreferrer">#18834</a>)</li><li>Deprecate <code>KC_LEAD</code> for <code>QK_LEAD</code> (<ahref="https://github.com/qmk/qmk_firmware/pull/18792"target="_blank"rel="noreferrer">#18792</a>)</li><li>Deprecate <code>KC_LOCK</code> for <code>QK_LOCK</code> (<ahref="https://github.com/qmk/qmk_firmware/pull/18796"target="_blank"rel="noreferrer">#18796</a>)</li><li>Deprecate <code>KEY_OVERRIDE_*</code> keycodes for <code>KO_*</code> (<ahref="https://github.com/qmk/qmk_firmware/pull/18843"target="_blank"rel="noreferrer">#18843</a>)</li><li>Deprecate <code>ONESHOT_*</code> keycodes for <code>QK_ONE_SHOT_*</code> (<ahref="https://github.com/qmk/qmk_firmware/pull/18844"target="_blank"rel="noreferrer">#18844</a>)</li><li>Deprecate <code>SECURE_*</code> keycodes for <code>QK_SECURE_*</code> (<ahref="https://github.com/qmk/qmk_firmware/pull/18847"target="_blank"rel="noreferrer">#18847</a>)</li><li>Deprecate <code>VLK_TOG</code> for <code>VK_TOGG</code> (<ahref="https://github.com/qmk/qmk_firmware/pull/18807"target="_blank"rel="noreferrer">#18807</a>)</li><li>Initial DD keycode migration (<ahref="https://github.com/qmk/qmk_firmware/pull/18643"target="_blank"rel="noreferrer">#18643</a>)</li><li>Macro keycode name refactoring (<ahref="https://github.com/qmk/qmk_firmware/pull/18958"target="_blank"rel="noreferrer">#18958</a>)</li><li>Move mousekey keycodes into newly freed up keycode block (<ahref="https://github.com/qmk/qmk_firmware/pull/16076"target="_blank"rel="noreferrer">#16076</a>)</li><li>Normalise Auto Shift keycodes (<ahref="https://github.com/qmk/qmk_firmware/pull/18892"target="_blank"rel="noreferrer">#18892</a>)</li><li>Normalise Autocorrect keycodes (<ahref="https://github.com/qmk/qmk_firmware/pull/18893"target="_blank"rel="noreferrer">#18893</a>)</li><li>Normalise Combo keycodes (<ahref="https://github.com/qmk/qmk_firmware/pull/18877"target="_blank"rel="noreferrer">#18877</a>)</li><li>Normalise Dynamic Macro keycodes (<ahref="https://github.com/qmk/