qmk_firmware/ChangeLog/20221126.html

47 lines
164 KiB
HTML
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!DOCTYPE html>
<html lang="en-US" dir="ltr">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<title>QMK Breaking Changes - 2022 November 26 Changelog | QMK Firmware</title>
<meta name="description" content="Documentation for QMK Firmware">
<meta name="generator" content="VitePress v1.1.3">
<link rel="preload stylesheet" href="/assets/style.No8zk9aC.css" as="style">
<script type="module" src="/assets/app.85wRauGK.js"></script>
<link rel="preload" href="/assets/inter-roman-latin.Di8DUHzh.woff2" as="font" type="font/woff2" crossorigin="">
<link rel="modulepreload" href="/assets/chunks/framework.DyMmIvSC.js">
<link rel="modulepreload" href="/assets/chunks/theme.Ddh06bHk.js">
<link rel="modulepreload" href="/assets/ChangeLog_20221126.md.DpbrnXeC.lean.js">
<script id="check-dark-mode">(()=>{const e=localStorage.getItem("vitepress-theme-appearance")||"auto",a=window.matchMedia("(prefers-color-scheme: dark)").matches;(!e||e==="auto"?a:e==="dark")&&document.documentElement.classList.add("dark")})();</script>
<script id="check-mac-os">document.documentElement.classList.toggle("mac",/Mac|iPhone|iPod|iPad/i.test(navigator.platform));</script>
</head>
<body>
<div id="app"><div class="Layout" data-v-5d98c3a5><!--[--><!--]--><!--[--><span tabindex="-1" data-v-0f60ec36></span><a href="#VPContent" class="VPSkipLink visually-hidden" data-v-0f60ec36> Skip to content </a><!--]--><!----><header class="VPNav" data-v-5d98c3a5 data-v-ae24b3ad><div class="VPNavBar has-sidebar top" data-v-ae24b3ad data-v-ccf7ddec><div class="wrapper" data-v-ccf7ddec><div class="container" data-v-ccf7ddec><div class="title" data-v-ccf7ddec><div class="VPNavBarTitle has-sidebar" data-v-ccf7ddec data-v-ab179fa1><a class="title" href="/" data-v-ab179fa1><!--[--><!--]--><!--[--><!--[--><!--[--><img class="VPImage dark logo" src="/qmk-logo-dark.svg" alt data-v-8426fc1a><!--]--><!--[--><img class="VPImage light logo" src="/qmk-logo-light.svg" alt data-v-8426fc1a><!--]--><!--]--><!--]--><span data-v-ab179fa1>QMK Firmware</span><!--[--><!--]--></a></div></div><div class="content" data-v-ccf7ddec><div class="content-body" data-v-ccf7ddec><!--[--><!--]--><div class="VPNavBarSearch search" data-v-ccf7ddec><!--[--><!----><div id="local-search"><button type="button" class="DocSearch DocSearch-Button" aria-label="Search"><span class="DocSearch-Button-Container"><span class="vp-icon DocSearch-Search-Icon"></span><span class="DocSearch-Button-Placeholder">Search</span></span><span class="DocSearch-Button-Keys"><kbd class="DocSearch-Button-Key"></kbd><kbd class="DocSearch-Button-Key">K</kbd></span></button></div><!--]--></div><nav aria-labelledby="main-nav-aria-label" class="VPNavBarMenu menu" data-v-ccf7ddec data-v-7f418b0f><span id="main-nav-aria-label" class="visually-hidden" data-v-7f418b0f>Main Navigation</span><!--[--><!--[--><a class="VPLink link VPNavBarMenuLink" href="/" tabindex="0" data-v-7f418b0f data-v-9c663999><!--[--><span data-v-9c663999>Home</span><!--]--></a><!--]--><!--]--></nav><!----><div class="VPNavBarAppearance appearance" data-v-ccf7ddec data-v-e6aabb21><button class="VPSwitch VPSwitchAppearance" type="button" role="switch" title="Switch to dark theme" aria-checked="false" data-v-e6aabb21 data-v-d1f28634 data-v-1d5665e3><span class="check" data-v-1d5665e3><span class="icon" data-v-1d5665e3><!--[--><span class="vpi-sun sun" data-v-d1f28634></span><span class="vpi-moon moon" data-v-d1f28634></span><!--]--></span></span></button></div><div class="VPSocialLinks VPNavBarSocialLinks social-links" data-v-ccf7ddec data-v-0394ad82 data-v-7bc22406><!--[--><a class="VPSocialLink no-icon" href="https://reddit.com/r/olkb" aria-label target="_blank" rel="noopener" data-v-7bc22406 data-v-eee4e7cb><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 50 50" width="50px" height="50px"><path d="M 29 3 C 28.0625 3 27.164063 3.382813 26.5 4 C 25.835938 4.617188 25.363281 5.433594 25 6.40625 C 24.355469 8.140625 24.085938 10.394531 24.03125 13.03125 C 19.234375 13.179688 14.820313 14.421875 11.28125 16.46875 C 10.214844 15.46875 8.855469 14.96875 7.5 14.96875 C 6.089844 14.96875 4.675781 15.511719 3.59375 16.59375 C 1.425781 18.761719 1.425781 22.238281 3.59375 24.40625 L 3.84375 24.65625 C 3.3125 26.035156 3 27.488281 3 29 C 3 33.527344 5.566406 37.585938 9.5625 40.4375 C 13.558594 43.289063 19.007813 45 25 45 C 30.992188 45 36.441406 43.289063 40.4375 40.4375 C 44.433594 37.585938 47 33.527344 47 29 C 47 27.488281 46.6875 26.035156 46.15625 24.65625 L 46.40625 24.40625 C 48.574219 22.238281 48.574219 18.761719 46.40625 16.59375 C 45.324219 15.511719 43.910156 14.96875 42.5 14.96875 C 41.144531 14.96875 39.785156 15.46875 38.71875 16.46875 C 35.195313 14.433594 30.800781 13.191406 26.03125 13.03125 C 26.09375 10.546875 26.363281 8.46875 26.875 7.09375 C 27.164063 6.316406 27.527344 5.757813 27.875 5.4375 C 28.222656 5.117188 28.539063 5 29 5 C 29.460938 5 29.683594 5.125 30.03125 5.40625 C 30.378906 5.6875 30.785156 6.148438 31.3125 6.6875 C 32.253906 7.652344 33.695313 8.714844 36.09375 8.9375 C 36.539063 11.238281 38.574219 13 41 13 C 43.75 13 46 10.75 46 8 C 46 5.25 43.75 3 41 3 C 38.605469 3 36.574219 4.710938 36.09375 6.96875 C 34.3125 6.796875 33.527344 6.109375 32.75 5.3125 C 32.300781 4.851563 31.886719 4.3125 31.3125 3.84375 C 30.738281 3.375 29.9375 3 29 3 Z M 41 5 C 42.667969 5 44 6.332031 44 8 C 44 9.667969 42.667969 11 41 11 C 39.332031 11 38 9.667969 38 8 C 38 6.332031 39.332031 5 41 5 Z M 25 15 C 30.609375 15 35.675781 16.613281 39.28125 19.1875 C 42.886719 21.761719 45 25.226563 45 29 C 45 32.773438 42.886719 36.238281 39.28125 38.8125 C 35.675781 41.386719 30.609375 43 25 43 C 19.390625 43 14.324219 41.386719 10.71875 38.8125 C 7.113281 36.238281 5 32.773438 5 29 C 5 25.226563 7.113281 21.761719 10.71875 19.1875 C 14.324219 16.613281 19.390625 15 25 15 Z M 7.5 16.9375 C 8.203125 16.9375 8.914063 17.148438 9.53125 17.59375 C 7.527344 19.03125 5.886719 20.769531 4.75 22.71875 C 3.582031 21.296875 3.660156 19.339844 5 18 C 5.714844 17.285156 6.609375 16.9375 7.5 16.9375 Z M 42.5 16.9375 C 43.390625 16.9375 44.285156 17.285156 45 18 C 46.339844 19.339844 46.417969 21.296875 45.25 22.71875 C 44.113281 20.769531 42.472656 19.03125 40.46875 17.59375 C 41.085938 17.148438 41.796875 16.9375 42.5 16.9375 Z M 17 22 C 14.800781 22 13 23.800781 13 26 C 13 28.199219 14.800781 30 17 30 C 19.199219 30 21 28.199219 21 26 C 21 23.800781 19.199219 22 17 22 Z M 33 22 C 30.800781 22 29 23.800781 29 26 C 29 28.199219 30.800781 30 33 30 C 35.199219 30 37 28.199219 37 26 C 37 23.800781 35.199219 22 33 22 Z M 17 24 C 18.117188 24 19 24.882813 19 26 C 19 27.117188 18.117188 28 17 28 C 15.882813 28 15 27.117188 15 26 C 15 24.882813 15.882813 24 17 24 Z M 33 24 C 34.117188 24 35 24.882813 35 26 C 35 27.117188 34.117188 28 33 28 C 31.882813 28 31 27.117188 31 26 C 31 24.882813 31.882813 24 33 24 Z M 34.15625 33.84375 C 34.101563 33.851563 34.050781 33.859375 34 33.875 C 33.683594 33.9375 33.417969 34.144531 33.28125 34.4375 C 33.28125 34.4375 32.757813 35.164063 31.4375 36 C 30.117188 36.835938 28.058594 37.6875 25 37.6875 C 21.941406 37.6875 19.882813 36.835938 18.5625 36 C 17.242188 35.164063 16.71875 34.4375 16.71875 34.4375 C 16.492188 34.082031 16.066406 33.90625 15.65625 34 C 15.332031 34.082031 15.070313 34.316406 14.957031 34.632813 C 14.84375 34.945313 14.894531 35.292969 15.09375 35.5625 C 15.09375 35.5625 15.863281 36.671875 17.46875 37.6875 C 19.074219 38.703125 21.558594 39.6875 25 39.6875 C 28.441406 39.6875 30.925781 38.703125 32.53125 37.6875 C 34.136719 36.671875 34.90625 35.5625 34.90625 35.5625 C 35.207031 35.273438 35.296875 34.824219 35.128906 34.441406 C 34.960938 34.058594 34.574219 33.820313 34.15625 33.84375 Z"/></svg></a><a class="VPSocialLink no-icon" href="https://discord.gg/qmk" aria-label="discord" target="_blank" rel="noopener" data-v-7bc22406 data-v-eee4e7cb><span class="vpi-social-discord" /></a><a class="VPSocialLink no-icon" href="https://github.com/qmk/qmk_firmware" aria-label="github" target="_blank" rel="noopener" data-v-7bc22406 data-v-eee4e7cb><span class="vpi-social-github" /></a><!--]--></div><div class="VPFlyout VPNavBarExtra extra" data-v-ccf7ddec data-v-d0bd9dde data-v-b6c34ac9><button type="button" class="button" aria-haspopup="true" aria-expanded="false" aria-label="extra navigation" data-v-b6c34ac9><span class="vpi-more-horizontal icon" data-v-b6c34ac9></span></button><div class="menu" data-v-b6c34ac9><div class="VPMenu" data-v-b6c34ac9 data-v-e7ea1737><!----><!--[--><!--[--><!----><div class="group" data-v-d0bd9dde><div class="item appearance" data-v-d0bd9dde><p class="label" data-v-d0bd9dde>Appearance</p><div class="appearance-action" data-v-d0bd9dde><button class="VPSwitch VPSwitchAppearance" type="button" role="switch" title="Switch to dark theme" aria-checked="false" data-v-d0bd9dde data-v-d1f28634 data-v-1d5665e3><span class="check" data-v-1d5665e3><span class="icon" data-v-1d5665e3><!--[--><span class="vpi-sun sun" data-v-d1f28634></span><span class="vpi-moon moon" data-v-d1f28634></span><!--]--></span></span></button></div></div></div><div class="group" data-v-d0bd9dde><div class="item social-links" data-v-d0bd9dde><div class="VPSocialLinks social-links-list" data-v-d0bd9dde data-v-7bc22406><!--[--><a class="VPSocialLink no-icon" href="https://reddit.com/r/olkb" aria-label target="_blank" rel="noopener" data-v-7bc22406 data-v-eee4e7cb><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 50 50" width="50px" height="50px"><path d="M 29 3 C 28.0625 3 27.164063 3.382813 26.5 4 C 25.835938 4.617188 25.363281 5.433594 25 6.40625 C 24.355469 8.140625 24.085938 10.394531 24.03125 13.03125 C 19.234375 13.179688 14.820313 14.421875 11.28125 16.46875 C 10.214844 15.46875 8.855469 14.96875 7.5 14.96875 C 6.089844 14.96875 4.675781 15.511719 3.59375 16.59375 C 1.425781 18.761719 1.425781 22.238281 3.59375 24.40625 L 3.84375 24.65625 C 3.3125 26.035156 3 27.488281 3 29 C 3 33.527344 5.566406 37.585938 9.5625 40.4375 C 13.558594 43.289063 19.007813 45 25 45 C 30.992188 45 36.441406 43.289063 40.4375 40.4375 C 44.433594 37.585938 47 33.527344 47 29 C 47 27.488281 46.6875 26.035156 46.15625 24.65625 L 46.40625 24.40625 C 48.574219 22.238281 48.574219 18.761719 46.40625 16.59375 C 45.324219 15.511719 43.910156 14.96875 42.5 14.96875 C 41.144531 14.96875 39.785156 15.46875 38.71875 16.46875 C 35.195313 14.433594 30.800781 13.191406 26.03125 13.03125 C 26.09375 10.546875 26.363281 8.46875 26.875 7.09375 C 27.164063 6.316406 27.527344 5.757813 27.875 5.4375 C 28.222656 5.117188 28.539063 5 29 5 C 29.460938 5 29.683594 5.125 30.03125 5.40625 C 30.378906 5.6875 30.785156 6.148438 31.3125 6.6875 C 32.253906 7.652344 33.695313 8.714844 36.09375 8.9375 C 36.539063 11.238281 38.574219 13 41 13 C 43.75 13 46 10.75 46 8 C 46 5.25 43.75 3 41 3 C 38.605469 3 36.574219 4.710938 36.09375 6.96875 C 34.3125 6.796875 33.527344 6.109375 32.75 5.3125 C 32.300781 4.851563 31.886719 4.3125 31.3125 3.84375 C 30.738281 3.375 29.9375 3 29 3 Z M 41 5 C 42.667969 5 44 6.332031 44 8 C 44 9.667969 42.667969 11 41 11 C 39.332031 11 38 9.667969 38 8 C 38 6.332031 39.332031 5 41 5 Z M 25 15 C 30.609375 15 35.675781 16.613281 39.28125 19.1875 C 42.886719 21.761719 45 25.226563 45 29 C 45 32.773438 42.886719 36.238281 39.28125 38.8125 C 35.675781 41.386719 30.609375 43 25 43 C 19.390625 43 14.324219 41.386719 10.71875 38.8125 C 7.113281 36.238281 5 32.773438 5 29 C 5 25.226563 7.113281 21.761719 10.71875 19.1875 C 14.324219 16.613281 19.390625 15 25 15 Z M 7.5 16.9375 C 8.203125 16.9375 8.914063 17.148438 9.53125 17.59375 C 7.527344 19.03125 5.886719 20.769531 4.75 22.71875 C 3.582031 21.296875 3.660156 19.339844 5 18 C 5.714844 17.285156 6.609375 16.9375 7.5 16.9375 Z M 42.5 16.9375 C 43.390625 16.9375 44.285156 17.285156 45 18 C 46.339844 19.339844 46.417969 21.296875 45.25 22.71875 C 44.113281 20.769531 42.472656 19.03125 40.46875 17.59375 C 41.085938 17.148438 41.796875 16.9375 42.5 16.9375 Z M 17 22 C 14.800781 22 13 23.800781 13 26 C 13 28.199219 14.800781 30 17 30 C 19.199219 30 21 28.199219 21 26 C 21 23.800781 19.199219 22 17 22 Z M 33 22 C 30.800781 22 29 23.800781 29 26 C 29 28.199219 30.800781 30 33 30 C 35.199219 30 37 28.199219 37 26 C 37 23.800781 35.199219 22 33 22 Z M 17 24 C 18.117188 24 19 24.882813 19 26 C 19 27.117188 18.117188 28 17 28 C 15.882813 28 15 27.117188 15 26 C 15 24.882813 15.882813 24 17 24 Z M 33 24 C 34.117188 24 35 24.882813 35 26 C 35 27.117188 34.117188 28 33 28 C 31.882813 28 31 27.117188 31 26 C 31 24.882813 31.882813 24 33 24 Z M 34.15625 33.84375 C 34.101563 33.851563 34.050781 33.859375 34 33.875 C 33.683594 33.9375 33.417969 34.144531 33.28125 34.4375 C 33.28125 34.4375 32.757813 35.164063 31.4375 36 C 30.117188 36.835938 28.058594 37.6875 25 37.6875 C 21.941406 37.6875 19.882813 36.835938 18.5625 36 C 17.242188 35.164063 16.71875 34.4375 16.71875 34.4375 C 16.492188 34.082031 16.066406 33.90625 15.65625 34 C 15.332031 34.082031 15.070313 34.316406 14.957031 34.632813 C 14.84375 34.945313 14.894531 35.292969 15.09375 35.5625 C 15.09375 35.5625 15.863281 36.671875 17.46875 37.6875 C 19.074219 38.703125 21.558594 39.6875 25 39.6875 C 28.441406 39.6875 30.925781 38.703125 32.53125 37.6875 C 34.136719 36.671875 34.90625 35.5625 34.90625 35.5625 C 35.207031 35.273438 35.296875 34.824219 35.128906 34.441406 C 34.960938 34.058594 34.574219 33.820313 34.15625 33.84375 Z"/></svg></a><a class="VPSocialLink no-icon" href="https://discord.gg/qmk" aria-label="discord" target="_blank" rel="noopener" data-v-7bc22406 data-v-eee4e7cb><span class="vpi-social-discord" /></a><a class="VPSocialLink no-icon" href="https://github.com/qmk/qmk_firmware" aria-label="github" target="_blank" rel="noopener" data-v-7bc22406 data-v-eee4e7cb><span class="vpi-social-github" /></a><!--]--></div></div></div><!--]--><!--]--></div></div></div><!--[--><!--]--><button type="button" class="VPNavBarHamburger hamburger" aria-label="mobile navigation" aria-expanded="false" aria-controls="VPNavScreen" data-v-ccf7ddec data-v-e5dd9c1c><span class="container" data-v-e5dd9c1c><span class="top" data-v-e5dd9c1c></span><span class="middle" data-v-e5dd9c1c></span><span class="bottom" data-v-e5dd9c1c></span></span></button></div></div></div></div><div class="divider" data-v-ccf7ddec><div class="divider-line" data-v-ccf7ddec></div></div></div><!----></header><div class="VPLocalNav has-sidebar empty" data-v-5d98c3a5 data-v-a6f0e41e><div class="container" data-v-a6f0e41e><button class="menu" aria-expanded="false" aria-controls="VPSidebarNav" data-v-a6f0e41e><span class="vpi-align-left menu-icon" data-v-a6f0e41e></span><span class="menu-text" data-v-a6f0e41e>Menu</span></button><div class="VPLocalNavOutlineDropdown" style="--vp-vh:0px;" data-v-a6f0e41e data-v-267dd0ed><button data-v-267dd0ed>Return to top</button><!----></div></div></div><aside class="VPSidebar" data-v-5d98c3a5 data-v-575e6a36><div class="curtain" data-v-575e6a36></div><nav class="nav" id="VPSidebarNav" aria-labelledby="sidebar-aria-label" tabindex="-1" data-v-575e6a36><span class="visually-hidden" id="sidebar-aria-label" data-v-575e6a36> Sidebar Navigation </span><!--[--><!--]--><!--[--><div class="group" data-v-575e6a36><section class="VPSidebarItem level-0" data-v-575e6a36 data-v-b8d55f3b><div class="item" role="button" tabindex="0" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><h2 class="text" data-v-b8d55f3b>Tutorial</h2><!----></div><div class="items" data-v-b8d55f3b><!--[--><div class="VPSidebarItem level-1 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/newbs" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>Introduction</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/newbs_getting_started" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>Setup</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/newbs_building_firmware" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>Building Your First Firmware</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/newbs_flashing" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>Flashing Firmware</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/support" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>Getting Help/Support</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/newbs_external_userspace" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>External Userspace</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/newbs_learn_more_resources" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>Other Resources</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/syllabus" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>Syllabus</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><div class="group" data-v-575e6a36><section class="VPSidebarItem level-0" data-v-575e6a36 data-v-b8d55f3b><div class="item" role="button" tabindex="0" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><h2 class="text" data-v-b8d55f3b>FAQs</h2><!----></div><div class="items" data-v-b8d55f3b><!--[--><div class="VPSidebarItem level-1 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/faq_general" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>General FAQ</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/faq_build" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>Build/Compile QMK</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/faq_misc" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>Troubleshooting QMK</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/faq_debug" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>Debugging QMK</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/faq_keymap" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>Keymap FAQ</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/squeezing_avr" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>Squeezing Space from AVR</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/reference_glossary" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>Glossary</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><div class="group" data-v-575e6a36><section class="VPSidebarItem level-0" data-v-575e6a36 data-v-b8d55f3b><div class="item" role="button" tabindex="0" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><h2 class="text" data-v-b8d55f3b>Configurator</h2><!----></div><div class="items" data-v-b8d55f3b><!--[--><div class="VPSidebarItem level-1 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/newbs_building_firmware_configurator" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>Overview</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/configurator_step_by_step" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>Step by Step</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/configurator_troubleshooting" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>Troubleshooting</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/configurator_architecture" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>Architecture</p><!--]--></a><!----></div><!----></div><section class="VPSidebarItem level-1" data-v-b8d55f3b data-v-b8d55f3b><div class="item" role="button" tabindex="0" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><h3 class="text" data-v-b8d55f3b>QMK API</h3><!----></div><div class="items" data-v-b8d55f3b><!--[--><div class="VPSidebarItem level-2 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/api_overview" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>Overview</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/api_docs" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>API Documentation</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/reference_configurator_support" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>Keyboard Support</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/configurator_default_keymaps" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>Adding Default Keymaps</p><!--]--></a><!----></div><!----></div><!--]--></div></section><!--]--></div></section></div><div class="group" data-v-575e6a36><section class="VPSidebarItem level-0" data-v-575e6a36 data-v-b8d55f3b><div class="item" role="button" tabindex="0" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><h2 class="text" data-v-b8d55f3b>CLI</h2><!----></div><div class="items" data-v-b8d55f3b><!--[--><div class="VPSidebarItem level-1 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/cli" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>Overview</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/cli_configuration" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>Configuration</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/cli_commands" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>Commands</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/cli_tab_complete" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>Tab Completion</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><div class="group" data-v-575e6a36><section class="VPSidebarItem level-0" data-v-575e6a36 data-v-b8d55f3b><div class="item" role="button" tabindex="0" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><h2 class="text" data-v-b8d55f3b>Using QMK</h2><!----></div><div class="items" data-v-b8d55f3b><!--[--><section class="VPSidebarItem level-1" data-v-b8d55f3b data-v-b8d55f3b><div class="item" role="button" tabindex="0" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><h3 class="text" data-v-b8d55f3b>Guides</h3><!----></div><div class="items" data-v-b8d55f3b><!--[--><div class="VPSidebarItem level-2 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/custom_quantum_functions" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>Customizing Functionality</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/driver_installation_zadig" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>Driver Installation with Zadig</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/keymap" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>Keymap Overview</p><!--]--></a><!----></div><!----></div><section class="VPSidebarItem level-2" data-v-b8d55f3b data-v-b8d55f3b><div class="item" role="button" tabindex="0" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><h4 class="text" data-v-b8d55f3b>Development Environments</h4><!----></div><div class="items" data-v-b8d55f3b><!--[--><div class="VPSidebarItem level-3 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/getting_started_docker" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>Docker Guide</p><!--]--></a><!----></div><!----></div><!--]--></div></section><div class="VPSidebarItem level-2 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/flashing" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>Flashing</p><!--]--></a><!----></div><!----></div><section class="VPSidebarItem level-2" data-v-b8d55f3b data-v-b8d55f3b><div class="item" role="button" tabindex="0" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><h4 class="text" data-v-b8d55f3b>IDEs</h4><!----></div><div class="items" data-v-b8d55f3b><!--[--><div class="VPSidebarItem level-3 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/other_eclipse" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>Using Eclipse with QMK</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-3 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/other_vscode" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>Using VSCode with QMK</p><!--]--></a><!----></div><!----></div><!--]--></div></section><section class="VPSidebarItem level-2" data-v-b8d55f3b data-v-b8d55f3b><div class="item" role="button" tabindex="0" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><h4 class="text" data-v-b8d55f3b>Git Best Practices</h4><!----></div><div class="items" data-v-b8d55f3b><!--[--><div class="VPSidebarItem level-3 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/newbs_git_best_practices" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>Introduction</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-3 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/newbs_git_using_your_master_branch" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>Your Fork</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-3 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/newbs_git_resolving_merge_conflicts" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>Merge Conflicts</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-3 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/newbs_git_resynchronize_a_branch" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>Fixing Your Branch</p><!--]--></a><!----></div><!----></div><!--]--></div></section><!--]--></div></section><section class="VPSidebarItem level-1" data-v-b8d55f3b data-v-b8d55f3b><div class="item" role="button" tabindex="0" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><h3 class="text" data-v-b8d55f3b>Simple Keycodes</h3><!----></div><div class="items" data-v-b8d55f3b><!--[--><div class="VPSidebarItem level-2 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/keycodes" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>Full List</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/keycodes_basic" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>Basic Keycodes</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/reference_keymap_extras" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>Language-Specific Keycodes</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/feature_advanced_keycodes" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>Modifier Keys</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/quantum_keycodes" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>Quantum Keycodes</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/keycodes_magic" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>Magic Keycodes</p><!--]--></a><!----></div><!----></div><!--]--></div></section><section class="VPSidebarItem level-1" data-v-b8d55f3b data-v-b8d55f3b><div class="item" role="button" tabindex="0" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><h3 class="text" data-v-b8d55f3b>Advanced Keycodes</h3><!----></div><div class="items" data-v-b8d55f3b><!--[--><div class="VPSidebarItem level-2 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/features/command" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>Command</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/features/dynamic_macros" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>Dynamic Macros</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/features/grave_esc" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>Grave Escape</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/features/leader_key" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>Leader Key</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/mod_tap" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>Mod-Tap</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/feature_macros" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>Macros</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/features/mouse_keys" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>Mouse Keys</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/features/programmable_button" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>Programmable Button</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/features/repeat_key" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>Repeat Key</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/features/space_cadet" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>Space Cadet Shift</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/keycodes_us_ansi_shifted" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>US ANSI Shifted Keys</p><!--]--></a><!----></div><!----></div><!--]--></div></section><section class="VPSidebarItem level-1" data-v-b8d55f3b data-v-b8d55f3b><div class="item" role="button" tabindex="0" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><h3 class="text" data-v-b8d55f3b>Software Features</h3><!----></div><div class="items" data-v-b8d55f3b><!--[--><div class="VPSidebarItem level-2 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/features/auto_shift" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>Auto Shift</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/features/autocorrect" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>Autocorrect</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/features/caps_word" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>Caps Word</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/features/combo" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>Combos</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/feature_debounce_type" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>Debounce API</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/features/digitizer" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>Digitizer</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/feature_eeprom" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>EEPROM</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/features/key_lock" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>Key Lock</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/features/key_overrides" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>Key Overrides</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/feature_layers" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>Layers</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/one_shot_keys" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>One Shot Keys</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/features/os_detection" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>OS Detection</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/features/rawhid" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>Raw HID</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/features/secure" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>Secure</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/features/send_string" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>Send String</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/features/sequencer" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>Sequencer</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/features/swap_hands" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>Swap Hands</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/features/tap_dance" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>Tap Dance</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/tap_hold" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>Tap-Hold Configuration</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/features/tri_layer" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>Tri Layer</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/features/unicode" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>Unicode</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/feature_userspace" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>Userspace</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/features/wpm" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>WPM Calculation</p><!--]--></a><!----></div><!----></div><!--]--></div></section><section class="VPSidebarItem level-1" data-v-b8d55f3b data-v-b8d55f3b><div class="item" role="button" tabindex="0" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><h3 class="text" data-v-b8d55f3b>Hardware Features</h3><!----></div><div class="items" data-v-b8d55f3b><!--[--><section class="VPSidebarItem level-2" data-v-b8d55f3b data-v-b8d55f3b><div class="item" role="button" tabindex="0" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><h4 class="text" data-v-b8d55f3b>Displays</h4><!----></div><div class="items" data-v-b8d55f3b><!--[--><section class="VPSidebarItem level-3 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" tabindex="0" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/quantum_painter" data-v-b8d55f3b><!--[--><h5 class="text" data-v-b8d55f3b>Quantum Painter</h5><!--]--></a><!----></div><div class="items" data-v-b8d55f3b><!--[--><div class="VPSidebarItem level-4 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/quantum_painter_lvgl" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>Quantum Painter LVGL Integration</p><!--]--></a><!----></div><!----></div><!--]--></div></section><div class="VPSidebarItem level-3 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/features/hd44780" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>HD44780 LCD Driver</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-3 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/features/st7565" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>ST7565 LCD Driver</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-3 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/features/oled_driver" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>OLED Driver</p><!--]--></a><!----></div><!----></div><!--]--></div></section><section class="VPSidebarItem level-2" data-v-b8d55f3b data-v-b8d55f3b><div class="item" role="button" tabindex="0" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><h4 class="text" data-v-b8d55f3b>Lighting</h4><!----></div><div class="items" data-v-b8d55f3b><!--[--><div class="VPSidebarItem level-3 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/features/backlight" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>Backlight</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-3 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/features/led_matrix" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>LED Matrix</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-3 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/features/rgblight" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>RGB Lighting</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-3 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/features/rgb_matrix" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>RGB Matrix</p><!--]--></a><!----></div><!----></div><!--]--></div></section><div class="VPSidebarItem level-2 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/features/audio" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>Audio</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/features/bluetooth" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>Bluetooth</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/features/bootmagic" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>Bootmagic Lite</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/feature_converters" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>Converters</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/custom_matrix" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>Custom Matrix</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/features/dip_switch" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>DIP Switch</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/features/encoders" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>Encoders</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/features/haptic_feedback" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>Haptic Feedback</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/features/joystick" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>Joystick</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/features/led_indicators" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>LED Indicators</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/features/midi" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>MIDI</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/features/pointing_device" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>Pointing Device</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/features/ps2_mouse" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>PS/2 Mouse</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/features/split_keyboard" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>Split Keyboard</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/features/stenography" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>Stenography</p><!--]--></a><!----></div><!----></div><!--]--></div></section><section class="VPSidebarItem level-1" data-v-b8d55f3b data-v-b8d55f3b><div class="item" role="button" tabindex="0" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><h3 class="text" data-v-b8d55f3b>Keyboard Building</h3><!----></div><div class="items" data-v-b8d55f3b><!--[--><div class="VPSidebarItem level-2 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/easy_maker" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>Easy Maker for One Offs</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/porting_your_keyboard_to_qmk" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>Porting Keyboards</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/hand_wire" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>Hand Wiring Guide</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/isp_flashing_guide" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>ISP Flashing Guide</p><!--]--></a><!----></div><!----></div><!--]--></div></section><!--]--></div></section></div><div class="group" data-v-575e6a36><section class="VPSidebarItem level-0" data-v-575e6a36 data-v-b8d55f3b><div class="item" role="button" tabindex="0" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><h2 class="text" data-v-b8d55f3b>Developing QMK</h2><!----></div><div class="items" data-v-b8d55f3b><!--[--><div class="VPSidebarItem level-1 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/pr_checklist" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>PR Checklist</p><!--]--></a><!----></div><!----></div><section class="VPSidebarItem level-1" data-v-b8d55f3b data-v-b8d55f3b><div class="item" role="button" tabindex="0" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><h3 class="text" data-v-b8d55f3b>Breaking Changes</h3><!----></div><div class="items" data-v-b8d55f3b><!--[--><div class="VPSidebarItem level-2 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/breaking_changes" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>Overview</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/breaking_changes_instructions" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>My Pull Request Was Flagged</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/ChangeLog/20240825" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>Most Recent ChangeLog</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/breaking_changes_history" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>Past Breaking Changes</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/support_deprecation_policy" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>Deprecation Policy</p><!--]--></a><!----></div><!----></div><!--]--></div></section><section class="VPSidebarItem level-1" data-v-b8d55f3b data-v-b8d55f3b><div class="item" role="button" tabindex="0" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><h3 class="text" data-v-b8d55f3b>C Development</h3><!----></div><div class="items" data-v-b8d55f3b><!--[--><div class="VPSidebarItem level-2 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/arm_debugging" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>ARM Debugging Guide</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/coding_conventions_c" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>Coding Conventions</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/compatible_microcontrollers" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>Compatible Microcontrollers</p><!--]--></a><!----></div><!----></div><section class="VPSidebarItem level-2 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" tabindex="0" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/hardware_drivers" data-v-b8d55f3b><!--[--><h4 class="text" data-v-b8d55f3b>Drivers</h4><!--]--></a><!----></div><div class="items" data-v-b8d55f3b><!--[--><div class="VPSidebarItem level-3 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/drivers/adc" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>ADC Driver</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-3 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/drivers/apa102" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>APA102 Driver</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-3 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/drivers/audio" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>Audio Driver</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-3 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/drivers/eeprom" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>EEPROM Driver</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-3 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/drivers/flash" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>Flash Driver</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-3 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/drivers/i2c" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>I2C Driver</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-3 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/drivers/serial" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>'serial' Driver</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-3 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/drivers/spi" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>SPI Driver</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-3 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/drivers/uart" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>UART Driver</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-3 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/drivers/ws2812" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>WS2812 Driver</p><!--]--></a><!----></div><!----></div><!--]--></div></section><div class="VPSidebarItem level-2 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/drivers/gpio" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>GPIO Controls</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/hardware_keyboard_guidelines" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>Keyboard Guidelines</p><!--]--></a><!----></div><!----></div><!--]--></div></section><section class="VPSidebarItem level-1" data-v-b8d55f3b data-v-b8d55f3b><div class="item" role="button" tabindex="0" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><h3 class="text" data-v-b8d55f3b>Python Development</h3><!----></div><div class="items" data-v-b8d55f3b><!--[--><div class="VPSidebarItem level-2 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/coding_conventions_python" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>Coding Conventions</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/cli_development" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>QMK CLI Development</p><!--]--></a><!----></div><!----></div><!--]--></div></section><section class="VPSidebarItem level-1" data-v-b8d55f3b data-v-b8d55f3b><div class="item" role="button" tabindex="0" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><h3 class="text" data-v-b8d55f3b>Configurator Development</h3><!----></div><div class="items" data-v-b8d55f3b><!--[--><section class="VPSidebarItem level-2" data-v-b8d55f3b data-v-b8d55f3b><div class="item" role="button" tabindex="0" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><h4 class="text" data-v-b8d55f3b>QMK API</h4><!----></div><div class="items" data-v-b8d55f3b><!--[--><div class="VPSidebarItem level-3 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/api_development_environment" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>Development Environment</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-3 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/api_development_overview" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>Architecture Overview</p><!--]--></a><!----></div><!----></div><!--]--></div></section><!--]--></div></section><section class="VPSidebarItem level-1" data-v-b8d55f3b data-v-b8d55f3b><div class="item" role="button" tabindex="0" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><h3 class="text" data-v-b8d55f3b>Hardware Platform Development</h3><!----></div><div class="items" data-v-b8d55f3b><!--[--><section class="VPSidebarItem level-2" data-v-b8d55f3b data-v-b8d55f3b><div class="item" role="button" tabindex="0" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><h4 class="text" data-v-b8d55f3b>Arm/ChibiOS</h4><!----></div><div class="items" data-v-b8d55f3b><!--[--><div class="VPSidebarItem level-3 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/platformdev_selecting_arm_mcu" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>Selecting an MCU</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-3 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/platformdev_chibios_earlyinit" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>Early initialization</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-3 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/platformdev_rp2040" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>Raspberry Pi RP2040</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-3 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/platformdev_proton_c" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>Proton C</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-3 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/platformdev_blackpill_f4x1" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>WeAct Blackpill F4x1</p><!--]--></a><!----></div><!----></div><!--]--></div></section><!--]--></div></section><section class="VPSidebarItem level-1" data-v-b8d55f3b data-v-b8d55f3b><div class="item" role="button" tabindex="0" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><h3 class="text" data-v-b8d55f3b>QMK Reference</h3><!----></div><div class="items" data-v-b8d55f3b><!--[--><div class="VPSidebarItem level-2 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/contributing" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>Contributing to QMK</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/config_options" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>Config Options</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/data_driven_config" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>Data Driven Configuration</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/getting_started_make_guide" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>Make Documentation</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/documentation_best_practices" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>Documentation Best Practices</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/documentation_templates" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>Documentation Templates</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/feature_layouts" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>Community Layouts</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/unit_testing" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>Unit Testing</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/ref_functions" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>Useful Functions</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/reference_info_json" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>info.json Format</p><!--]--></a><!----></div><!----></div><!--]--></div></section><section class="VPSidebarItem level-1" data-v-b8d55f3b data-v-b8d55f3b><div class="item" role="button" tabindex="0" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><h3 class="text" data-v-b8d55f3b>For a Deeper Understanding</h3><!----></div><div class="items" data-v-b8d55f3b><!--[--><div class="VPSidebarItem level-2 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/how_keyboards_work" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>How Keyboards Work</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/how_a_matrix_works" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>How a Matrix Works</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/understanding_qmk" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>Understanding QMK</p><!--]--></a><!----></div><!----></div><!--]--></div></section><!--]--></div></section></div><!--]--><!--[--><!--]--></nav></aside><div class="VPContent has-sidebar" id="VPContent" data-v-5d98c3a5 data-v-1428d186><div class="VPDoc has-sidebar has-aside" data-v-1428d186 data-v-39a288b8><!--[--><!--]--><div class="container" data-v-39a288b8><div class="aside" data-v-39a288b8><div class="aside-curtain" data-v-39a288b8></div><div class="aside-container" data-v-39a288b8><div class="aside-content" data-v-39a288b8><div class="VPDocAside" data-v-39a288b8 data-v-3f215769><!--[--><!--]--><!--[--><!--]--><div class="VPDocAsideOutline" role="navigation" data-v-3f215769 data-v-935f8a84><div class="content" data-v-935f8a84><div class="outline-marker" data-v-935f8a84></div><div class="outline-title" role="heading" aria-level="2" data-v-935f8a84>On this page</div><nav aria-labelledby="doc-outline-aria-label" data-v-935f8a84><span class="visually-hidden" id="doc-outline-aria-label" data-v-935f8a84> Table of Contents for current page </span><ul class="VPDocOutlineItem root" data-v-935f8a84 data-v-b933a997><!--[--><!--]--></ul></nav></div></div><!--[--><!--]--><div class="spacer" data-v-3f215769></div><!--[--><!--]--><!----><!--[--><!--]--><!--[--><!--]--></div></div></div></div><div class="content" data-v-39a288b8><div class="content-container" data-v-39a288b8><!--[--><!--]--><main class="main" data-v-39a288b8><div style="position:relative;" class="vp-doc _ChangeLog_20221126" data-v-39a288b8><div><h1 id="qmk-breaking-changes-2022-november-26-changelog" tabindex="-1">QMK Breaking Changes - 2022 November 26 Changelog <a class="header-anchor" href="#qmk-breaking-changes-2022-november-26-changelog" aria-label="Permalink to &quot;QMK Breaking Changes - 2022 November 26 Changelog&quot;"></a></h1><h2 id="notable-features" tabindex="-1">Notable Features <a class="header-anchor" href="#notable-features" aria-label="Permalink to &quot;Notable Features {#notable-features}&quot;"></a></h2><h3 id="autocorrect" tabindex="-1">Autocorrect (<a href="https://github.com/qmk/qmk_firmware/pull/15699" target="_blank" rel="noreferrer">#15699</a>) <a class="header-anchor" href="#autocorrect" aria-label="Permalink to &quot;Autocorrect ([#15699](https://github.com/qmk/qmk_firmware/pull/15699)) {#autocorrect}&quot;"></a></h3><p><em>@getreuer</em> in their infinite wisdom decided that autocorrect was a feature needed by QMK. As is customary, <em>@drashna</em> adapted it to core and got it into a state that everyone else can use it. See <a href="./../features/autocorrect">Feature: Autocorrect</a> for more ifnormation (grin).</p><h2 id="changes-requiring-user-action" tabindex="-1">Changes Requiring User Action <a class="header-anchor" href="#changes-requiring-user-action" aria-label="Permalink to &quot;Changes Requiring User Action {#changes-requiring-user-action}&quot;"></a></h2><h3 id="updated-keyboard-codebases" tabindex="-1">Updated Keyboard Codebases <a class="header-anchor" href="#updated-keyboard-codebases" aria-label="Permalink to &quot;Updated Keyboard Codebases {#updated-keyboard-codebases}&quot;"></a></h3><p>The following keyboards have had their source moved within QMK:</p><table><thead><tr><th>Old Keyboard Name</th><th>New Keyboard Name</th></tr></thead><tbody><tr><td>converter/numeric_keypad_IIe</td><td>converter/numeric_keypad_iie</td></tr><tr><td>durgod/k3x0/k310</td><td>durgod/k310</td></tr><tr><td>durgod/k3x0/k320</td><td>durgod/k320</td></tr><tr><td>emptystring/NQG</td><td>emptystring/nqg</td></tr><tr><td>handwired/hillside/46</td><td>hillside/46</td></tr><tr><td>handwired/hillside/48</td><td>hillside/48</td></tr><tr><td>handwired/hillside/52</td><td>hillside/52</td></tr><tr><td>maple_computing/christmas_tree/V2017</td><td>maple_computing/christmas_tree/v2017</td></tr></tbody></table><h3 id="keycodes-overhaul-user-action" tabindex="-1">Keycodes refactoring <a class="header-anchor" href="#keycodes-overhaul-user-action" aria-label="Permalink to &quot;Keycodes refactoring {#keycodes-overhaul-user-action}&quot;"></a></h3><p>QMK&#39;s keycodes got a very significant overhaul this breaking changes cycle, with the bulk of the work done by <em>@zvecr</em> and <em>@fauxpark</em> -- renaming, reordering, removing has been their focus in this area. In an attempt to standardise interoperation with host applications, keycode values now have strong versioning so that any connected application has confidence that the keys it thinks exist on the board actually match up with what&#39;s compiled in. These strongly-versioned keycode definitions are now published online and will not change, so tools that remap keycodes have a reference to work with. In future versions of QMK, any new or changed keycodes will result in a new version specification. See <a href="./../api_docs#qmk-constants">API docs</a> for more information on the published versions if you&#39;re writing a tool to manage keycodes.</p><p>In most cases user keymaps in the repository have already been updated to reflect the new naming scheme. In some cases user keymaps outside the repository may strike a missing keycode with the old name -- it&#39;s highly likely that the name had already been deprecated for some time, and should have been updated previously.</p><p>See below for the full list of changesets.</p><div class="warning custom-block"><p class="custom-block-title">WARNING</p><p>Keycode aliases have been put in place in most cases to cater for &quot;old names&quot; being mapped to &quot;new names&quot; -- the documentation already reflects all the new naming of keys.</p></div><h3 id="config-refactoring" tabindex="-1">Configuration Item Refactoring <a class="header-anchor" href="#config-refactoring" aria-label="Permalink to &quot;Configuration Item Refactoring {#config-refactoring}&quot;"></a></h3><p>A number of configuration items have been renamed for consistency.</p><p>RGB Matrix configuration:</p><table><thead><tr><th>Old Config</th><th>New Config</th></tr></thead><tbody><tr><td>DRIVER_LED_COUNT</td><td>RGB_MATRIX_LED_COUNT</td></tr><tr><td>RGB_DISABLE_TIMEOUT</td><td>RGB_MATRIX_TIMEOUT</td></tr><tr><td>RGB_MATRIX_STARTUP_HUE</td><td>RGB_MATRIX_DEFAULT_HUE</td></tr><tr><td>RGB_MATRIX_STARTUP_MODE</td><td>RGB_MATRIX_DEFAULT_MODE</td></tr><tr><td>RGB_MATRIX_STARTUP_SAT</td><td>RGB_MATRIX_DEFAULT_SAT</td></tr><tr><td>RGB_MATRIX_STARTUP_SPD</td><td>RGB_MATRIX_DEFAULT_SPD</td></tr><tr><td>RGB_MATRIX_STARTUP_VAL</td><td>RGB_MATRIX_DEFAULT_VAL</td></tr></tbody></table><p>LED Matrix configuration:</p><table><thead><tr><th>Old Config</th><th>New Config</th></tr></thead><tbody><tr><td>DRIVER_LED_COUNT</td><td>LED_MATRIX_LED_COUNT</td></tr><tr><td>LED_DISABLE_TIMEOUT</td><td>LED_MATRIX_TIMEOUT</td></tr><tr><td>LED_MATRIX_STARTUP_MODE</td><td>LED_MATRIX_DEFAULT_MODE</td></tr><tr><td>LED_MATRIX_STARTUP_SPD</td><td>LED_MATRIX_DEFAULT_SPD</td></tr><tr><td>LED_MATRIX_STARTUP_VAL</td><td>LED_MATRIX_DEFAULT_VAL</td></tr></tbody></table><p>Joystick configuration:</p><table><thead><tr><th>Old Config</th><th>New Config</th></tr></thead><tbody><tr><td>JOYSTICK_AXES_COUNT</td><td>JOYSTICK_AXIS_COUNT</td></tr><tr><td>JOYSTICK_AXES_RESOLUTION</td><td>JOYSTICK_AXIS_RESOLUTION</td></tr></tbody></table><h3 id="usb-ids-Refactoring" tabindex="-1">Data-driven USB IDs Refactoring (<a href="https://github.com/qmk/qmk_firmware/pull/18152" target="_blank" rel="noreferrer">#18152</a>) <a class="header-anchor" href="#usb-ids-Refactoring" aria-label="Permalink to &quot;Data-driven USB IDs Refactoring ([#18152](https://github.com/qmk/qmk_firmware/pull/18152)) {#usb-ids-Refactoring}&quot;"></a></h3><p>QMK has decided to deprecate the specification of USB IDs inside <code>config.h</code> in favour of <code>info.json</code>, leaving data-driven as the only method to specify USB information. As per the deprecation schedule put forward last breaking changes cycle, USB information must be specified in <code>info.json</code> instead.</p><p>Previously in <code>config.h</code>:</p><div class="language-c vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">c</span><pre class="shiki shiki-themes github-light github-dark vp-code"><code><span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">#define</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> VENDOR_ID</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> 0x</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">1234</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">#define</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> PRODUCT_ID</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> 0x</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">5678</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">#define</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> DEVICE_VER</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> 0x</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">0001</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">#define</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> MANUFACTURER</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> Me</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">#define</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> PRODUCT</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> MyKeyboard</span></span></code></pre></div><p>Replaced by <code>info.json</code>:</p><div class="language-json vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">json</span><pre class="shiki shiki-themes github-light github-dark vp-code"><code><span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">{</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> &quot;keyboard_name&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&quot;MyKeyboard&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> &quot;manufacturer&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&quot;Me&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> &quot;usb&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: {</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> &quot;vid&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&quot;0x1234&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> &quot;pid&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&quot;0x5678&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> &quot;device_version&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&quot;0.0.1&quot;</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> }</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">}</span></span></code></pre></div><h3 id="led-callback-refactor" tabindex="-1">LED Indicator callback refactoring (<a href="https://github.com/qmk/qmk_firmware/pull/18450" target="_blank" rel="noreferrer">#14864</a>) <a class="header-anchor" href="#led-callback-refactor" aria-label="Permalink to &quot;LED Indicator callback refactoring ([#14864](https://github.com/qmk/qmk_firmware/pull/18450)) {#led-callback-refactor}&quot;"></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&#39;s code.</p><p>The old RGB Matrix keymap code went something like this:</p><div class="language-c vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">c</span><pre class="shiki shiki-themes github-light github-dark vp-code"><code><span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">void</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> rgb_matrix_indicators_user</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">void</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">) {</span></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"> // keymap LED code</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">}</span></span></code></pre></div><p>...but the new RGB Matrix keymap code looks like this:</p><div class="language-c vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">c</span><pre class="shiki shiki-themes github-light github-dark vp-code"><code><span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">bool</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> rgb_matrix_indicators_user</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">void</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">) {</span></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"> // keymap LED code</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> return</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> false</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">;</span></span>
<span class="line"><span style="--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><div class="language-c vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">c</span><pre class="shiki shiki-themes github-light github-dark vp-code"><code><span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">bool</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> rgb_matrix_indicators_kb</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">void</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">) {</span></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"> // Defer to the keymap if they want to override</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> if</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> (</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">!</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">rgb_matrix_indicators_user</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">()) { </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">return</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> false</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">; }</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"> // keyboard LED code</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> return</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> true</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">;</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">}</span></span></code></pre></div><p>The equivalent transformations should be done for LED Matrix boards.</p><h3 id="unicode-mode-renaming" tabindex="-1">Unicode mode refactoring <a class="header-anchor" href="#unicode-mode-renaming" aria-label="Permalink to &quot;Unicode mode refactoring {#unicode-mode-renaming}&quot;"></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 <a href="./../features/unicode#setting-the-input-mode">Feature: Unicode</a> for the new list of values and how to configure them.</p><h2 id="notable-core" tabindex="-1">Notable core changes <a class="header-anchor" href="#notable-core" aria-label="Permalink to &quot;Notable core changes {#notable-core}&quot;"></a></h2><p>This breaking changes cycle, a lot of the core changes are related to cleanup and refactoring -- commonly called &quot;tech debt&quot;.</p><h3 id="keycodes-overhaul-core-changes" tabindex="-1">Keycodes refactoring <a class="header-anchor" href="#keycodes-overhaul-core-changes" aria-label="Permalink to &quot;Keycodes refactoring {#keycodes-overhaul-core-changes}&quot;"></a></h3><p>We aren&#39;t going to list each and every change -- they&#39;re far too numerous -- instead, we&#39;ll just list the related PRs in order to convey just how wide-reaching these changes were:</p><ul><li>Align audio keycode names (<a href="https://github.com/qmk/qmk_firmware/pull/18962" target="_blank" rel="noreferrer">#18962</a>)</li><li>Align dynamic tapping term keycode names (<a href="https://github.com/qmk/qmk_firmware/pull/18963" target="_blank" rel="noreferrer">#18963</a>)</li><li>Align haptic feedback keycode names (<a href="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> (<a href="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> (<a href="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> (<a href="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> (<a href="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> (<a href="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> (<a href="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> (<a href="https://github.com/qmk/qmk_firmware/pull/18807" target="_blank" rel="noreferrer">#18807</a>)</li><li>Initial DD keycode migration (<a href="https://github.com/qmk/qmk_firmware/pull/18643" target="_blank" rel="noreferrer">#18643</a>)</li><li>Macro keycode name refactoring (<a href="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 (<a href="https://github.com/qmk/qmk_firmware/pull/16076" target="_blank" rel="noreferrer">#16076</a>)</li><li>Normalise Auto Shift keycodes (<a href="https://github.com/qmk/qmk_firmware/pull/18892" target="_blank" rel="noreferrer">#18892</a>)</li><li>Normalise Autocorrect keycodes (<a href="https://github.com/qmk/qmk_firmware/pull/18893" target="_blank" rel="noreferrer">#18893</a>)</li><li>Normalise Combo keycodes (<a href="https://github.com/qmk/qmk_firmware/pull/18877" target="_blank" rel="noreferrer">#18877</a>)</li><li>Normalise Dynamic Macro keycodes (<a href="https://github.com/qmk/qmk_firmware/pull/18939" target="_blank" rel="noreferrer">#18939</a>)</li><li>Normalise Joystick and Programmable Button keycodes (<a href="https://github.com/qmk/qmk_firmware/pull/18832" target="_blank" rel="noreferrer">#18832</a>)</li><li>Normalise MIDI keycodes (<a href="https://github.com/qmk/qmk_firmware/pull/18972" target="_blank" rel="noreferrer">#18972</a>)</li><li>Normalise output selection (Bluetooth) keycodes (<a href="https://github.com/qmk/qmk_firmware/pull/19004" target="_blank" rel="noreferrer">#19004</a>)</li><li>Normalise Space Cadet keycodes (<a href="https://github.com/qmk/qmk_firmware/pull/18864" target="_blank" rel="noreferrer">#18864</a>)</li><li>Normalise Unicode keycodes (<a href="https://github.com/qmk/qmk_firmware/pull/18898" target="_blank" rel="noreferrer">#18898</a>)</li><li>Publish constants metadata to API (<a href="https://github.com/qmk/qmk_firmware/pull/19143" target="_blank" rel="noreferrer">#19143</a>)</li><li>Relocate US ANSI shifted keycode aliases (<a href="https://github.com/qmk/qmk_firmware/pull/18634" target="_blank" rel="noreferrer">#18634</a>)</li><li>Remove <code>KC_DELT</code> (<a href="https://github.com/qmk/qmk_firmware/pull/18882" target="_blank" rel="noreferrer">#18882</a>)</li><li>Remove <code>UNICODE_KEY_OSX</code> and <code>UC_OSX</code> (<a href="https://github.com/qmk/qmk_firmware/pull/18290" target="_blank" rel="noreferrer">#18290</a>)</li><li>Remove deprecated RESET keycode alias (<a href="https://github.com/qmk/qmk_firmware/pull/18271" target="_blank" rel="noreferrer">#18271</a>)</li><li>Remove legacy Debug keycode (<a href="https://github.com/qmk/qmk_firmware/pull/18769" target="_blank" rel="noreferrer">#18769</a>)</li><li>Remove legacy EEPROM clear keycodes (<a href="https://github.com/qmk/qmk_firmware/pull/18782" target="_blank" rel="noreferrer">#18782</a>)</li><li>Remove legacy fauxclicky and unicode keycodes (<a href="https://github.com/qmk/qmk_firmware/pull/18800" target="_blank" rel="noreferrer">#18800</a>)</li><li>Remove legacy Grave Escape keycodes (<a href="https://github.com/qmk/qmk_firmware/pull/18787" target="_blank" rel="noreferrer">#18787</a>)</li><li>Remove legacy international keycodes (<a href="https://github.com/qmk/qmk_firmware/pull/18588" target="_blank" rel="noreferrer">#18588</a>)</li><li>Remove legacy keycodes, part 2 (<a href="https://github.com/qmk/qmk_firmware/pull/18660" target="_blank" rel="noreferrer">#18660</a>)</li><li>Remove legacy keycodes, part 3 (<a href="https://github.com/qmk/qmk_firmware/pull/18669" target="_blank" rel="noreferrer">#18669</a>)</li><li>Remove legacy keycodes, part 4 (<a href="https://github.com/qmk/qmk_firmware/pull/18683" target="_blank" rel="noreferrer">#18683</a>)</li><li>Remove legacy keycodes, part 5 (<a href="https://github.com/qmk/qmk_firmware/pull/18710" target="_blank" rel="noreferrer">#18710</a>)</li><li>Remove legacy keycodes, part 6 (<a href="https://github.com/qmk/qmk_firmware/pull/18740" target="_blank" rel="noreferrer">#18740</a>)</li><li>Remove legacy locking caps/num/scroll keycodes (<a href="https://github.com/qmk/qmk_firmware/pull/18601" target="_blank" rel="noreferrer">#18601</a>)</li><li>Remove legacy sendstring keycodes (<a href="https://github.com/qmk/qmk_firmware/pull/18749" target="_blank" rel="noreferrer">#18749</a>)</li><li>Reworked backlight keycodes. (<a href="https://github.com/qmk/qmk_firmware/pull/18961" target="_blank" rel="noreferrer">#18961</a>)</li></ul><h3 id="board-converters" tabindex="-1">Board Converters <a class="header-anchor" href="#board-converters" aria-label="Permalink to &quot;Board Converters {#board-converters}&quot;"></a></h3><p>There was additional work in the space of board converters -- historically QMK allowed for &quot;converting&quot; a Pro Micro build to a QMK Proton-C build. The last few versions of QMK have added support for replacement boards much like the Proton-C, and this quarter was no exception:</p><ul><li>Add Bonsai C4 as a platform board file (<a href="https://github.com/qmk/qmk_firmware/pull/18901" target="_blank" rel="noreferrer">#18901</a>)</li><li>Add converter support to keymap.json (<a href="https://github.com/qmk/qmk_firmware/pull/18776" target="_blank" rel="noreferrer">#18776</a>)</li><li>Add Elite-C to converters (<a href="https://github.com/qmk/qmk_firmware/pull/18309" target="_blank" rel="noreferrer">#18309</a>)</li><li>Add Elite-Pi converter (<a href="https://github.com/qmk/qmk_firmware/pull/18236" target="_blank" rel="noreferrer">#18236</a>)</li><li>Allow QK_MAKE to work with converters (<a href="https://github.com/qmk/qmk_firmware/pull/18637" target="_blank" rel="noreferrer">#18637</a>)</li></ul><p>See <a href="./../feature_converters">Feature: Converters</a> for the full list of board conversions available.</p><h3 id="pointing-and-digitizer" tabindex="-1">Pointing and Digitizer device updates <a class="header-anchor" href="#pointing-and-digitizer" aria-label="Permalink to &quot;Pointing and Digitizer device updates {#pointing-and-digitizer}&quot;"></a></h3><p>Both pointing devices and digitizer got a host of updates this cycle. Inertia, automatic mouse layers, fixes for preventing sleep... you even get more buttons with digitizers!</p><ul><li>add &quot;inertia&quot; mode for mouse keys (<a href="https://github.com/qmk/qmk_firmware/pull/18774" target="_blank" rel="noreferrer">#18774</a>)</li><li>Digitizer feature improvements (<a href="https://github.com/qmk/qmk_firmware/pull/19034" target="_blank" rel="noreferrer">#19034</a>)</li><li>Enabling Pointing Device support in register code functions (<a href="https://github.com/qmk/qmk_firmware/pull/18363" target="_blank" rel="noreferrer">#18363</a>)</li><li>Feature: pointing device automatic mouse layer (<a href="https://github.com/qmk/qmk_firmware/pull/17962" target="_blank" rel="noreferrer">#17962</a>)</li><li>Fix mouse report comparison failing on shared EP (fixes KB preventing sleep) (<a href="https://github.com/qmk/qmk_firmware/pull/18060" target="_blank" rel="noreferrer">#18060</a>)</li><li>Fix mouse use within send_string (<a href="https://github.com/qmk/qmk_firmware/pull/18659" target="_blank" rel="noreferrer">#18659</a>)</li><li>Handle mouse keys more consistently (<a href="https://github.com/qmk/qmk_firmware/pull/18513" target="_blank" rel="noreferrer">#18513</a>)</li><li>Invert pointing device motion pin for cirque touchpads (<a href="https://github.com/qmk/qmk_firmware/pull/18404" target="_blank" rel="noreferrer">#18404</a>)</li><li>Refactor more host code (programmable button &amp; digitizer) (<a href="https://github.com/qmk/qmk_firmware/pull/18565" target="_blank" rel="noreferrer">#18565</a>)</li></ul><h2 id="full-changelist" tabindex="-1">Full changelist <a class="header-anchor" href="#full-changelist" aria-label="Permalink to &quot;Full changelist {#full-changelist}&quot;"></a></h2><p>Core:</p><ul><li>quantum: led: split out led_update_ports() for customization of led behaviour (<a href="https://github.com/qmk/qmk_firmware/pull/14452" target="_blank" rel="noreferrer">#14452</a>)</li><li>Add getreuer&#39;s Autocorrect feature to core (<a href="https://github.com/qmk/qmk_firmware/pull/15699" target="_blank" rel="noreferrer">#15699</a>)</li><li>Move mousekey keycodes into newly freed up keycode block (<a href="https://github.com/qmk/qmk_firmware/pull/16076" target="_blank" rel="noreferrer">#16076</a>)</li><li>Introduce pointing device specific debug messages (<a href="https://github.com/qmk/qmk_firmware/pull/17663" target="_blank" rel="noreferrer">#17663</a>)</li><li>PWM Backlight for RP2040 (<a href="https://github.com/qmk/qmk_firmware/pull/17706" target="_blank" rel="noreferrer">#17706</a>)</li><li>Adjust PWM hardware audio driver for RP2040 (<a href="https://github.com/qmk/qmk_firmware/pull/17723" target="_blank" rel="noreferrer">#17723</a>)</li><li>Prevent tap dance from wiping dynamic macros (<a href="https://github.com/qmk/qmk_firmware/pull/17880" target="_blank" rel="noreferrer">#17880</a>)</li><li>Feature: pointing device automatic mouse layer (<a href="https://github.com/qmk/qmk_firmware/pull/17962" target="_blank" rel="noreferrer">#17962</a>)</li><li>Allow custom timings for WS2812 PIO driver (<a href="https://github.com/qmk/qmk_firmware/pull/18006" target="_blank" rel="noreferrer">#18006</a>)</li><li>Use <code>TAP_CODE_DELAY</code> for encoder mapping by default. Add docs. (<a href="https://github.com/qmk/qmk_firmware/pull/18098" target="_blank" rel="noreferrer">#18098</a>)</li><li>Move Oneshot mod callbacks to after mods are set (<a href="https://github.com/qmk/qmk_firmware/pull/18101" target="_blank" rel="noreferrer">#18101</a>)</li><li>mcp23018: add return status to init (<a href="https://github.com/qmk/qmk_firmware/pull/18178" target="_blank" rel="noreferrer">#18178</a>)</li><li>Switch over MANUFACTURER and PRODUCT to string literals (<a href="https://github.com/qmk/qmk_firmware/pull/18183" target="_blank" rel="noreferrer">#18183</a>)</li><li>Remove deprecated USBasp and bootloadHID bootloader types (<a href="https://github.com/qmk/qmk_firmware/pull/18195" target="_blank" rel="noreferrer">#18195</a>)</li><li>Chromeos keycodes (<a href="https://github.com/qmk/qmk_firmware/pull/18212" target="_blank" rel="noreferrer">#18212</a>)</li><li>VIA V3 - The Custom UI Update (<a href="https://github.com/qmk/qmk_firmware/pull/18222" target="_blank" rel="noreferrer">#18222</a>)</li><li>Move bootloader.mk to platforms (<a href="https://github.com/qmk/qmk_firmware/pull/18228" target="_blank" rel="noreferrer">#18228</a>)</li><li>Simplify extrakeys sending at the host driver level (<a href="https://github.com/qmk/qmk_firmware/pull/18230" target="_blank" rel="noreferrer">#18230</a>)</li><li>Add unicode mode change callbacks (<a href="https://github.com/qmk/qmk_firmware/pull/18235" target="_blank" rel="noreferrer">#18235</a>)</li><li>Add Elite-Pi converter (<a href="https://github.com/qmk/qmk_firmware/pull/18236" target="_blank" rel="noreferrer">#18236</a>)</li><li>Better handle EEPROM reset keycode (<a href="https://github.com/qmk/qmk_firmware/pull/18244" target="_blank" rel="noreferrer">#18244</a>)</li><li>Work around WinCompose issue for U+Axxx or U+Exxx (<a href="https://github.com/qmk/qmk_firmware/pull/18260" target="_blank" rel="noreferrer">#18260</a>)</li><li>Remove deprecated RESET keycode alias (<a href="https://github.com/qmk/qmk_firmware/pull/18271" target="_blank" rel="noreferrer">#18271</a>)</li><li>Move Bluetooth-related function calls up to host/keyboard level (<a href="https://github.com/qmk/qmk_firmware/pull/18274" target="_blank" rel="noreferrer">#18274</a>)</li><li>Added analog support for WB32 MCU. (<a href="https://github.com/qmk/qmk_firmware/pull/18289" target="_blank" rel="noreferrer">#18289</a>)</li><li>Remove <code>UNICODE_KEY_OSX</code> and <code>UC_OSX</code> (<a href="https://github.com/qmk/qmk_firmware/pull/18290" target="_blank" rel="noreferrer">#18290</a>)</li><li>Add Elite-C to converters (<a href="https://github.com/qmk/qmk_firmware/pull/18309" target="_blank" rel="noreferrer">#18309</a>)</li><li>RN42 driver: small cleanups (<a href="https://github.com/qmk/qmk_firmware/pull/18310" target="_blank" rel="noreferrer">#18310</a>)</li><li>Reboot wb32 devices after flashing (<a href="https://github.com/qmk/qmk_firmware/pull/18323" target="_blank" rel="noreferrer">#18323</a>)</li><li>Refactor Unicode feature (<a href="https://github.com/qmk/qmk_firmware/pull/18333" target="_blank" rel="noreferrer">#18333</a>)</li><li>Move fake EE_HANDS from EEPROM init. (<a href="https://github.com/qmk/qmk_firmware/pull/18352" target="_blank" rel="noreferrer">#18352</a>)</li><li>Enabling Pointing Device support in register code functions (<a href="https://github.com/qmk/qmk_firmware/pull/18363" target="_blank" rel="noreferrer">#18363</a>)</li><li>Start Bluetooth API (<a href="https://github.com/qmk/qmk_firmware/pull/18366" target="_blank" rel="noreferrer">#18366</a>)</li><li>Add UART support for Kinetis boards (<a href="https://github.com/qmk/qmk_firmware/pull/18370" target="_blank" rel="noreferrer">#18370</a>)</li><li>[QP] Add RGB565 surface. Docs clarification, cleanup, tabsification, and reordering. (<a href="https://github.com/qmk/qmk_firmware/pull/18396" target="_blank" rel="noreferrer">#18396</a>)</li><li>Change <code>DRIVER_LED_COUNT</code> to <code>{LED,RGB}_MATRIX_LED_COUNT</code> (<a href="https://github.com/qmk/qmk_firmware/pull/18399" target="_blank" rel="noreferrer">#18399</a>)</li><li>Invert pointing device motion pin for cirque touchpads (<a href="https://github.com/qmk/qmk_firmware/pull/18404" target="_blank" rel="noreferrer">#18404</a>)</li><li>Change <code>{LED,RGB}_DISABLE_TIMEOUT</code> to <code>{LED,RGB}_MATRIX_TIMEOUT</code> (<a href="https://github.com/qmk/qmk_firmware/pull/18415" target="_blank" rel="noreferrer">#18415</a>)</li><li>rewrite locking in split transaction handlers (<a href="https://github.com/qmk/qmk_firmware/pull/18417" target="_blank" rel="noreferrer">#18417</a>)</li><li>remove busy waiting from rgblight functions (<a href="https://github.com/qmk/qmk_firmware/pull/18418" target="_blank" rel="noreferrer">#18418</a>)</li><li>Serial-protocol: always clear receive queue on main half of split keyboard (<a href="https://github.com/qmk/qmk_firmware/pull/18419" target="_blank" rel="noreferrer">#18419</a>)</li><li>Stabilize RP2040 Half-duplex PIO split comms take 2 (<a href="https://github.com/qmk/qmk_firmware/pull/18421" target="_blank" rel="noreferrer">#18421</a>)</li><li>Copy RP2040 vector table to RAM on startup (<a href="https://github.com/qmk/qmk_firmware/pull/18424" target="_blank" rel="noreferrer">#18424</a>)</li><li>Further refactoring of joystick feature (<a href="https://github.com/qmk/qmk_firmware/pull/18437" target="_blank" rel="noreferrer">#18437</a>)</li><li>Start moving towards introspection-based data retrieval (<a href="https://github.com/qmk/qmk_firmware/pull/18441" target="_blank" rel="noreferrer">#18441</a>)</li><li>RP2040: use built-in integer hardware divider and optimized i64 multiplication (<a href="https://github.com/qmk/qmk_firmware/pull/18464" target="_blank" rel="noreferrer">#18464</a>)</li><li>Only trigger encoder callbacks on primary side (<a href="https://github.com/qmk/qmk_firmware/pull/18467" target="_blank" rel="noreferrer">#18467</a>)</li><li>Handle mouse keys more consistently (<a href="https://github.com/qmk/qmk_firmware/pull/18513" target="_blank" rel="noreferrer">#18513</a>)</li><li>Gentoo install script — build newlib with <code>nano</code> USE flag (<a href="https://github.com/qmk/qmk_firmware/pull/18527" target="_blank" rel="noreferrer">#18527</a>)</li><li>Small un/register_code() cleanups (<a href="https://github.com/qmk/qmk_firmware/pull/18544" target="_blank" rel="noreferrer">#18544</a>)</li><li>Refactor more host code (programmable button &amp; digitizer) (<a href="https://github.com/qmk/qmk_firmware/pull/18565" target="_blank" rel="noreferrer">#18565</a>)</li><li>Don&#39;t clear keys on layer change unless STRICT_LAYER_RELEASE is enabled (<a href="https://github.com/qmk/qmk_firmware/pull/18577" target="_blank" rel="noreferrer">#18577</a>)</li><li>Remove legacy international keycodes (<a href="https://github.com/qmk/qmk_firmware/pull/18588" target="_blank" rel="noreferrer">#18588</a>)</li><li>onekey: Enable ADC for STM32F072 Discovery (<a href="https://github.com/qmk/qmk_firmware/pull/18592" target="_blank" rel="noreferrer">#18592</a>)</li><li>Implement split comms watchdog (<a href="https://github.com/qmk/qmk_firmware/pull/18599" target="_blank" rel="noreferrer">#18599</a>)</li><li>Remove legacy locking caps/num/scroll keycodes (<a href="https://github.com/qmk/qmk_firmware/pull/18601" target="_blank" rel="noreferrer">#18601</a>)</li><li>Use <code>get_u16_str</code> instead of <code>snprintf</code> in <code>autoshift_timer_report</code> (<a href="https://github.com/qmk/qmk_firmware/pull/18606" target="_blank" rel="noreferrer">#18606</a>)</li><li>Refactor <code>send_extra</code> (<a href="https://github.com/qmk/qmk_firmware/pull/18615" target="_blank" rel="noreferrer">#18615</a>)</li><li>LUFA: Consolidate report sending code (<a href="https://github.com/qmk/qmk_firmware/pull/18629" target="_blank" rel="noreferrer">#18629</a>)</li><li>Relocate US ANSI shifted keycode aliases (<a href="https://github.com/qmk/qmk_firmware/pull/18634" target="_blank" rel="noreferrer">#18634</a>)</li><li>Allow QK_MAKE to work with converters (<a href="https://github.com/qmk/qmk_firmware/pull/18637" target="_blank" rel="noreferrer">#18637</a>)</li><li>Programmable Button API refactor and improve docs (<a href="https://github.com/qmk/qmk_firmware/pull/18641" target="_blank" rel="noreferrer">#18641</a>)</li><li>Initial DD keycode migration (<a href="https://github.com/qmk/qmk_firmware/pull/18643" target="_blank" rel="noreferrer">#18643</a>)</li><li>Remove legacy keycodes, part 2 (<a href="https://github.com/qmk/qmk_firmware/pull/18660" target="_blank" rel="noreferrer">#18660</a>)</li><li>Remove legacy keycodes, part 3 (<a href="https://github.com/qmk/qmk_firmware/pull/18669" target="_blank" rel="noreferrer">#18669</a>)</li><li>Remove legacy keycodes, part 4 (<a href="https://github.com/qmk/qmk_firmware/pull/18683" target="_blank" rel="noreferrer">#18683</a>)</li><li>Revert &quot;mcp23018: add return status to init&quot; (<a href="https://github.com/qmk/qmk_firmware/pull/18709" target="_blank" rel="noreferrer">#18709</a>)</li><li>Remove legacy keycodes, part 5 (<a href="https://github.com/qmk/qmk_firmware/pull/18710" target="_blank" rel="noreferrer">#18710</a>)</li><li>Make QP driver init functions weak. (<a href="https://github.com/qmk/qmk_firmware/pull/18717" target="_blank" rel="noreferrer">#18717</a>)</li><li>Add unit tests for HOLD_ON_OTHER_KEY_PRESS (<a href="https://github.com/qmk/qmk_firmware/pull/18721" target="_blank" rel="noreferrer">#18721</a>)</li><li>Remove legacy keycodes, part 6 (<a href="https://github.com/qmk/qmk_firmware/pull/18740" target="_blank" rel="noreferrer">#18740</a>)</li><li>Remove legacy sendstring keycodes (<a href="https://github.com/qmk/qmk_firmware/pull/18749" target="_blank" rel="noreferrer">#18749</a>)</li><li>4 Driver support for IS31FL3737 (<a href="https://github.com/qmk/qmk_firmware/pull/18750" target="_blank" rel="noreferrer">#18750</a>)</li><li>Remove quantum/audio from global VPATH (<a href="https://github.com/qmk/qmk_firmware/pull/18753" target="_blank" rel="noreferrer">#18753</a>)</li><li>Widen the ARM Cortex-M family support. Allow USB peripheral change. (<a href="https://github.com/qmk/qmk_firmware/pull/18767" target="_blank" rel="noreferrer">#18767</a>)</li><li>Remove legacy Debug keycode (<a href="https://github.com/qmk/qmk_firmware/pull/18769" target="_blank" rel="noreferrer">#18769</a>)</li><li>add &quot;inertia&quot; mode for mouse keys (<a href="https://github.com/qmk/qmk_firmware/pull/18774" target="_blank" rel="noreferrer">#18774</a>)</li><li>Remove legacy EEPROM clear keycodes (<a href="https://github.com/qmk/qmk_firmware/pull/18782" target="_blank" rel="noreferrer">#18782</a>)</li><li>Remove legacy Grave Escape keycodes (<a href="https://github.com/qmk/qmk_firmware/pull/18787" target="_blank" rel="noreferrer">#18787</a>)</li><li>Deprecate <code>KC_LEAD</code> for <code>QK_LEAD</code> (<a href="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> (<a href="https://github.com/qmk/qmk_firmware/pull/18796" target="_blank" rel="noreferrer">#18796</a>)</li><li>Remove legacy fauxclicky and unicode keycodes (<a href="https://github.com/qmk/qmk_firmware/pull/18800" target="_blank" rel="noreferrer">#18800</a>)</li><li>Generalise CTPC logic from common_features (<a href="https://github.com/qmk/qmk_firmware/pull/18803" target="_blank" rel="noreferrer">#18803</a>)</li><li>Deprecate <code>VLK_TOG</code> for <code>VK_TOGG</code> (<a href="https://github.com/qmk/qmk_firmware/pull/18807" target="_blank" rel="noreferrer">#18807</a>)</li><li>ChibiOS USB: Add a dummy IN callback to work around LLD bugs (<a href="https://github.com/qmk/qmk_firmware/pull/18811" target="_blank" rel="noreferrer">#18811</a>)</li><li>Normalise Joystick and Programmable Button keycodes (<a href="https://github.com/qmk/qmk_firmware/pull/18832" target="_blank" rel="noreferrer">#18832</a>)</li><li>Deprecate <code>CAPS_WORD</code>/<code>CAPSWRD</code> for <code>CW_TOGG</code> (<a href="https://github.com/qmk/qmk_firmware/pull/18834" target="_blank" rel="noreferrer">#18834</a>)</li><li>added BS_TOGG so BS_SWAP and BS_NORM can be on a single key (<a href="https://github.com/qmk/qmk_firmware/pull/18837" target="_blank" rel="noreferrer">#18837</a>)</li><li>Remove some assumptions on sequential keycode ranges (<a href="https://github.com/qmk/qmk_firmware/pull/18838" target="_blank" rel="noreferrer">#18838</a>)</li><li>Deprecate <code>KEY_OVERRIDE_*</code> keycodes for <code>KO_*</code> (<a href="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> (<a href="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> (<a href="https://github.com/qmk/qmk_firmware/pull/18847" target="_blank" rel="noreferrer">#18847</a>)</li><li>Normalise Space Cadet keycodes (<a href="https://github.com/qmk/qmk_firmware/pull/18864" target="_blank" rel="noreferrer">#18864</a>)</li><li>Allow overriding of dynamic keymap start address. (<a href="https://github.com/qmk/qmk_firmware/pull/18867" target="_blank" rel="noreferrer">#18867</a>)</li><li>Formalise keyboard- and user-specific EEPROM blocks (<a href="https://github.com/qmk/qmk_firmware/pull/18874" target="_blank" rel="noreferrer">#18874</a>)</li><li>Normalise Combo keycodes (<a href="https://github.com/qmk/qmk_firmware/pull/18877" target="_blank" rel="noreferrer">#18877</a>)</li><li>Remove rgblight_list.h (<a href="https://github.com/qmk/qmk_firmware/pull/18878" target="_blank" rel="noreferrer">#18878</a>)</li><li>Remove <code>KC_DELT</code> (<a href="https://github.com/qmk/qmk_firmware/pull/18882" target="_blank" rel="noreferrer">#18882</a>)</li><li>Simplify Keymap Config EEPROM (<a href="https://github.com/qmk/qmk_firmware/pull/18886" target="_blank" rel="noreferrer">#18886</a>)</li><li>Normalise Auto Shift keycodes (<a href="https://github.com/qmk/qmk_firmware/pull/18892" target="_blank" rel="noreferrer">#18892</a>)</li><li>Normalise Autocorrect keycodes (<a href="https://github.com/qmk/qmk_firmware/pull/18893" target="_blank" rel="noreferrer">#18893</a>)</li><li>Normalise Unicode keycodes (<a href="https://github.com/qmk/qmk_firmware/pull/18898" target="_blank" rel="noreferrer">#18898</a>)</li><li>Add Bonsai C4 as a platform board file (<a href="https://github.com/qmk/qmk_firmware/pull/18901" target="_blank" rel="noreferrer">#18901</a>)</li><li>Normalise Dynamic Macro keycodes (<a href="https://github.com/qmk/qmk_firmware/pull/18939" target="_blank" rel="noreferrer">#18939</a>)</li><li>Reduce includes for sequencer header (<a href="https://github.com/qmk/qmk_firmware/pull/18946" target="_blank" rel="noreferrer">#18946</a>)</li><li>Reduce includes for crc header (<a href="https://github.com/qmk/qmk_firmware/pull/18947" target="_blank" rel="noreferrer">#18947</a>)</li><li>Reduce includes for caps_word header (<a href="https://github.com/qmk/qmk_firmware/pull/18948" target="_blank" rel="noreferrer">#18948</a>)</li><li>Reduce includes for wpm header (<a href="https://github.com/qmk/qmk_firmware/pull/18949" target="_blank" rel="noreferrer">#18949</a>)</li><li>Reduce includes for dip_switch header (<a href="https://github.com/qmk/qmk_firmware/pull/18951" target="_blank" rel="noreferrer">#18951</a>)</li><li>Reduce includes for send_string header (<a href="https://github.com/qmk/qmk_firmware/pull/18952" target="_blank" rel="noreferrer">#18952</a>)</li><li>Macro keycode name refactoring (<a href="https://github.com/qmk/qmk_firmware/pull/18958" target="_blank" rel="noreferrer">#18958</a>)</li><li>Remove thermal printer. (<a href="https://github.com/qmk/qmk_firmware/pull/18959" target="_blank" rel="noreferrer">#18959</a>)</li><li>Reworked backlight keycodes. (<a href="https://github.com/qmk/qmk_firmware/pull/18961" target="_blank" rel="noreferrer">#18961</a>)</li><li>Align audio keycode names (<a href="https://github.com/qmk/qmk_firmware/pull/18962" target="_blank" rel="noreferrer">#18962</a>)</li><li>Align dynamic tapping term keycode names (<a href="https://github.com/qmk/qmk_firmware/pull/18963" target="_blank" rel="noreferrer">#18963</a>)</li><li>Align haptic feedback keycode names (<a href="https://github.com/qmk/qmk_firmware/pull/18964" target="_blank" rel="noreferrer">#18964</a>)</li><li>NVRAM refactor, phase 1. (<a href="https://github.com/qmk/qmk_firmware/pull/18969" target="_blank" rel="noreferrer">#18969</a>)</li><li>Normalise MIDI keycodes (<a href="https://github.com/qmk/qmk_firmware/pull/18972" target="_blank" rel="noreferrer">#18972</a>)</li><li>Normalise output selection (Bluetooth) keycodes (<a href="https://github.com/qmk/qmk_firmware/pull/19004" target="_blank" rel="noreferrer">#19004</a>)</li><li>Move EFL wear-leveling driver to be default for F1, F3, F4, L4, G4, WB32, GD32V. (<a href="https://github.com/qmk/qmk_firmware/pull/19020" target="_blank" rel="noreferrer">#19020</a>)</li><li>Digitizer feature improvements (<a href="https://github.com/qmk/qmk_firmware/pull/19034" target="_blank" rel="noreferrer">#19034</a>)</li><li>Joystick feature improvements (<a href="https://github.com/qmk/qmk_firmware/pull/19052" target="_blank" rel="noreferrer">#19052</a>)</li><li>Add default limit to OLED dirty processing (<a href="https://github.com/qmk/qmk_firmware/pull/19068" target="_blank" rel="noreferrer">#19068</a>)</li><li>Change <code>RGB_MATRIX_STARTUP_*</code> defines to <code>RGB_MATRIX_DEFAULT_*</code> (<a href="https://github.com/qmk/qmk_firmware/pull/19079" target="_blank" rel="noreferrer">#19079</a>)</li><li>Change <code>LED_MATRIX_STARTUP_*</code> defines to <code>LED_MATRIX_DEFAULT_*</code> (<a href="https://github.com/qmk/qmk_firmware/pull/19080" target="_blank" rel="noreferrer">#19080</a>)</li><li>Extend eeconfig kb/user datablock API (<a href="https://github.com/qmk/qmk_firmware/pull/19094" target="_blank" rel="noreferrer">#19094</a>)</li><li>Remove .noci functionality (<a href="https://github.com/qmk/qmk_firmware/pull/19122" target="_blank" rel="noreferrer">#19122</a>)</li></ul><p>CLI:</p><ul><li>Reject json with duplicate keys (<a href="https://github.com/qmk/qmk_firmware/pull/18108" target="_blank" rel="noreferrer">#18108</a>)</li><li>Add pointing device support to data driven config (<a href="https://github.com/qmk/qmk_firmware/pull/18215" target="_blank" rel="noreferrer">#18215</a>)</li><li>Disconnect <code>usb.device_ver</code> (<a href="https://github.com/qmk/qmk_firmware/pull/18259" target="_blank" rel="noreferrer">#18259</a>)</li><li>Normalise info_config.h define generation (<a href="https://github.com/qmk/qmk_firmware/pull/18439" target="_blank" rel="noreferrer">#18439</a>)</li><li>Generate DD RGBLight/LED/RGB Matrix animation defines (<a href="https://github.com/qmk/qmk_firmware/pull/18459" target="_blank" rel="noreferrer">#18459</a>)</li><li>Add converter support to keymap.json (<a href="https://github.com/qmk/qmk_firmware/pull/18776" target="_blank" rel="noreferrer">#18776</a>)</li><li>Ensure consistent clean behaviour (<a href="https://github.com/qmk/qmk_firmware/pull/18781" target="_blank" rel="noreferrer">#18781</a>)</li><li>Format DD mappings and schemas (<a href="https://github.com/qmk/qmk_firmware/pull/18924" target="_blank" rel="noreferrer">#18924</a>)</li><li>Publish hjson files as json (<a href="https://github.com/qmk/qmk_firmware/pull/18996" target="_blank" rel="noreferrer">#18996</a>)</li><li>Add raw output option for QGF/QFF files. (<a href="https://github.com/qmk/qmk_firmware/pull/18998" target="_blank" rel="noreferrer">#18998</a>)</li><li>Improve LED config parsing error messages (<a href="https://github.com/qmk/qmk_firmware/pull/19007" target="_blank" rel="noreferrer">#19007</a>)</li><li>Revert &quot;Add pointing device support to data driven config (#18215)&quot; (<a href="https://github.com/qmk/qmk_firmware/pull/19063" target="_blank" rel="noreferrer">#19063</a>)</li><li>Additional DD backlight config (<a href="https://github.com/qmk/qmk_firmware/pull/19124" target="_blank" rel="noreferrer">#19124</a>)</li><li>Publish constants metadata to API (<a href="https://github.com/qmk/qmk_firmware/pull/19143" target="_blank" rel="noreferrer">#19143</a>)</li></ul><p>Submodule updates:</p><ul><li>Use a macro to compute the size of arrays at compile time (<a href="https://github.com/qmk/qmk_firmware/pull/18044" target="_blank" rel="noreferrer">#18044</a>)</li><li>Update pico-sdk to version 1.4.0 (<a href="https://github.com/qmk/qmk_firmware/pull/18423" target="_blank" rel="noreferrer">#18423</a>)</li></ul><p>Keyboards:</p><ul><li>Rework PS/2 driver selection (<a href="https://github.com/qmk/qmk_firmware/pull/17892" target="_blank" rel="noreferrer">#17892</a>)</li><li>Durgod K310/K320 Refactor (<a href="https://github.com/qmk/qmk_firmware/pull/18224" target="_blank" rel="noreferrer">#18224</a>)</li><li>Optimise LAYOUT macro generation (<a href="https://github.com/qmk/qmk_firmware/pull/18262" target="_blank" rel="noreferrer">#18262</a>)</li><li>Rename keyboards with uppercase letters (<a href="https://github.com/qmk/qmk_firmware/pull/18268" target="_blank" rel="noreferrer">#18268</a>)</li><li>Remove legacy USE_SERIAL define (<a href="https://github.com/qmk/qmk_firmware/pull/18292" target="_blank" rel="noreferrer">#18292</a>)</li><li>Resolve conflict merging master to develop (<a href="https://github.com/qmk/qmk_firmware/pull/18297" target="_blank" rel="noreferrer">#18297</a>)</li><li>Remove legacy define USE_SERIAL_PD2 (<a href="https://github.com/qmk/qmk_firmware/pull/18298" target="_blank" rel="noreferrer">#18298</a>)</li><li>Remove legacy define SERIAL_USE_MULTI_TRANSACTION (<a href="https://github.com/qmk/qmk_firmware/pull/18299" target="_blank" rel="noreferrer">#18299</a>)</li><li>Adapt spidey3 userspace to recent unicode refactoring (<a href="https://github.com/qmk/qmk_firmware/pull/18345" target="_blank" rel="noreferrer">#18345</a>)</li><li>Remove remaining use of terminal keys and related comment labels (<a href="https://github.com/qmk/qmk_firmware/pull/18402" target="_blank" rel="noreferrer">#18402</a>)</li><li>Add DD mapping for LED/RGB Matrix center (<a href="https://github.com/qmk/qmk_firmware/pull/18432" target="_blank" rel="noreferrer">#18432</a>)</li><li>develop updates for Drashna Keymaps (<a href="https://github.com/qmk/qmk_firmware/pull/18472" target="_blank" rel="noreferrer">#18472</a>)</li><li>Remove lingering <code>DRIVER_LED_TOTAL</code> references (<a href="https://github.com/qmk/qmk_firmware/pull/18475" target="_blank" rel="noreferrer">#18475</a>)</li><li>Remove lingering <code>DRIVER_LED_TOTAL</code> references (<a href="https://github.com/qmk/qmk_firmware/pull/18594" target="_blank" rel="noreferrer">#18594</a>)</li><li>update andrebrait GMMK Pro keymap (<a href="https://github.com/qmk/qmk_firmware/pull/18608" target="_blank" rel="noreferrer">#18608</a>)</li><li>AnnePro2: Adjust RGB flushing (<a href="https://github.com/qmk/qmk_firmware/pull/18640" target="_blank" rel="noreferrer">#18640</a>)</li><li>Remove lingering <code>DRIVER_LED_TOTAL</code> references (<a href="https://github.com/qmk/qmk_firmware/pull/18662" target="_blank" rel="noreferrer">#18662</a>)</li><li>Update snowe&#39;s KC_RESET to use QK_BOOT (<a href="https://github.com/qmk/qmk_firmware/pull/18667" target="_blank" rel="noreferrer">#18667</a>)</li><li>Remove some .gitignore files (<a href="https://github.com/qmk/qmk_firmware/pull/18689" target="_blank" rel="noreferrer">#18689</a>)</li><li>Remove keymaps that still reference legacy macros (<a href="https://github.com/qmk/qmk_firmware/pull/18690" target="_blank" rel="noreferrer">#18690</a>)</li><li>Remove keymaps that still reference legacy macros (<a href="https://github.com/qmk/qmk_firmware/pull/18693" target="_blank" rel="noreferrer">#18693</a>)</li><li>Remove stale userspace/keymaps (<a href="https://github.com/qmk/qmk_firmware/pull/18700" target="_blank" rel="noreferrer">#18700</a>)</li><li>Update keyboards readme (<a href="https://github.com/qmk/qmk_firmware/pull/18714" target="_blank" rel="noreferrer">#18714</a>)</li><li>Allow changes to the moonlander default music map (<a href="https://github.com/qmk/qmk_firmware/pull/18715" target="_blank" rel="noreferrer">#18715</a>)</li><li>led_update_kb -&gt; led_update_ports where appropriate (<a href="https://github.com/qmk/qmk_firmware/pull/18716" target="_blank" rel="noreferrer">#18716</a>)</li><li>Update converter/usb_usb user keymaps to use LAYOUT_fullsize (<a href="https://github.com/qmk/qmk_firmware/pull/18720" target="_blank" rel="noreferrer">#18720</a>)</li><li>Remove RGBLIGHT_ANIMATION and clean up effect defines for G-K (<a href="https://github.com/qmk/qmk_firmware/pull/18726" target="_blank" rel="noreferrer">#18726</a>)</li><li>Remove RGBLIGHT_ANIMATION and clean up effect defines for L-Q (<a href="https://github.com/qmk/qmk_firmware/pull/18727" target="_blank" rel="noreferrer">#18727</a>)</li><li>Remove RGBLIGHT_ANIMATION and clean up effect defines for R-Z (<a href="https://github.com/qmk/qmk_firmware/pull/18728" target="_blank" rel="noreferrer">#18728</a>)</li><li>Remove RGBLIGHT_ANIMATION and clean up effect defines for layouts+users (<a href="https://github.com/qmk/qmk_firmware/pull/18729" target="_blank" rel="noreferrer">#18729</a>)</li><li>Update info.json configs to explicitly list RGBLIGHT animations (<a href="https://github.com/qmk/qmk_firmware/pull/18730" target="_blank" rel="noreferrer">#18730</a>)</li><li>A little personal cleanup after #18726 and #18729 (<a href="https://github.com/qmk/qmk_firmware/pull/18734" target="_blank" rel="noreferrer">#18734</a>)</li><li>Move Hillside out of handwired (<a href="https://github.com/qmk/qmk_firmware/pull/18751" target="_blank" rel="noreferrer">#18751</a>)</li><li>wilba_tech: allow keymaps to override backlight_effect_indicators() (<a href="https://github.com/qmk/qmk_firmware/pull/18791" target="_blank" rel="noreferrer">#18791</a>)</li><li>Remove broken userspace and keymaps (<a href="https://github.com/qmk/qmk_firmware/pull/18806" target="_blank" rel="noreferrer">#18806</a>)</li><li>Add support for KBDfans Odin V2 (<a href="https://github.com/qmk/qmk_firmware/pull/18910" target="_blank" rel="noreferrer">#18910</a>)</li><li>Remove more <code>UNUSED_PINS</code> defines (<a href="https://github.com/qmk/qmk_firmware/pull/18940" target="_blank" rel="noreferrer">#18940</a>)</li><li>Remove hardcoded VIA keycode range (<a href="https://github.com/qmk/qmk_firmware/pull/18956" target="_blank" rel="noreferrer">#18956</a>)</li><li>KC_GESC -&gt; QK_GESC, better alignment for OCD (<a href="https://github.com/qmk/qmk_firmware/pull/19018" target="_blank" rel="noreferrer">#19018</a>)</li><li>Add missing <code>manufacturer</code> fields (<a href="https://github.com/qmk/qmk_firmware/pull/19065" target="_blank" rel="noreferrer">#19065</a>)</li><li>Update use of legacy keycodes (<a href="https://github.com/qmk/qmk_firmware/pull/19120" target="_blank" rel="noreferrer">#19120</a>)</li></ul><p>Keyboard fixes:</p><ul><li>[GMMK Pro] Fix unintentional taps to the volume keys when using the encoder (<a href="https://github.com/qmk/qmk_firmware/pull/17129" target="_blank" rel="noreferrer">#17129</a>)</li><li>Luna keyboard pet OLED timeout fix (<a href="https://github.com/qmk/qmk_firmware/pull/17189" target="_blank" rel="noreferrer">#17189</a>)</li><li>Handle escaping of manufacturer/product strings (<a href="https://github.com/qmk/qmk_firmware/pull/18194" target="_blank" rel="noreferrer">#18194</a>)</li><li>kegen/gboy: add manufacturer string (<a href="https://github.com/qmk/qmk_firmware/pull/18196" target="_blank" rel="noreferrer">#18196</a>)</li><li>Ensure all keyboards have a bootloader set (<a href="https://github.com/qmk/qmk_firmware/pull/18234" target="_blank" rel="noreferrer">#18234</a>)</li><li>Reverse keymap search order (<a href="https://github.com/qmk/qmk_firmware/pull/18449" target="_blank" rel="noreferrer">#18449</a>)</li><li>Fixup cradio bootloader/processor (<a href="https://github.com/qmk/qmk_firmware/pull/18477" target="_blank" rel="noreferrer">#18477</a>)</li><li>onekey: enable ADC for Bluepill and Blackpill (<a href="https://github.com/qmk/qmk_firmware/pull/18545" target="_blank" rel="noreferrer">#18545</a>)</li><li>Fixup controllerworks/mini42 (<a href="https://github.com/qmk/qmk_firmware/pull/18553" target="_blank" rel="noreferrer">#18553</a>)</li><li>RESET -&gt; QK_BOOT user keymaps (<a href="https://github.com/qmk/qmk_firmware/pull/18560" target="_blank" rel="noreferrer">#18560</a>)</li><li>Fixup linworks/fave84h (<a href="https://github.com/qmk/qmk_firmware/pull/18593" target="_blank" rel="noreferrer">#18593</a>)</li><li>Fix compilation of 1upkeyboards on develop (<a href="https://github.com/qmk/qmk_firmware/pull/18618" target="_blank" rel="noreferrer">#18618</a>)</li><li>Various keyboard fixes (<a href="https://github.com/qmk/qmk_firmware/pull/18649" target="_blank" rel="noreferrer">#18649</a>)</li><li>Fixup twig50 (<a href="https://github.com/qmk/qmk_firmware/pull/18651" target="_blank" rel="noreferrer">#18651</a>)</li><li>Fixup handwired/jopr — remove deprecated keycode (<a href="https://github.com/qmk/qmk_firmware/pull/18668" target="_blank" rel="noreferrer">#18668</a>)</li><li>Fixup keychron/q3 (<a href="https://github.com/qmk/qmk_firmware/pull/18687" target="_blank" rel="noreferrer">#18687</a>)</li><li>Fixup dumbpad/v3x (<a href="https://github.com/qmk/qmk_firmware/pull/18692" target="_blank" rel="noreferrer">#18692</a>)</li><li>Fix aurora/sweep (<a href="https://github.com/qmk/qmk_firmware/pull/18701" target="_blank" rel="noreferrer">#18701</a>)</li><li>Fix build failures uncovered by #18753 (<a href="https://github.com/qmk/qmk_firmware/pull/18789" target="_blank" rel="noreferrer">#18789</a>)</li><li>Fixup emptystring/nqg (<a href="https://github.com/qmk/qmk_firmware/pull/18804" target="_blank" rel="noreferrer">#18804</a>)</li><li>Fixup controllerwords/mini36 (<a href="https://github.com/qmk/qmk_firmware/pull/18840" target="_blank" rel="noreferrer">#18840</a>)</li><li>Fixup 1upkeyboards/pi60_rgb (<a href="https://github.com/qmk/qmk_firmware/pull/18858" target="_blank" rel="noreferrer">#18858</a>)</li><li>Fixup doio/kb16 (<a href="https://github.com/qmk/qmk_firmware/pull/18859" target="_blank" rel="noreferrer">#18859</a>)</li><li>Fixup keebio/sinc/rev3 (<a href="https://github.com/qmk/qmk_firmware/pull/18866" target="_blank" rel="noreferrer">#18866</a>)</li><li>elephant42: fix default keymap (<a href="https://github.com/qmk/qmk_firmware/pull/18884" target="_blank" rel="noreferrer">#18884</a>)</li><li>Properly fix elephant42 (<a href="https://github.com/qmk/qmk_firmware/pull/18908" target="_blank" rel="noreferrer">#18908</a>)</li><li>Fix syntax error introduced in #18800 (<a href="https://github.com/qmk/qmk_firmware/pull/18933" target="_blank" rel="noreferrer">#18933</a>)</li><li>Resolve info.json/rules.mk feature conflicts in three boards (<a href="https://github.com/qmk/qmk_firmware/pull/18942" target="_blank" rel="noreferrer">#18942</a>)</li><li>Fix DD warnings for RGBKB boards (<a href="https://github.com/qmk/qmk_firmware/pull/18944" target="_blank" rel="noreferrer">#18944</a>)</li><li>Fix &quot;no matrix definition&quot; errors for some boards (<a href="https://github.com/qmk/qmk_firmware/pull/18954" target="_blank" rel="noreferrer">#18954</a>)</li><li>LED config fixes (<a href="https://github.com/qmk/qmk_firmware/pull/18973" target="_blank" rel="noreferrer">#18973</a>)</li><li><code>handwired/swiftrax/walter</code>: fix layout mismatch (<a href="https://github.com/qmk/qmk_firmware/pull/18974" target="_blank" rel="noreferrer">#18974</a>)</li><li>Fix use of shifted custom keycode (<a href="https://github.com/qmk/qmk_firmware/pull/18978" target="_blank" rel="noreferrer">#18978</a>)</li><li><code>pizzakeyboards/pizza65</code>: fix layouts (<a href="https://github.com/qmk/qmk_firmware/pull/18979" target="_blank" rel="noreferrer">#18979</a>)</li><li><code>cannonkeys/db60/hotswap</code>: fix layouts (<a href="https://github.com/qmk/qmk_firmware/pull/18982" target="_blank" rel="noreferrer">#18982</a>)</li><li><code>handwired/swiftrax/cowfish</code>: fix layouts (<a href="https://github.com/qmk/qmk_firmware/pull/18984" target="_blank" rel="noreferrer">#18984</a>)</li><li>Fixup hotdox76v2 on develop (<a href="https://github.com/qmk/qmk_firmware/pull/18991" target="_blank" rel="noreferrer">#18991</a>)</li><li><code>mechlovin/adelais/standard_led/avr/rev1</code>: fix layout (<a href="https://github.com/qmk/qmk_firmware/pull/18997" target="_blank" rel="noreferrer">#18997</a>)</li><li><code>gboards/gergoplex</code>: fix matrix pins (<a href="https://github.com/qmk/qmk_firmware/pull/18999" target="_blank" rel="noreferrer">#18999</a>)</li><li>Fixup keychron/q1/iso_encoder (<a href="https://github.com/qmk/qmk_firmware/pull/19006" target="_blank" rel="noreferrer">#19006</a>)</li><li>Rollback unrelated changes from previous PR. (<a href="https://github.com/qmk/qmk_firmware/pull/19015" target="_blank" rel="noreferrer">#19015</a>)</li><li>Fixup bn006 on develop (<a href="https://github.com/qmk/qmk_firmware/pull/19029" target="_blank" rel="noreferrer">#19029</a>)</li><li>onekey: disable NKRO and mousekeys by default (<a href="https://github.com/qmk/qmk_firmware/pull/19038" target="_blank" rel="noreferrer">#19038</a>)</li><li>Fix up laser_ninja/pumpkin_pad (<a href="https://github.com/qmk/qmk_firmware/pull/19060" target="_blank" rel="noreferrer">#19060</a>)</li><li>Fixup keychron/q6 (<a href="https://github.com/qmk/qmk_firmware/pull/19066" target="_blank" rel="noreferrer">#19066</a>)</li><li>Fixup handwired/alcor_dactyl (<a href="https://github.com/qmk/qmk_firmware/pull/19072" target="_blank" rel="noreferrer">#19072</a>)</li><li>Fix some old keycodes (<a href="https://github.com/qmk/qmk_firmware/pull/19086" target="_blank" rel="noreferrer">#19086</a>)</li><li>Update more <code>DRIVER_LED_TOTAL</code> defines to <code>RGB_MATRIX_LED_COUNT</code> (<a href="https://github.com/qmk/qmk_firmware/pull/19089" target="_blank" rel="noreferrer">#19089</a>)</li><li>Fix references to <code>mouse_report_t</code> (which doesnt exist) (<a href="https://github.com/qmk/qmk_firmware/pull/19107" target="_blank" rel="noreferrer">#19107</a>)</li><li>Fixup keychron/q5 (<a href="https://github.com/qmk/qmk_firmware/pull/19119" target="_blank" rel="noreferrer">#19119</a>)</li><li>Fixup aeboards/satellite (<a href="https://github.com/qmk/qmk_firmware/pull/19137" target="_blank" rel="noreferrer">#19137</a>)</li><li>Fixup aurora/corne on develop (<a href="https://github.com/qmk/qmk_firmware/pull/19144" target="_blank" rel="noreferrer">#19144</a>)</li><li>Minor lint fixes for various info.json (<a href="https://github.com/qmk/qmk_firmware/pull/19146" target="_blank" rel="noreferrer">#19146</a>)</li></ul><p>Others:</p><ul><li>Add DD mapping for LED/RGB Matrix max brightness (<a href="https://github.com/qmk/qmk_firmware/pull/18403" target="_blank" rel="noreferrer">#18403</a>)</li><li>Add DD mapping for LED/RGB Matrix split count (<a href="https://github.com/qmk/qmk_firmware/pull/18408" target="_blank" rel="noreferrer">#18408</a>)</li><li>Add DD mapping for LED/RGB Matrix HSVS steps (<a href="https://github.com/qmk/qmk_firmware/pull/18414" target="_blank" rel="noreferrer">#18414</a>)</li><li>Remove RGBLIGHT_ANIMTION and clean up effect defines for 0-F (<a href="https://github.com/qmk/qmk_firmware/pull/18725" target="_blank" rel="noreferrer">#18725</a>)</li><li>Merge API update workflow (<a href="https://github.com/qmk/qmk_firmware/pull/19121" target="_blank" rel="noreferrer">#19121</a>)</li></ul><p>Bugs:</p><ul><li>Fix layer switching from tap dances by redoing the keymap lookup (<a href="https://github.com/qmk/qmk_firmware/pull/17935" target="_blank" rel="noreferrer">#17935</a>)</li><li>ws2812: replace RGBLED_NUM with driver-owned constant to decouple driver from RGBLEDs/RGBMATRIX defines (<a href="https://github.com/qmk/qmk_firmware/pull/18036" target="_blank" rel="noreferrer">#18036</a>)</li><li>Prevent USB peripheral fault when restarting USB on WB32 MCUs (<a href="https://github.com/qmk/qmk_firmware/pull/18058" target="_blank" rel="noreferrer">#18058</a>)</li><li>Fix mouse report comparison failing on shared EP (fixes KB preventing sleep) (<a href="https://github.com/qmk/qmk_firmware/pull/18060" target="_blank" rel="noreferrer">#18060</a>)</li><li>Fix incorrect <code>bluetooth.driver</code> rules.mk mapping (<a href="https://github.com/qmk/qmk_firmware/pull/18205" target="_blank" rel="noreferrer">#18205</a>)</li><li>Adjust <code>EXTRAKEY_ENABLE</code> ifdefs for <code>send_extra()</code> (<a href="https://github.com/qmk/qmk_firmware/pull/18249" target="_blank" rel="noreferrer">#18249</a>)</li><li>Fix docs regarding cirque pinnacle attenuation (<a href="https://github.com/qmk/qmk_firmware/pull/18279" target="_blank" rel="noreferrer">#18279</a>)</li><li>Avoid repeated calls to rgblight_set() in tight succession when setting lighting layers (<a href="https://github.com/qmk/qmk_firmware/pull/18338" target="_blank" rel="noreferrer">#18338</a>)</li><li>Fix cirque tap from secondary side of split keyboard (<a href="https://github.com/qmk/qmk_firmware/pull/18351" target="_blank" rel="noreferrer">#18351</a>)</li><li>Fix EECONFIG_KEYMAP_UPPER_BYTE init (<a href="https://github.com/qmk/qmk_firmware/pull/18394" target="_blank" rel="noreferrer">#18394</a>)</li><li>Fix retain brightness when val is changed while a layer is active (<a href="https://github.com/qmk/qmk_firmware/pull/18426" target="_blank" rel="noreferrer">#18426</a>)</li><li>Update Chibios to latest 21.11.2 changes for RP2040 XIP deadlock mitigation (<a href="https://github.com/qmk/qmk_firmware/pull/18428" target="_blank" rel="noreferrer">#18428</a>)</li><li>Fix incorrect g_led_config generation (<a href="https://github.com/qmk/qmk_firmware/pull/18431" target="_blank" rel="noreferrer">#18431</a>)</li><li>Fix Per Key LED Indicator Callbacks (<a href="https://github.com/qmk/qmk_firmware/pull/18450" target="_blank" rel="noreferrer">#18450</a>)</li><li>Update chibios-contrib for RP2040 i2c fixes take 2 (<a href="https://github.com/qmk/qmk_firmware/pull/18455" target="_blank" rel="noreferrer">#18455</a>)</li><li>Fix comment of CM_QUES (Colemak question mark) (<a href="https://github.com/qmk/qmk_firmware/pull/18557" target="_blank" rel="noreferrer">#18557</a>)</li><li>ChibiOS: Fix USB bus disconnect handling (<a href="https://github.com/qmk/qmk_firmware/pull/18566" target="_blank" rel="noreferrer">#18566</a>)</li><li>Update ChibiOS-Contrib for USB IRQ and bus handling fixes (<a href="https://github.com/qmk/qmk_firmware/pull/18574" target="_blank" rel="noreferrer">#18574</a>)</li><li>RP2040: only clear RX FIFO for serial pio driver clear (<a href="https://github.com/qmk/qmk_firmware/pull/18581" target="_blank" rel="noreferrer">#18581</a>)</li><li>Fix ST7565 handler deadlock (<a href="https://github.com/qmk/qmk_firmware/pull/18609" target="_blank" rel="noreferrer">#18609</a>)</li><li>Fix/Update ChibiOS hardware ID (<a href="https://github.com/qmk/qmk_firmware/pull/18613" target="_blank" rel="noreferrer">#18613</a>)</li><li>Fix some rp2040 hardware ID errors (<a href="https://github.com/qmk/qmk_firmware/pull/18617" target="_blank" rel="noreferrer">#18617</a>)</li><li>Fix joystick functionality for ChibiOS and OTG (Blackpill) (<a href="https://github.com/qmk/qmk_firmware/pull/18631" target="_blank" rel="noreferrer">#18631</a>)</li><li>fix typo in solenoid.h (<a href="https://github.com/qmk/qmk_firmware/pull/18635" target="_blank" rel="noreferrer">#18635</a>)</li><li>Fix boundary in <code>RGB_MATRIX_INDICATOR_SET_COLOR</code> (<a href="https://github.com/qmk/qmk_firmware/pull/18650" target="_blank" rel="noreferrer">#18650</a>)</li><li>Fix MIDI output endpoint to use the out direction (<a href="https://github.com/qmk/qmk_firmware/pull/18654" target="_blank" rel="noreferrer">#18654</a>)</li><li>Fix mouse use within send_string (<a href="https://github.com/qmk/qmk_firmware/pull/18659" target="_blank" rel="noreferrer">#18659</a>)</li><li>Correctly build keymap.json containing additional config (<a href="https://github.com/qmk/qmk_firmware/pull/18766" target="_blank" rel="noreferrer">#18766</a>)</li><li>Correctly build out of tree keymap.json containing additional config (<a href="https://github.com/qmk/qmk_firmware/pull/18775" target="_blank" rel="noreferrer">#18775</a>)</li><li>Fix garbled test output (<a href="https://github.com/qmk/qmk_firmware/pull/18822" target="_blank" rel="noreferrer">#18822</a>)</li><li>Fix rgb_matrix_set_flags_noeeprom declaration (<a href="https://github.com/qmk/qmk_firmware/pull/18860" target="_blank" rel="noreferrer">#18860</a>)</li><li>Add missing Space Cadet alias (<a href="https://github.com/qmk/qmk_firmware/pull/18876" target="_blank" rel="noreferrer">#18876</a>)</li><li>Fix oled_render to render all dirty blocks. (<a href="https://github.com/qmk/qmk_firmware/pull/18887" target="_blank" rel="noreferrer">#18887</a>)</li><li>compiler.txt: ensure file exists before comparison (<a href="https://github.com/qmk/qmk_firmware/pull/18921" target="_blank" rel="noreferrer">#18921</a>)</li><li>Fix compilation issue with WPM (<a href="https://github.com/qmk/qmk_firmware/pull/18965" target="_blank" rel="noreferrer">#18965</a>)</li><li>Fix keycode parameter extraction to match the new DD keycodes (<a href="https://github.com/qmk/qmk_firmware/pull/18977" target="_blank" rel="noreferrer">#18977</a>)</li><li>Fix jump in mouse_report value when scale changes during cirque get report (<a href="https://github.com/qmk/qmk_firmware/pull/18992" target="_blank" rel="noreferrer">#18992</a>)</li><li>Fixup WS2812 vendor driver (<a href="https://github.com/qmk/qmk_firmware/pull/19028" target="_blank" rel="noreferrer">#19028</a>)</li><li>Add missing prototype for get_hold_on_other_key_press to resolve #18855 (<a href="https://github.com/qmk/qmk_firmware/pull/19056" target="_blank" rel="noreferrer">#19056</a>)</li><li>Fix duplicate key in keyboard.jsonschema (<a href="https://github.com/qmk/qmk_firmware/pull/19058" target="_blank" rel="noreferrer">#19058</a>)</li><li>Fixup <code>keyboard.jsonschema</code>. (<a href="https://github.com/qmk/qmk_firmware/pull/19059" target="_blank" rel="noreferrer">#19059</a>)</li><li>fixed MOUSEKEY_INERTIA on AVR (<a href="https://github.com/qmk/qmk_firmware/pull/19096" target="_blank" rel="noreferrer">#19096</a>)</li><li>Fix encoder_init call order in keyboard_init (<a href="https://github.com/qmk/qmk_firmware/pull/19140" target="_blank" rel="noreferrer">#19140</a>)</li><li>Fixup installation procedure for different Fedora versions. (<a href="https://github.com/qmk/qmk_firmware/pull/19159" target="_blank" rel="noreferrer">#19159</a>)</li></ul></div></div></main><footer class="VPDocFooter" data-v-39a288b8 data-v-09de1c0f><!--[--><!--]--><!----><nav class="prev-next" data-v-09de1c0f><div class="pager" data-v-09de1c0f><!----></div><div class="pager" data-v-09de1c0f><a class="VPLink link pager-link next" href="/newbs" data-v-09de1c0f><!--[--><span class="desc" data-v-09de1c0f>Next page</span><span class="title" data-v-09de1c0f>Introduction</span><!--]--></a></div></nav></footer><!--[--><!--]--></div></div></div><!--[--><!--]--></div></div><!----><!--[--><!--]--></div></div>
<script>window.__VP_HASH_MAP__=JSON.parse("{\"changelog_20190830.md\":\"Drtq3lMy\",\"changelog_20210529.md\":\"CR1YNfZX\",\"changelog_20200530.md\":\"Dk-vRpTQ\",\"documentation_best_practices.md\":\"BtEjePaZ\",\"changelog_20220226.md\":\"BWO5r_ec\",\"api_development_environment.md\":\"EhJClb9f\",\"drivers_adc.md\":\"DzU8txf8\",\"changelog_20220528.md\":\"BX3CCY1Z\",\"drivers_apa102.md\":\"Cl7Xer3S\",\"changelog_20211127.md\":\"ClUawWkq\",\"configurator_architecture.md\":\"DEFTvTlS\",\"drivers_is31fl3737.md\":\"BgIEmU0V\",\"cli_commands.md\":\"DGx-qNiE\",\"features_auto_shift.md\":\"B9HLt3QM\",\"drivers_flash.md\":\"DhWcHp8S\",\"drivers_serial.md\":\"CnlLG_H1\",\"chibios_upgrade_instructions.md\":\"B5dMtL5R\",\"configurator_default_keymaps.md\":\"B3v8dlHd\",\"feature_macros.md\":\"By1M5R8G\",\"newbs_building_firmware_configurator.md\":\"yyo-1QDE\",\"changelog_20210227.md\":\"BWOtCaeS\",\"quantum_painter_qgf.md\":\"BJNSu2s0\",\"quantum_painter_rle.md\":\"B07V3m-n\",\"ref_functions.md\":\"BVI2uXSN\",\"reference_configurator_support.md\":\"FaBQzIj6\",\"reference_glossary.md\":\"CXMuxToT\",\"reference_info_json.md\":\"D2_8zSnw\",\"reference_keymap_extras.md\":\"D-__wuxf\",\"newbs_git_best_practices.md\":\"BI2-EVI5\",\"newbs_testing_debugging.md\":\"D-c7Gle_\",\"config_options.md\":\"DvMeqlpB\",\"squeezing_avr.md\":\"BmcLYKOr\",\"compatible_microcontrollers.md\":\"6HA6FJZJ\",\"one_shot_keys.md\":\"QR09rSb-\",\"support.md\":\"Bj3JfaeV\",\"other_eclipse.md\":\"C-zqyJO9\",\"support_deprecation_policy.md\":\"CCo4ljiw\",\"syllabus.md\":\"B_ARGkLg\",\"other_vscode.md\":\"Di3vOySR\",\"platformdev_blackpill_f4x1.md\":\"DvObLRuk\",\"features_unicode.md\":\"CsON-fJH\",\"features_wpm.md\":\"BYf-Xc1H\",\"flashing.md\":\"BSZF2RCy\",\"platformdev_proton_c.md\":\"CDRuJBvD\",\"getting_started_docker.md\":\"mz6HE4Bl\",\"platformdev_rp2040.md\":\"CYKYMDfc\",\"getting_started_github.md\":\"OYq7IT7B\",\"platformdev_selecting_arm_mcu.md\":\"aF4DUsvb\",\"getting_started_introduction.md\":\"BOJreqSs\",\"porting_your_keyboard_to_qmk.md\":\"CIbOxKQC\",\"pr_checklist.md\":\"9utxnOgJ\",\"quantum_keycodes.md\":\"DM5WeUFF\",\"platformdev_chibios_earlyinit.md\":\"BQJSTP3y\",\"changelog_20221126.md\":\"DpbrnXeC\",\"newbs_flashing.md\":\"u-7lrNOy\",\"features_bluetooth.md\":\"CiAjl875\",\"changelog_20230827.md\":\"NSPhmB6l\",\"getting_started_make_guide.md\":\"BjUuEnSh\",\"hand_wire.md\":\"GiNX60kU\",\"hardware_drivers.md\":\"BUnx48D9\",\"drivers_is31fl3236.md\":\"BsbsN_Nu\",\"features_key_lock.md\":\"IjFq9dYs\",\"feature_userspace.md\":\"BsmY9yWw\",\"features_leader_key.md\":\"DBQTnBRh\",\"index.md\":\"BFvlZFTs\",\"isp_flashing_guide.md\":\"BiuBpOKX\",\"keycodes.md\":\"CDjPwWHi\",\"newbs_building_firmware_workflow.md\":\"DpLVwA7x\",\"coding_conventions_python.md\":\"BV-OK1s5\",\"drivers_is31fl3741.md\":\"DzsuNWJt\",\"how_a_matrix_works.md\":\"JINKbCuX\",\"features_bootmagic.md\":\"CeNSUsBQ\",\"quantum_painter_lvgl.md\":\"DobNbSgA\",\"api_overview.md\":\"0FPaUsMb\",\"drivers_gpio.md\":\"C5PvyJVh\",\"features_programmable_button.md\":\"D332w_PT\",\"changelog_20230528.md\":\"nX9R48zP\",\"changelog_20240225.md\":\"B4-WrXj6\",\"cli.md\":\"BLzAdA6l\",\"drivers_is31fl3746a.md\":\"BFczK5c-\",\"quantum_painter_qff.md\":\"kLNwshez\",\"api_docs.md\":\"CRoD6CbL\",\"features_ps2_mouse.md\":\"CL_pA9sk\",\"newbs_git_resolving_merge_conflicts.md\":\"72w3BRmm\",\"newbs_git_using_your_master_branch.md\":\"B9DxZCl8\",\"data_driven_config.md\":\"BvLQ7P20\",\"features_rawhid.md\":\"bKKG3KCa\",\"changelog_20200829.md\":\"CoqrOffn\",\"drivers_audio.md\":\"mqaz6p5N\",\"custom_matrix.md\":\"DMnRw_5l\",\"features_rgblight.md\":\"O1OG9fO_\",\"features_repeat_key.md\":\"2ulQYjgy\",\"changelog_20220827.md\":\"DjPthqDk\",\"features_key_overrides.md\":\"C02U5_E5\",\"hardware_keyboard_guidelines.md\":\"CJevsanE\",\"drivers_is31fl3731.md\":\"_mTT68lh\",\"keycodes_basic.md\":\"CHIeCvwn\",\"changelog_20240526.md\":\"DAmAEDG5\",\"api_development_overview.md\":\"Dcey4ntL\",\"changelog_20231126.md\":\"D2Ok5QAf\",\"changelog_20210828.md\":\"DNbHIuuM\",\"changelog_20230226.md\":\"Cg0AYxIn\",\"arm_debugging.md\":\"BH-H2Ukz\",\"features_sequencer.md\":\"DkgqNCsQ\",\"features_stenography.md\":\"Bb_IhUGl\",\"features_combo.md\":\"C-GfDyXJ\",\"features_space_cadet.md\":\"DmNfYRVJ\",\"documentation_templates.md\":\"Bhkum0wD\",\"tap_hold.md\":\"DD8WTSla\",\"changelog_20201128.md\":\"7XXL02Bn\",\"breaking_changes.md\":\"y7zfo29K\",\"newbs_getting_started.md\":\"DD4a5qPC\",\"faq_general.md\":\"BOlGsWSk\",\"cli_tab_complete.md\":\"ChaxfzYo\",\"drivers_eeprom.md\":\"DMr_G_5d\",\"breaking_changes_history.md\":\"CJNU0o77\",\"feature_layers.md\":\"8GwBUTZN\",\"coding_conventions_c.md\":\"DdrpXBEh\",\"features_backlight.md\":\"D7R4FkYo\",\"configurator_step_by_step.md\":\"CB5U_ksW\",\"drivers_is31fl3218.md\":\"C7Rok4l6\",\"configurator_troubleshooting.md\":\"BxGLPT8G\",\"keycodes_magic.md\":\"CGO3hgMm\",\"drivers_i2c.md\":\"Cuj87reB\",\"drivers_aw20216s.md\":\"CgKehEzB\",\"features_joystick.md\":\"CW0gZHec\",\"features_digitizer.md\":\"DGIGZFVx\",\"features_led_matrix.md\":\"BTOvgNVe\",\"features_led_indicators.md\":\"BI857zKH\",\"features_dip_switch.md\":\"DtBOdc98\",\"features_dynamic_macros.md\":\"CrJ1vhBA\",\"features_mouse_keys.md\":\"DIChRnuA\",\"features_grave_esc.md\":\"mUNEjUYS\",\"features_encoders.md\":\"BY--6WYQ\",\"features_midi.md\":\"u3tHPteB\",\"features_oled_driver.md\":\"D9wJVdL1\",\"features_audio.md\":\"DWNYte3W\",\"features_haptic_feedback.md\":\"DS8CmC7e\",\"keymap.md\":\"Y4Fei1Ty\",\"capabilities.md\":\"DgKwcj5n\",\"changelog_20240825.md\":\"DV_RdVWK\",\"mod_tap.md\":\"C7wRKLcf\",\"understanding_qmk.md\":\"f-Bc_eHQ\",\"newbs.md\":\"-YYNd3dT\",\"newbs_building_firmware.md\":\"DnVUK9it\",\"cli_development.md\":\"3xFA2OvS\",\"features_caps_word.md\":\"BDQGM0-x\",\"keycodes_us_ansi_shifted.md\":\"Cs78SDfM\",\"unit_testing.md\":\"u3fgbGUj\",\"features_split_keyboard.md\":\"C-blnyD_\",\"contributing.md\":\"CgMx5YLW\",\"features_rgb_matrix.md\":\"BE6vKO90\",\"features_secure.md\":\"BX7jFvW5\",\"newbs_learn_more_resources.md\":\"Dj1s2BDG\",\"newbs_external_userspace.md\":\"pD9Lc-a5\",\"features_st7565.md\":\"MoajNurJ\",\"features_autocorrect.md\":\"DHRDcuho\",\"capabilities_inc.md\":\"Ca9zpMce\",\"driver_installation_zadig.md\":\"CX9-BACt\",\"features_pointing_device.md\":\"DP6-XwL6\",\"newbs_git_resynchronize_a_branch.md\":\"YGDefQFx\",\"feature_eeprom.md\":\"a0eoTZm7\",\"drivers_is31fl3733.md\":\"B2SurzgJ\",\"changelog_20200229.md\":\"DNsowwM1\",\"drivers_is31fl3736.md\":\"Cr5SQU0k\",\"breaking_changes_instructions.md\":\"C99NYDjO\",\"drivers_is31fl3729.md\":\"uZAm-59P\",\"feature_converters.md\":\"DcwmzUcD\",\"drivers_is31fl3742a.md\":\"CKPjB5T1\",\"drivers_is31fl3743a.md\":\"9TiNS_bm\",\"drivers_is31fl3745.md\":\"CpCpR0Np\",\"feature_layouts.md\":\"qcy8hNMO\",\"cli_configuration.md\":\"CGSB128P\",\"drivers_spi.md\":\"tJVeIT7e\",\"features_command.md\":\"Byl9YoT7\",\"how_keyboards_work.md\":\"CB7z8ocb\",\"features_hd44780.md\":\"15K40o_e\",\"features_os_detection.md\":\"DZKTWvSd\",\"features_tri_layer.md\":\"DdnBVinw\",\"features_send_string.md\":\"vM68un4v\",\"faq_build.md\":\"DL_WezA1\",\"features_swap_hands.md\":\"DOhgGQf9\",\"drivers_snled27351.md\":\"Cq725B0_\",\"drivers_uart.md\":\"BNBs-m3h\",\"easy_maker.md\":\"DAfbIK4w\",\"drivers_ws2812.md\":\"D9E3Wb-Y\",\"faq_misc.md\":\"qGrhOTu4\",\"faq_keymap.md\":\"BsEmEZTo\",\"faq_debug.md\":\"DuThValw\",\"feature_debounce_type.md\":\"CUrSp0Iy\",\"feature_advanced_keycodes.md\":\"CX8dJkY-\",\"custom_quantum_functions.md\":\"Br1xUGGa\",\"quantum_painter.md\":\"BK_I9g4h\",\"features_tap_dance.md\":\"Bfnmm10t\"}");window.__VP_SITE_DATA__=JSON.parse("{\"lang\":\"en-US\",\"dir\":\"ltr\",\"title\":\"QMK Firmware\",\"description\":\"Documentation for QMK Firmware\",\"base\":\"/\",\"head\":[],\"router\":{\"prefetchLinks\":true},\"appearance\":true,\"themeConfig\":{\"logo\":{\"light\":\"/qmk-logo-light.svg\",\"dark\":\"/qmk-logo-dark.svg\"},\"title\":\"QMK Firmware\",\"nav\":[{\"text\":\"Home\",\"link\":\"/\"}],\"search\":{\"provider\":\"local\"},\"sidebar\":[{\"text\":\"Tutorial\",\"items\":[{\"text\":\"Introduction\",\"link\":\"/newbs\"},{\"text\":\"Setup\",\"link\":\"/newbs_getting_started\"},{\"text\":\"Building Your First Firmware\",\"link\":\"/newbs_building_firmware\"},{\"text\":\"Flashing Firmware\",\"link\":\"/newbs_flashing\"},{\"text\":\"Getting Help/Support\",\"link\":\"/support\"},{\"text\":\"External Userspace\",\"link\":\"/newbs_external_userspace\"},{\"text\":\"Other Resources\",\"link\":\"/newbs_learn_more_resources\"},{\"text\":\"Syllabus\",\"link\":\"/syllabus\"}]},{\"text\":\"FAQs\",\"items\":[{\"text\":\"General FAQ\",\"link\":\"/faq_general\"},{\"text\":\"Build/Compile QMK\",\"link\":\"/faq_build\"},{\"text\":\"Troubleshooting QMK\",\"link\":\"/faq_misc\"},{\"text\":\"Debugging QMK\",\"link\":\"/faq_debug\"},{\"text\":\"Keymap FAQ\",\"link\":\"/faq_keymap\"},{\"text\":\"Squeezing Space from AVR\",\"link\":\"/squeezing_avr\"},{\"text\":\"Glossary\",\"link\":\"/reference_glossary\"}]},{\"text\":\"Configurator\",\"items\":[{\"text\":\"Overview\",\"link\":\"/newbs_building_firmware_configurator\"},{\"text\":\"Step by Step\",\"link\":\"/configurator_step_by_step\"},{\"text\":\"Troubleshooting\",\"link\":\"/configurator_troubleshooting\"},{\"text\":\"Architecture\",\"link\":\"/configurator_architecture\"},{\"text\":\"QMK API\",\"items\":[{\"text\":\"Overview\",\"link\":\"/api_overview\"},{\"text\":\"API Documentation\",\"link\":\"/api_docs\"},{\"text\":\"Keyboard Support\",\"link\":\"/reference_configurator_support\"},{\"text\":\"Adding Default Keymaps\",\"link\":\"/configurator_default_keymaps\"}]}]},{\"text\":\"CLI\",\"items\":[{\"text\":\"Overview\",\"link\":\"/cli\"},{\"text\":\"Configuration\",\"link\":\"/cli_configuration\"},{\"text\":\"Commands\",\"link\":\"/cli_commands\"},{\"text\":\"Tab Completion\",\"link\":\"/cli_tab_complete\"}]},{\"text\":\"Using QMK\",\"items\":[{\"text\":\"Guides\",\"items\":[{\"text\":\"Customizing Functionality\",\"link\":\"/custom_quantum_functions\"},{\"text\":\"Driver Installation with Zadig\",\"link\":\"/driver_installation_zadig\"},{\"text\":\"Keymap Overview\",\"link\":\"/keymap\"},{\"text\":\"Development Environments\",\"items\":[{\"text\":\"Docker Guide\",\"link\":\"/getting_started_docker\"}]},{\"text\":\"Flashing\",\"link\":\"/flashing\"},{\"text\":\"IDEs\",\"items\":[{\"text\":\"Using Eclipse with QMK\",\"link\":\"/other_eclipse\"},{\"text\":\"Using VSCode with QMK\",\"link\":\"/other_vscode\"}]},{\"text\":\"Git Best Practices\",\"items\":[{\"text\":\"Introduction\",\"link\":\"/newbs_git_best_practices\"},{\"text\":\"Your Fork\",\"link\":\"/newbs_git_using_your_master_branch\"},{\"text\":\"Merge Conflicts\",\"link\":\"/newbs_git_resolving_merge_conflicts\"},{\"text\":\"Fixing Your Branch\",\"link\":\"/newbs_git_resynchronize_a_branch\"}]}]},{\"text\":\"Simple Keycodes\",\"items\":[{\"text\":\"Full List\",\"link\":\"/keycodes\"},{\"text\":\"Basic Keycodes\",\"link\":\"/keycodes_basic\"},{\"text\":\"Language-Specific Keycodes\",\"link\":\"/reference_keymap_extras\"},{\"text\":\"Modifier Keys\",\"link\":\"/feature_advanced_keycodes\"},{\"text\":\"Quantum Keycodes\",\"link\":\"/quantum_keycodes\"},{\"text\":\"Magic Keycodes\",\"link\":\"/keycodes_magic\"}]},{\"text\":\"Advanced Keycodes\",\"items\":[{\"text\":\"Command\",\"link\":\"/features/command\"},{\"text\":\"Dynamic Macros\",\"link\":\"/features/dynamic_macros\"},{\"text\":\"Grave Escape\",\"link\":\"/features/grave_esc\"},{\"text\":\"Leader Key\",\"link\":\"/features/leader_key\"},{\"text\":\"Mod-Tap\",\"link\":\"/mod_tap\"},{\"text\":\"Macros\",\"link\":\"/feature_macros\"},{\"text\":\"Mouse Keys\",\"link\":\"/features/mouse_keys\"},{\"text\":\"Programmable Button\",\"link\":\"/features/programmable_button\"},{\"text\":\"Repeat Key\",\"link\":\"/features/repeat_key\"},{\"text\":\"Space Cadet Shift\",\"link\":\"/features/space_cadet\"},{\"text\":\"US ANSI Shifted Keys\",\"link\":\"/keycodes_us_ansi_shifted\"}]},{\"text\":\"Software Features\",\"items\":[{\"text\":\"Auto Shift\",\"link\":\"/features/auto_shift\"},{\"text\":\"Autocorrect\",\"link\":\"/features/autocorrect\"},{\"text\":\"Caps Word\",\"link\":\"/features/caps_word\"},{\"text\":\"Combos\",\"link\":\"/features/combo\"},{\"text\":\"Debounce API\",\"link\":\"/feature_debounce_type\"},{\"text\":\"Digitizer\",\"link\":\"/features/digitizer\"},{\"text\":\"EEPROM\",\"link\":\"/feature_eeprom\"},{\"text\":\"Key Lock\",\"link\":\"/features/key_lock\"},{\"text\":\"Key Overrides\",\"link\":\"/features/key_overrides\"},{\"text\":\"Layers\",\"link\":\"/feature_layers\"},{\"text\":\"One Shot Keys\",\"link\":\"/one_shot_keys\"},{\"text\":\"OS Detection\",\"link\":\"/features/os_detection\"},{\"text\":\"Raw HID\",\"link\":\"/features/rawhid\"},{\"text\":\"Secure\",\"link\":\"/features/secure\"},{\"text\":\"Send String\",\"link\":\"/features/send_string\"},{\"text\":\"Sequencer\",\"link\":\"/features/sequencer\"},{\"text\":\"Swap Hands\",\"link\":\"/features/swap_hands\"},{\"text\":\"Tap Dance\",\"link\":\"/features/tap_dance\"},{\"text\":\"Tap-Hold Configuration\",\"link\":\"/tap_hold\"},{\"text\":\"Tri Layer\",\"link\":\"/features/tri_layer\"},{\"text\":\"Unicode\",\"link\":\"/features/unicode\"},{\"text\":\"Userspace\",\"link\":\"/feature_userspace\"},{\"text\":\"WPM Calculation\",\"link\":\"/features/wpm\"}]},{\"text\":\"Hardware Features\",\"items\":[{\"text\":\"Displays\",\"items\":[{\"text\":\"Quantum Painter\",\"link\":\"quantum_painter\",\"items\":[{\"text\":\"Quantum Painter LVGL Integration\",\"link\":\"/quantum_painter_lvgl\"}]},{\"text\":\"HD44780 LCD Driver\",\"link\":\"/features/hd44780\"},{\"text\":\"ST7565 LCD Driver\",\"link\":\"/features/st7565\"},{\"text\":\"OLED Driver\",\"link\":\"/features/oled_driver\"}]},{\"text\":\"Lighting\",\"items\":[{\"text\":\"Backlight\",\"link\":\"/features/backlight\"},{\"text\":\"LED Matrix\",\"link\":\"/features/led_matrix\"},{\"text\":\"RGB Lighting\",\"link\":\"/features/rgblight\"},{\"text\":\"RGB Matrix\",\"link\":\"/features/rgb_matrix\"}]},{\"text\":\"Audio\",\"link\":\"/features/audio\"},{\"text\":\"Bluetooth\",\"link\":\"/features/bluetooth\"},{\"text\":\"Bootmagic Lite\",\"link\":\"/features/bootmagic\"},{\"text\":\"Converters\",\"link\":\"/feature_converters\"},{\"text\":\"Custom Matrix\",\"link\":\"/custom_matrix\"},{\"text\":\"DIP Switch\",\"link\":\"/features/dip_switch\"},{\"text\":\"Encoders\",\"link\":\"/features/encoders\"},{\"text\":\"Haptic Feedback\",\"link\":\"/features/haptic_feedback\"},{\"text\":\"Joystick\",\"link\":\"/features/joystick\"},{\"text\":\"LED Indicators\",\"link\":\"/features/led_indicators\"},{\"text\":\"MIDI\",\"link\":\"/features/midi\"},{\"text\":\"Pointing Device\",\"link\":\"/features/pointing_device\"},{\"text\":\"PS/2 Mouse\",\"link\":\"/features/ps2_mouse\"},{\"text\":\"Split Keyboard\",\"link\":\"/features/split_keyboard\"},{\"text\":\"Stenography\",\"link\":\"/features/stenography\"}]},{\"text\":\"Keyboard Building\",\"items\":[{\"text\":\"Easy Maker for One Offs\",\"link\":\"/easy_maker\"},{\"text\":\"Porting Keyboards\",\"link\":\"/porting_your_keyboard_to_qmk\"},{\"text\":\"Hand Wiring Guide\",\"link\":\"/hand_wire\"},{\"text\":\"ISP Flashing Guide\",\"link\":\"/isp_flashing_guide\"}]}]},{\"text\":\"Developing QMK\",\"items\":[{\"text\":\"PR Checklist\",\"link\":\"/pr_checklist\"},{\"text\":\"Breaking Changes\",\"items\":[{\"text\":\"Overview\",\"link\":\"/breaking_changes\"},{\"text\":\"My Pull Request Was Flagged\",\"link\":\"/breaking_changes_instructions\"},{\"text\":\"Most Recent ChangeLog\",\"link\":\"/ChangeLog/20240825\"},{\"text\":\"Past Breaking Changes\",\"link\":\"/breaking_changes_history\"},{\"text\":\"Deprecation Policy\",\"link\":\"/support_deprecation_policy\"}]},{\"text\":\"C Development\",\"items\":[{\"text\":\"ARM Debugging Guide\",\"link\":\"/arm_debugging\"},{\"text\":\"Coding Conventions\",\"link\":\"/coding_conventions_c\"},{\"text\":\"Compatible Microcontrollers\",\"link\":\"/compatible_microcontrollers\"},{\"text\":\"Drivers\",\"link\":\"hardware_drivers\",\"items\":[{\"text\":\"ADC Driver\",\"link\":\"/drivers/adc\"},{\"text\":\"APA102 Driver\",\"link\":\"/drivers/apa102\"},{\"text\":\"Audio Driver\",\"link\":\"/drivers/audio\"},{\"text\":\"EEPROM Driver\",\"link\":\"/drivers/eeprom\"},{\"text\":\"Flash Driver\",\"link\":\"/drivers/flash\"},{\"text\":\"I2C Driver\",\"link\":\"/drivers/i2c\"},{\"text\":\"'serial' Driver\",\"link\":\"/drivers/serial\"},{\"text\":\"SPI Driver\",\"link\":\"/drivers/spi\"},{\"text\":\"UART Driver\",\"link\":\"/drivers/uart\"},{\"text\":\"WS2812 Driver\",\"link\":\"/drivers/ws2812\"}]},{\"text\":\"GPIO Controls\",\"link\":\"/drivers/gpio\"},{\"text\":\"Keyboard Guidelines\",\"link\":\"/hardware_keyboard_guidelines\"}]},{\"text\":\"Python Development\",\"items\":[{\"text\":\"Coding Conventions\",\"link\":\"/coding_conventions_python\"},{\"text\":\"QMK CLI Development\",\"link\":\"/cli_development\"}]},{\"text\":\"Configurator Development\",\"items\":[{\"text\":\"QMK API\",\"items\":[{\"text\":\"Development Environment\",\"link\":\"/api_development_environment\"},{\"text\":\"Architecture Overview\",\"link\":\"/api_development_overview\"}]}]},{\"text\":\"Hardware Platform Development\",\"items\":[{\"text\":\"Arm/ChibiOS\",\"items\":[{\"text\":\"Selecting an MCU\",\"link\":\"/platformdev_selecting_arm_mcu\"},{\"text\":\"Early initialization\",\"link\":\"/platformdev_chibios_earlyinit\"},{\"text\":\"Raspberry Pi RP2040\",\"link\":\"/platformdev_rp2040\"},{\"text\":\"Proton C\",\"link\":\"/platformdev_proton_c\"},{\"text\":\"WeAct Blackpill F4x1\",\"link\":\"/platformdev_blackpill_f4x1\"}]}]},{\"text\":\"QMK Reference\",\"items\":[{\"text\":\"Contributing to QMK\",\"link\":\"/contributing\"},{\"text\":\"Config Options\",\"link\":\"/config_options\"},{\"text\":\"Data Driven Configuration\",\"link\":\"/data_driven_config\"},{\"text\":\"Make Documentation\",\"link\":\"/getting_started_make_guide\"},{\"text\":\"Documentation Best Practices\",\"link\":\"/documentation_best_practices\"},{\"text\":\"Documentation Templates\",\"link\":\"/documentation_templates\"},{\"text\":\"Community Layouts\",\"link\":\"/feature_layouts\"},{\"text\":\"Unit Testing\",\"link\":\"/unit_testing\"},{\"text\":\"Useful Functions\",\"link\":\"/ref_functions\"},{\"text\":\"info.json Format\",\"link\":\"/reference_info_json\"}]},{\"text\":\"For a Deeper Understanding\",\"items\":[{\"text\":\"How Keyboards Work\",\"link\":\"/how_keyboards_work\"},{\"text\":\"How a Matrix Works\",\"link\":\"/how_a_matrix_works\"},{\"text\":\"Understanding QMK\",\"link\":\"/understanding_qmk\"}]}]}],\"socialLinks\":[{\"icon\":{\"svg\":\"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 50 50\\\" width=\\\"50px\\\" height=\\\"50px\\\"><path d=\\\"M 29 3 C 28.0625 3 27.164063 3.382813 26.5 4 C 25.835938 4.617188 25.363281 5.433594 25 6.40625 C 24.355469 8.140625 24.085938 10.394531 24.03125 13.03125 C 19.234375 13.179688 14.820313 14.421875 11.28125 16.46875 C 10.214844 15.46875 8.855469 14.96875 7.5 14.96875 C 6.089844 14.96875 4.675781 15.511719 3.59375 16.59375 C 1.425781 18.761719 1.425781 22.238281 3.59375 24.40625 L 3.84375 24.65625 C 3.3125 26.035156 3 27.488281 3 29 C 3 33.527344 5.566406 37.585938 9.5625 40.4375 C 13.558594 43.289063 19.007813 45 25 45 C 30.992188 45 36.441406 43.289063 40.4375 40.4375 C 44.433594 37.585938 47 33.527344 47 29 C 47 27.488281 46.6875 26.035156 46.15625 24.65625 L 46.40625 24.40625 C 48.574219 22.238281 48.574219 18.761719 46.40625 16.59375 C 45.324219 15.511719 43.910156 14.96875 42.5 14.96875 C 41.144531 14.96875 39.785156 15.46875 38.71875 16.46875 C 35.195313 14.433594 30.800781 13.191406 26.03125 13.03125 C 26.09375 10.546875 26.363281 8.46875 26.875 7.09375 C 27.164063 6.316406 27.527344 5.757813 27.875 5.4375 C 28.222656 5.117188 28.539063 5 29 5 C 29.460938 5 29.683594 5.125 30.03125 5.40625 C 30.378906 5.6875 30.785156 6.148438 31.3125 6.6875 C 32.253906 7.652344 33.695313 8.714844 36.09375 8.9375 C 36.539063 11.238281 38.574219 13 41 13 C 43.75 13 46 10.75 46 8 C 46 5.25 43.75 3 41 3 C 38.605469 3 36.574219 4.710938 36.09375 6.96875 C 34.3125 6.796875 33.527344 6.109375 32.75 5.3125 C 32.300781 4.851563 31.886719 4.3125 31.3125 3.84375 C 30.738281 3.375 29.9375 3 29 3 Z M 41 5 C 42.667969 5 44 6.332031 44 8 C 44 9.667969 42.667969 11 41 11 C 39.332031 11 38 9.667969 38 8 C 38 6.332031 39.332031 5 41 5 Z M 25 15 C 30.609375 15 35.675781 16.613281 39.28125 19.1875 C 42.886719 21.761719 45 25.226563 45 29 C 45 32.773438 42.886719 36.238281 39.28125 38.8125 C 35.675781 41.386719 30.609375 43 25 43 C 19.390625 43 14.324219 41.386719 10.71875 38.8125 C 7.113281 36.238281 5 32.773438 5 29 C 5 25.226563 7.113281 21.761719 10.71875 19.1875 C 14.324219 16.613281 19.390625 15 25 15 Z M 7.5 16.9375 C 8.203125 16.9375 8.914063 17.148438 9.53125 17.59375 C 7.527344 19.03125 5.886719 20.769531 4.75 22.71875 C 3.582031 21.296875 3.660156 19.339844 5 18 C 5.714844 17.285156 6.609375 16.9375 7.5 16.9375 Z M 42.5 16.9375 C 43.390625 16.9375 44.285156 17.285156 45 18 C 46.339844 19.339844 46.417969 21.296875 45.25 22.71875 C 44.113281 20.769531 42.472656 19.03125 40.46875 17.59375 C 41.085938 17.148438 41.796875 16.9375 42.5 16.9375 Z M 17 22 C 14.800781 22 13 23.800781 13 26 C 13 28.199219 14.800781 30 17 30 C 19.199219 30 21 28.199219 21 26 C 21 23.800781 19.199219 22 17 22 Z M 33 22 C 30.800781 22 29 23.800781 29 26 C 29 28.199219 30.800781 30 33 30 C 35.199219 30 37 28.199219 37 26 C 37 23.800781 35.199219 22 33 22 Z M 17 24 C 18.117188 24 19 24.882813 19 26 C 19 27.117188 18.117188 28 17 28 C 15.882813 28 15 27.117188 15 26 C 15 24.882813 15.882813 24 17 24 Z M 33 24 C 34.117188 24 35 24.882813 35 26 C 35 27.117188 34.117188 28 33 28 C 31.882813 28 31 27.117188 31 26 C 31 24.882813 31.882813 24 33 24 Z M 34.15625 33.84375 C 34.101563 33.851563 34.050781 33.859375 34 33.875 C 33.683594 33.9375 33.417969 34.144531 33.28125 34.4375 C 33.28125 34.4375 32.757813 35.164063 31.4375 36 C 30.117188 36.835938 28.058594 37.6875 25 37.6875 C 21.941406 37.6875 19.882813 36.835938 18.5625 36 C 17.242188 35.164063 16.71875 34.4375 16.71875 34.4375 C 16.492188 34.082031 16.066406 33.90625 15.65625 34 C 15.332031 34.082031 15.070313 34.316406 14.957031 34.632813 C 14.84375 34.945313 14.894531 35.292969 15.09375 35.5625 C 15.09375 35.5625 15.863281 36.671875 17.46875 37.6875 C 19.074219 38.703125 21.558594 39.6875 25 39.6875 C 28.441406 39.6875 30.925781 38.703125 32.53125 37.6875 C 34.136719 36.671875 34.90625 35.5625 34.90625 35.5625 C 35.207031 35.273438 35.296875 34.824219 35.128906 34.441406 C 34.960938 34.058594 34.574219 33.820313 34.15625 33.84375 Z\\\"/></svg>\"},\"link\":\"https://reddit.com/r/olkb\"},{\"icon\":\"discord\",\"link\":\"https://discord.gg/qmk\"},{\"icon\":\"github\",\"link\":\"https://github.com/qmk/qmk_firmware\"}]},\"locales\":{},\"scrollOffset\":134,\"cleanUrls\":true}");</script>
</body>
</html>