qmk_firmware/ChangeLog/20230528.html

24 lines
171 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 - 2023 May 28 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.Blu7LvN2.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.BR6AtNKq.js">
<link rel="modulepreload" href="/assets/ChangeLog_20230528.md.nX9R48zP.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><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>Flashing</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="/flashing" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>Flashing</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="/flashing_bootloadhid" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>Flashing ATmega32A (ps2avrgb)</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>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/20240526" 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_20230528" data-v-39a288b8><div><h1 id="qmk-breaking-changes-2023-may-28-changelog" tabindex="-1">QMK Breaking Changes - 2023 May 28 Changelog <a class="header-anchor" href="#qmk-breaking-changes-2023-may-28-changelog" aria-label="Permalink to &quot;QMK Breaking Changes - 2023 May 28 Changelog&quot;"></a></h1><h2 id="notable-changes" tabindex="-1">Notable Changes <a class="header-anchor" href="#notable-changes" aria-label="Permalink to &quot;Notable Changes {#notable-changes}&quot;"></a></h2><p>As per last breaking changes cycle, there has been <em>a lot</em> of emphasis on behind-the-scenes changes, mainly around migration of configurables into <code>info.json</code> files, cleanup of <code>info.json</code> files, additional layout definitions for keyboards, adding support for general community layouts to keyboards, as well as addressing technical debt.</p><p>Of note for keyboard designers:</p><ul><li>Layout and matrix definitions in <code>info.json</code> are now <em>mandatory</em> for merge into QMK. <ul><li>Layout macros in <code>&lt;yourkeyboard&gt;.h</code> are no longer accepted into QMK Firmware.</li><li>Existing keyboards have been meticulously converted by the QMK collaborators</li><li>Layouts missing from keyboard definitions have been added in the process</li><li>Keys within layouts should not specify <code>&quot;w&quot;:1</code> or <code>&quot;h&quot;:1</code> if the key size is 1 -- <code>w</code>/<code>h</code> should only be present for sizes other than 1</li></ul></li><li><code>config_common.h</code> has been removed and should not be present anywhere in your keyboard code.</li><li><code>RGB_DI_PIN</code> will now cause an error during build: <ul><li>For WS2812-like LEDs, this should be moved to <code>info.json</code>: <code>&quot;ws2812&quot;: { &quot;pin&quot;: &quot;xxx&quot; }</code></li><li>For APA102 LEDs, this should be moved to <code>info.json</code>: <code>&quot;apa102&quot;: { &quot;data_pin&quot;: &quot;xxx&quot; }</code></li></ul></li><li>Other mandatory data-driven changes should be automatically flagged during build</li><li>Keymaps with <code>encoder_map</code> should now have the following change made: <ul><li><code>encoder_map[][NUM_ENCODERS][2]</code> =&gt; <code>encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS]</code></li><li>Users assumed the <code>2</code> referred to the number of encoders, rather than the number of directions (which is always 2)</li></ul></li></ul><h3 id="repeat-last-key" tabindex="-1">Repeat last key (<a href="https://github.com/qmk/qmk_firmware/pull/19700" target="_blank" rel="noreferrer">#19700</a>) <a class="header-anchor" href="#repeat-last-key" aria-label="Permalink to &quot;Repeat last key ([#19700](https://github.com/qmk/qmk_firmware/pull/19700)) {#repeat-last-key}&quot;"></a></h3><p>A new pair of keys has been added to QMK -- namely <code>QK_REPEAT_KEY</code> and <code>QK_ALT_REPEAT_KEY</code> (shortened: <code>QK_REP</code>/<code>QK_AREP</code>). These allow you to repeat the last key pressed, or in the case of the alternate key, press the &quot;opposite&quot; of the last key. For example, if you press <code>KC_LEFT</code>, pressing <code>QK_REPEAT_KEY</code> afterwards repeats <code>KC_LEFT</code>, but pressing <code>QK_ALT_REPEAT_KEY</code> instead sends <code>KC_RIGHT</code>.</p><p>The full list of default alternate keys is available on the <a href="./../features/repeat_key">Repeat Key</a> documentation.</p><p>To enable these keys, in your keymap&#39;s <code>rules.mk</code>, add:</p><div class="language-make vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">make</span><pre class="shiki shiki-themes github-light github-dark vp-code"><code><span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">REPEAT_KEY_ENABLE = yes</span></span></code></pre></div><p>...and add them to your keymap.</p><h3 id="user-callback-for-pre-process-record" tabindex="-1">User callback for pre process record (<a href="https://github.com/qmk/qmk_firmware/pull/20584" target="_blank" rel="noreferrer">#20584</a>) <a class="header-anchor" href="#user-callback-for-pre-process-record" aria-label="Permalink to &quot;User callback for pre process record ([#20584](https://github.com/qmk/qmk_firmware/pull/20584)) {#user-callback-for-pre-process-record}&quot;"></a></h3><p>Two new boolean callback functions, <code>pre_process_record_kb</code> and <code>pre_process_record_user</code>, have been added. They are called at the beginning of <code>process_record</code>, right before <code>process_combo</code>.</p><p>Similar to existing <code>*_kb</code> and <code>*_user</code> callback functions, returning <code>false</code> will halt further processing of key events. The <code>pre_process_record_user</code> function will allow user space opportunity to handle or capture an input before it undergoes quantum processing. For example, while action tapping is still resolving the tap or hold output of a mod-tap key, <code>pre_process_record_user</code> can capture the next key record of an input event that follows. That key record can be used to influence the <a href="./../tap_hold">decision of the mod-tap</a> key that is currently undergoing quantum processing.</p><h3 id="consolidate-modelm" tabindex="-1">Consolidate modelm (<a href="https://github.com/qmk/qmk_firmware/pull/14996" target="_blank" rel="noreferrer">#14996</a> <a class="header-anchor" href="#consolidate-modelm" aria-label="Permalink to &quot;Consolidate modelm ([#14996](https://github.com/qmk/qmk_firmware/pull/14996) {#consolidate-modelm}&quot;"></a></h3><p>Several build targets for the IBM Model M were cluttered in different folders. The maintainers of several Model M replacement controller projects agreed to consolidate them under one common folder.</p><p>The list of all moved keyboard locations is listed <a href="./20230528#updated-keyboard-codebases">below</a>.</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="i-m-t-i" tabindex="-1"><code>IGNORE_MOD_TAP_INTERRUPT</code> behaviour changes (<a href="https://github.com/qmk/qmk_firmware/pull/20211" target="_blank" rel="noreferrer">#20211</a>) <a class="header-anchor" href="#i-m-t-i" aria-label="Permalink to &quot;`IGNORE_MOD_TAP_INTERRUPT` behaviour changes ([#20211](https://github.com/qmk/qmk_firmware/pull/20211)) {#i-m-t-i}&quot;"></a></h3><p>Following up from the last breaking changes cycle, <code>IGNORE_MOD_TAP_INTERRUPT</code> has been removed and if present in keymap code, will now fail to build. The previous functionality for <code>IGNORE_MOD_TAP_INTERRUPT</code> is now default, and should you wish to revert to the old behaviour, you can use <code>HOLD_ON_OTHER_KEY_PRESS</code> instead.</p><p>For more information, you are invited to read the section on <a href="./../tap_hold#hold-on-other-key-press">HOLD_ON_OTHER_KEY_PRESS</a> in the page on <a href="./../tap_hold">Tap-Hold configuration options</a>.</p><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><table><thead><tr><th>Old Keyboard Name</th><th>New Keyboard Name</th></tr></thead><tbody><tr><td>ashpil/modelm_usbc</td><td>ibm/model_m/ashpil_usbc</td></tr><tr><td>binepad/bn009r2</td><td>binepad/bn009/r2</td></tr><tr><td>converter/modelm101</td><td>ibm/model_m/teensypp</td></tr><tr><td>converter/modelm101_teensy2</td><td>ibm/model_m/teensy2</td></tr><tr><td>converter/modelm_ssk</td><td>ibm/model_m_ssk/teensypp_ssk</td></tr><tr><td>durgod/dgk6x/hades</td><td>durgod/dgk6x/hades_ansi</td></tr><tr><td>handwired/ibm122m</td><td>ibm/model_m_122/ibm122m</td></tr><tr><td>jacky_studio/piggy60/hotswap</td><td>jacky_studio/piggy60/rev1/hotswap</td></tr><tr><td>jacky_studio/piggy60/solder</td><td>jacky_studio/piggy60/rev1/solder</td></tr><tr><td>kamigakushi</td><td>jaykeeb/kamigakushi</td></tr><tr><td>massdrop/thekey</td><td>drop/thekey/v1</td></tr><tr><td>massdrop/thekey_v2</td><td>drop/thekey/v2</td></tr><tr><td>mschwingen/modelm</td><td>ibm/model_m/mschwingen</td></tr><tr><td>tronguylabs/m122_3270</td><td>ibm/model_m_122/m122_3270</td></tr><tr><td>tronguylabs/m122_3270/blackpill</td><td>ibm/model_m_122/m122_3270/blackpill</td></tr><tr><td>tronguylabs/m122_3270/bluepill</td><td>ibm/model_m_122/m122_3270/bluepill</td></tr><tr><td>tronguylabs/m122_3270/teensy</td><td>ibm/model_m_122/m122_3270/teensy</td></tr><tr><td>yugo_m/model_m_101</td><td>ibm/model_m/yugo_m</td></tr></tbody></table><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><h3 id="encoder-functionality-fallback" tabindex="-1">Encoder functionality fallback (<a href="https://github.com/qmk/qmk_firmware/pull/20320" target="_blank" rel="noreferrer">#20320</a>) <a class="header-anchor" href="#encoder-functionality-fallback" aria-label="Permalink to &quot;Encoder functionality fallback ([#20320](https://github.com/qmk/qmk_firmware/pull/20320)) {#encoder-functionality-fallback}&quot;"></a></h3><p>For keyboards who have not yet been migrated to encoder map, a default set of encoder functionality is now enabled, gracefully degrading functionality depending on which flags are enabled by the keyboard:</p><ul><li>If <code>EXTRAKEY_ENABLE</code> is enabled by the keyboard, the encoder will be mapped to <code>KC_VOLU</code>/<code>KC_VOLD</code></li><li>If <code>MOUSEKEY_ENABLE</code> is enabled by the keyboard, the encoder will be mapped to <code>KC_MS_WH_UP</code>/<code>KC_MS_WH_DOWN</code></li><li>Otherwise, <code>KC_PGDN</code>/<code>KC_PGUP</code> will be used</li></ul><p>Additionally, this ensures that builds on QMK Configurator produce some sort of usable encoder mapping.</p><h3 id="oled-driver-improvements" tabindex="-1">OLED Driver Improvements (<a href="https://github.com/qmk/qmk_firmware/pull/20331" target="_blank" rel="noreferrer">#20331</a>) <a class="header-anchor" href="#oled-driver-improvements" aria-label="Permalink to &quot;OLED Driver Improvements ([#20331](https://github.com/qmk/qmk_firmware/pull/20331)) {#oled-driver-improvements}&quot;"></a></h3><p>The &quot;classic&quot; OLED driver picked up support for additional sizes of OLED displays, support for the SH1107 controller, and SPI-based OLED support.</p><p>Other configurable items are available and can be found on the <a href="./../features/oled_driver">OLED Driver page</a>.</p><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>Refactor <code>keyevent_t</code> for 1ms timing resolution (<a href="https://github.com/qmk/qmk_firmware/pull/15847" target="_blank" rel="noreferrer">#15847</a>)</li><li>PS/2 PIO Driver for RP2040 (<a href="https://github.com/qmk/qmk_firmware/pull/17893" target="_blank" rel="noreferrer">#17893</a>)</li><li>Relocate various modifier defines (<a href="https://github.com/qmk/qmk_firmware/pull/18638" target="_blank" rel="noreferrer">#18638</a>)</li><li>Added PMW3320 driver (<a href="https://github.com/qmk/qmk_firmware/pull/19543" target="_blank" rel="noreferrer">#19543</a>)</li><li>Keymap introspection for combos. (<a href="https://github.com/qmk/qmk_firmware/pull/19670" target="_blank" rel="noreferrer">#19670</a>)</li><li>Add direction to dynamic_macro_record_start_user (<a href="https://github.com/qmk/qmk_firmware/pull/19689" target="_blank" rel="noreferrer">#19689</a>)</li><li>Add Repeat Key (&quot;repeat last key&quot;) as a core feature. (<a href="https://github.com/qmk/qmk_firmware/pull/19700" target="_blank" rel="noreferrer">#19700</a>)</li><li>[Cleanup] Quantum Painter (<a href="https://github.com/qmk/qmk_firmware/pull/19825" target="_blank" rel="noreferrer">#19825</a>)</li><li>Improve robustness of AW20216 driver (<a href="https://github.com/qmk/qmk_firmware/pull/19849" target="_blank" rel="noreferrer">#19849</a>)</li><li>Make &quot;detected_host_os()&quot; available on the SLAVE side of the split keyboard (<a href="https://github.com/qmk/qmk_firmware/pull/19854" target="_blank" rel="noreferrer">#19854</a>)</li><li>Add RP2040 Community Edition alias for splitkb.com&#39;s Liatris controller (<a href="https://github.com/qmk/qmk_firmware/pull/19966" target="_blank" rel="noreferrer">#19966</a>)</li><li>Remove some use of keymap.h (<a href="https://github.com/qmk/qmk_firmware/pull/19980" target="_blank" rel="noreferrer">#19980</a>)</li><li>Merge upstream changes to uf2conv (<a href="https://github.com/qmk/qmk_firmware/pull/19993" target="_blank" rel="noreferrer">#19993</a>)</li><li>Remove keymap.h (<a href="https://github.com/qmk/qmk_firmware/pull/20004" target="_blank" rel="noreferrer">#20004</a>)</li><li>Remove some use of keymap.h (<a href="https://github.com/qmk/qmk_firmware/pull/20006" target="_blank" rel="noreferrer">#20006</a>)</li><li>Quantum Painter QoL enhancements -- auto-poweroff, auto-flush, buffer sizing (<a href="https://github.com/qmk/qmk_firmware/pull/20013" target="_blank" rel="noreferrer">#20013</a>)</li><li>Make Pointing Device Auto Layer more configurable (<a href="https://github.com/qmk/qmk_firmware/pull/20061" target="_blank" rel="noreferrer">#20061</a>)</li><li>Add last activity functions for pointing device (<a href="https://github.com/qmk/qmk_firmware/pull/20079" target="_blank" rel="noreferrer">#20079</a>)</li><li>Caps Word &quot;Invert on shift&quot; option: pressing Shift inverts the shift state. (<a href="https://github.com/qmk/qmk_firmware/pull/20092" target="_blank" rel="noreferrer">#20092</a>)</li><li>Remove bootloader logic from <code>mcu_selection.mk</code> (<a href="https://github.com/qmk/qmk_firmware/pull/20150" target="_blank" rel="noreferrer">#20150</a>)</li><li>Update qmk_cli container references (<a href="https://github.com/qmk/qmk_firmware/pull/20154" target="_blank" rel="noreferrer">#20154</a>)</li><li>Clean up APA102 config and add DD mapping (<a href="https://github.com/qmk/qmk_firmware/pull/20159" target="_blank" rel="noreferrer">#20159</a>)</li><li>Sync activity timestamps between sides. (<a href="https://github.com/qmk/qmk_firmware/pull/20192" target="_blank" rel="noreferrer">#20192</a>)</li><li>Update Doxygen comments for some headers (<a href="https://github.com/qmk/qmk_firmware/pull/20194" target="_blank" rel="noreferrer">#20194</a>)</li><li>Make IGNORE_MOD_TAP_INTERRUPT the default behaviour for mod-taps (<a href="https://github.com/qmk/qmk_firmware/pull/20211" target="_blank" rel="noreferrer">#20211</a>)</li><li>Add some helpers to tidy up XAP (<a href="https://github.com/qmk/qmk_firmware/pull/20235" target="_blank" rel="noreferrer">#20235</a>)</li><li>Tidy up duplication of MIN/MAX fallback implementations (<a href="https://github.com/qmk/qmk_firmware/pull/20236" target="_blank" rel="noreferrer">#20236</a>)</li><li>Optionally keep intermediate file listings in order to do comparisons between builds. (<a href="https://github.com/qmk/qmk_firmware/pull/20237" target="_blank" rel="noreferrer">#20237</a>)</li><li>Add basic profiler. (<a href="https://github.com/qmk/qmk_firmware/pull/20238" target="_blank" rel="noreferrer">#20238</a>)</li><li>WS2812 driver improvements (<a href="https://github.com/qmk/qmk_firmware/pull/20262" target="_blank" rel="noreferrer">#20262</a>)</li><li>typing_heatmap: Add macro to configure increase steps (<a href="https://github.com/qmk/qmk_firmware/pull/20300" target="_blank" rel="noreferrer">#20300</a>)</li><li>Migrate <code>rgblight.pin</code> and <code>RGB_DI_PIN</code> to <code>ws2812.pin</code> (<a href="https://github.com/qmk/qmk_firmware/pull/20303" target="_blank" rel="noreferrer">#20303</a>)</li><li>Delete config_common.h (<a href="https://github.com/qmk/qmk_firmware/pull/20312" target="_blank" rel="noreferrer">#20312</a>)</li><li>Allow EEPROM_DRIVER from info.json (<a href="https://github.com/qmk/qmk_firmware/pull/20313" target="_blank" rel="noreferrer">#20313</a>)</li><li>rp2040: *_PAL_MODE overridable for this platform too (<a href="https://github.com/qmk/qmk_firmware/pull/20314" target="_blank" rel="noreferrer">#20314</a>)</li><li>Add core/fallback encoder behaviour (<a href="https://github.com/qmk/qmk_firmware/pull/20320" target="_blank" rel="noreferrer">#20320</a>)</li><li>OLED Driver improvements (<a href="https://github.com/qmk/qmk_firmware/pull/20331" target="_blank" rel="noreferrer">#20331</a>)</li><li>[Chore] Remove stray mod tap interrupt defines and per key functions (<a href="https://github.com/qmk/qmk_firmware/pull/20347" target="_blank" rel="noreferrer">#20347</a>)</li><li>Add swap hands toggle functions (<a href="https://github.com/qmk/qmk_firmware/pull/20381" target="_blank" rel="noreferrer">#20381</a>)</li><li>Prevent Tri-Layer keys from stopping caps word (<a href="https://github.com/qmk/qmk_firmware/pull/20398" target="_blank" rel="noreferrer">#20398</a>)</li><li>quantum/action_util.c: Use uint8_t for oneshot_layer_data (<a href="https://github.com/qmk/qmk_firmware/pull/20423" target="_blank" rel="noreferrer">#20423</a>)</li><li>Encoder map direction define. (<a href="https://github.com/qmk/qmk_firmware/pull/20454" target="_blank" rel="noreferrer">#20454</a>)</li><li>Realign and size check EECONFIG structures (<a href="https://github.com/qmk/qmk_firmware/pull/20541" target="_blank" rel="noreferrer">#20541</a>)</li><li>Clean up ISSI drivers, Add IS31FL3736 support (<a href="https://github.com/qmk/qmk_firmware/pull/20572" target="_blank" rel="noreferrer">#20572</a>)</li><li>Add a user callback for pre process record (<a href="https://github.com/qmk/qmk_firmware/pull/20584" target="_blank" rel="noreferrer">#20584</a>)</li><li>Disable debug on QP&#39;s internal task (<a href="https://github.com/qmk/qmk_firmware/pull/20623" target="_blank" rel="noreferrer">#20623</a>)</li><li>Add required string header file (<a href="https://github.com/qmk/qmk_firmware/pull/20638" target="_blank" rel="noreferrer">#20638</a>)</li><li>Add Develop is31fl3736 multi drivers (<a href="https://github.com/qmk/qmk_firmware/pull/20642" target="_blank" rel="noreferrer">#20642</a>)</li><li>Support PS/2 mouse 9-bit output with MOUSE_EXTENDED_REPORT (<a href="https://github.com/qmk/qmk_firmware/pull/20734" target="_blank" rel="noreferrer">#20734</a>)</li><li>BIOI G60/Morgan65: use custom Bluetooth driver (<a href="https://github.com/qmk/qmk_firmware/pull/20897" target="_blank" rel="noreferrer">#20897</a>)</li><li>Move <code>pre_process_record_kb()</code> before <code>process_combo()</code> (<a href="https://github.com/qmk/qmk_firmware/pull/20969" target="_blank" rel="noreferrer">#20969</a>)</li><li>Implement UF2 device type id extension tag (<a href="https://github.com/qmk/qmk_firmware/pull/21029" target="_blank" rel="noreferrer">#21029</a>)</li></ul><p>CLI:</p><ul><li>Add force support to &#39;qmk git-submodule&#39; (<a href="https://github.com/qmk/qmk_firmware/pull/19705" target="_blank" rel="noreferrer">#19705</a>)</li><li>JSON encoder: improve sorting of layout dict keys (<a href="https://github.com/qmk/qmk_firmware/pull/19974" target="_blank" rel="noreferrer">#19974</a>)</li><li>Increase verbosity of make command (<a href="https://github.com/qmk/qmk_firmware/pull/20172" target="_blank" rel="noreferrer">#20172</a>)</li><li>Append user variables to the end of make command (<a href="https://github.com/qmk/qmk_firmware/pull/20177" target="_blank" rel="noreferrer">#20177</a>)</li><li>Strip API specific output from <code>qmk info</code> (<a href="https://github.com/qmk/qmk_firmware/pull/20234" target="_blank" rel="noreferrer">#20234</a>)</li><li><code>qmk find</code>: usability improvements (<a href="https://github.com/qmk/qmk_firmware/pull/20440" target="_blank" rel="noreferrer">#20440</a>)</li><li><code>qmk format-json</code>: Expose full key path and respect <code>sort_keys</code> (<a href="https://github.com/qmk/qmk_firmware/pull/20836" target="_blank" rel="noreferrer">#20836</a>)</li><li>Update json2c to use dump_lines (<a href="https://github.com/qmk/qmk_firmware/pull/21013" target="_blank" rel="noreferrer">#21013</a>)</li></ul><p>Submodule updates:</p><ul><li>Update ChibiOS to latest stable 21.11.x (<a href="https://github.com/qmk/qmk_firmware/pull/20470" target="_blank" rel="noreferrer">#20470</a>)</li></ul><p>Keyboards:</p><ul><li>Allow a larger int for the idle timeout for urbanvanilla keymap (<a href="https://github.com/qmk/qmk_firmware/pull/19738" target="_blank" rel="noreferrer">#19738</a>)</li><li>Change aidansmithdotdev/fine40 to use Encoder Map (<a href="https://github.com/qmk/qmk_firmware/pull/19912" target="_blank" rel="noreferrer">#19912</a>)</li><li>Custom keycodes in JSON (<a href="https://github.com/qmk/qmk_firmware/pull/19925" target="_blank" rel="noreferrer">#19925</a>)</li><li>Remove <code>&quot;w&quot;:1</code> and <code>&quot;h&quot;:1</code> from info.json (<a href="https://github.com/qmk/qmk_firmware/pull/19961" target="_blank" rel="noreferrer">#19961</a>)</li><li>Move matrix config to info.json, part 1 (<a href="https://github.com/qmk/qmk_firmware/pull/19985" target="_blank" rel="noreferrer">#19985</a>)</li><li>Move matrix config to info.json, part 2 (<a href="https://github.com/qmk/qmk_firmware/pull/19987" target="_blank" rel="noreferrer">#19987</a>)</li><li>Move matrix config to info.json, part 3 (<a href="https://github.com/qmk/qmk_firmware/pull/19991" target="_blank" rel="noreferrer">#19991</a>)</li><li>Move matrix config to info.json, part 4 (<a href="https://github.com/qmk/qmk_firmware/pull/20001" target="_blank" rel="noreferrer">#20001</a>)</li><li>Move matrix config to info.json, part 5 (<a href="https://github.com/qmk/qmk_firmware/pull/20003" target="_blank" rel="noreferrer">#20003</a>)</li><li>Move matrix config to info.json, part 6 (<a href="https://github.com/qmk/qmk_firmware/pull/20019" target="_blank" rel="noreferrer">#20019</a>)</li><li>Move matrix config to info.json, part 7 (<a href="https://github.com/qmk/qmk_firmware/pull/20020" target="_blank" rel="noreferrer">#20020</a>)</li><li>Move matrix config to info.json, part 8 (<a href="https://github.com/qmk/qmk_firmware/pull/20030" target="_blank" rel="noreferrer">#20030</a>)</li><li>Remove empty rules.mk from keymaps (<a href="https://github.com/qmk/qmk_firmware/pull/20056" target="_blank" rel="noreferrer">#20056</a>)</li><li>Adjust offset for some layouts (<a href="https://github.com/qmk/qmk_firmware/pull/20075" target="_blank" rel="noreferrer">#20075</a>)</li><li>Remove useless &quot;ifdef KEYBOARD_*&quot; (<a href="https://github.com/qmk/qmk_firmware/pull/20078" target="_blank" rel="noreferrer">#20078</a>)</li><li>Remove pointless <code>USE_I2C</code> blocks in keyboard headers (<a href="https://github.com/qmk/qmk_firmware/pull/20084" target="_blank" rel="noreferrer">#20084</a>)</li><li>Add support for ISO version of Durgod Hades (<a href="https://github.com/qmk/qmk_firmware/pull/20110" target="_blank" rel="noreferrer">#20110</a>)</li><li>Consolidate Binepad BN009 R1 and R2 into common folder (<a href="https://github.com/qmk/qmk_firmware/pull/20113" target="_blank" rel="noreferrer">#20113</a>)</li><li>Remove more empty headers (<a href="https://github.com/qmk/qmk_firmware/pull/20155" target="_blank" rel="noreferrer">#20155</a>)</li><li>Remove trailing zeroes in info.json layouts (<a href="https://github.com/qmk/qmk_firmware/pull/20156" target="_blank" rel="noreferrer">#20156</a>)</li><li>Clean up usage of <code>QMK_KEYBOARD_H</code> (<a href="https://github.com/qmk/qmk_firmware/pull/20167" target="_blank" rel="noreferrer">#20167</a>)</li><li>Move Keychron Q0 and Q0 Plus data-driven configuration; <code>keychron</code> keymap <code>rules.mk</code> cleanup (<a href="https://github.com/qmk/qmk_firmware/pull/20168" target="_blank" rel="noreferrer">#20168</a>)</li><li>Move ortho &amp; numpad layouts to data driven (<a href="https://github.com/qmk/qmk_firmware/pull/20183" target="_blank" rel="noreferrer">#20183</a>)</li><li>Remove <code>RGB_DI_PIN</code> ifdefs (<a href="https://github.com/qmk/qmk_firmware/pull/20218" target="_blank" rel="noreferrer">#20218</a>)</li><li>Add the KJ-Modify RS40 PCB keyboard (<a href="https://github.com/qmk/qmk_firmware/pull/20243" target="_blank" rel="noreferrer">#20243</a>)</li><li>Move <code>WS2812_DRIVER</code> to data driven (<a href="https://github.com/qmk/qmk_firmware/pull/20248" target="_blank" rel="noreferrer">#20248</a>)</li><li>[jacky_studio/piggy60] move AVR PCB under rev1 (<a href="https://github.com/qmk/qmk_firmware/pull/20253" target="_blank" rel="noreferrer">#20253</a>)</li><li>Move 75% and 96% layouts to data driven (<a href="https://github.com/qmk/qmk_firmware/pull/20289" target="_blank" rel="noreferrer">#20289</a>)</li><li>Move split layouts to data driven (<a href="https://github.com/qmk/qmk_firmware/pull/20290" target="_blank" rel="noreferrer">#20290</a>)</li><li>Move 66% and 68% layouts to data driven (<a href="https://github.com/qmk/qmk_firmware/pull/20293" target="_blank" rel="noreferrer">#20293</a>)</li><li>add jacky_studio/piggy60/rev2 (<a href="https://github.com/qmk/qmk_firmware/pull/20297" target="_blank" rel="noreferrer">#20297</a>)</li><li>Move 65% layouts to data driven (<a href="https://github.com/qmk/qmk_firmware/pull/20308" target="_blank" rel="noreferrer">#20308</a>)</li><li>Move TKL F13 and FRL layouts to data driven (<a href="https://github.com/qmk/qmk_firmware/pull/20310" target="_blank" rel="noreferrer">#20310</a>)</li><li>Remove some use of keymap.h (<a href="https://github.com/qmk/qmk_firmware/pull/20316" target="_blank" rel="noreferrer">#20316</a>)</li><li>Move fullsize layouts to data driven (<a href="https://github.com/qmk/qmk_firmware/pull/20317" target="_blank" rel="noreferrer">#20317</a>)</li><li>Add 36-key layout for Beekeeb Piantor (<a href="https://github.com/qmk/qmk_firmware/pull/20328" target="_blank" rel="noreferrer">#20328</a>)</li><li>Add sriwedari70 and move kamigakushi to new folder (<a href="https://github.com/qmk/qmk_firmware/pull/20334" target="_blank" rel="noreferrer">#20334</a>)</li><li>Move TKL layouts to data driven (<a href="https://github.com/qmk/qmk_firmware/pull/20337" target="_blank" rel="noreferrer">#20337</a>)</li><li>Move Alice and Ergodox layouts to data driven (<a href="https://github.com/qmk/qmk_firmware/pull/20340" target="_blank" rel="noreferrer">#20340</a>)</li><li>Move small macropad-ish layouts to data driven (<a href="https://github.com/qmk/qmk_firmware/pull/20341" target="_blank" rel="noreferrer">#20341</a>)</li><li>Move <code>default</code> layouts to data driven (<a href="https://github.com/qmk/qmk_firmware/pull/20349" target="_blank" rel="noreferrer">#20349</a>)</li><li>Move <code>RGB_MATRIX_DRIVER</code> to data driven (<a href="https://github.com/qmk/qmk_firmware/pull/20350" target="_blank" rel="noreferrer">#20350</a>)</li><li>Move split space/backspace layouts to data driven (<a href="https://github.com/qmk/qmk_firmware/pull/20356" target="_blank" rel="noreferrer">#20356</a>)</li><li>Move single <code>LAYOUT</code>s to data driven (<a href="https://github.com/qmk/qmk_firmware/pull/20365" target="_blank" rel="noreferrer">#20365</a>)</li><li>Add encoder map for Iris Rev. 5 VIA (<a href="https://github.com/qmk/qmk_firmware/pull/20412" target="_blank" rel="noreferrer">#20412</a>)</li><li>Move remaining <code>LAYOUT</code>s to data driven (<a href="https://github.com/qmk/qmk_firmware/pull/20422" target="_blank" rel="noreferrer">#20422</a>)</li><li>Move single <code>LAYOUT_all</code>s to data driven (<a href="https://github.com/qmk/qmk_firmware/pull/20430" target="_blank" rel="noreferrer">#20430</a>)</li><li>4pplet/yakiimo Layout Macro Conversion and Additions (<a href="https://github.com/qmk/qmk_firmware/pull/20436" target="_blank" rel="noreferrer">#20436</a>)</li><li>Move single <code>60_ansi</code>, <code>60_hhkb</code> and <code>60_iso</code> layouts to data driven (<a href="https://github.com/qmk/qmk_firmware/pull/20438" target="_blank" rel="noreferrer">#20438</a>)</li><li>Update brauner preonic layout (<a href="https://github.com/qmk/qmk_firmware/pull/20439" target="_blank" rel="noreferrer">#20439</a>)</li><li>AEBoards Satellite Rev1 Layout Macro Conversion (<a href="https://github.com/qmk/qmk_firmware/pull/20442" target="_blank" rel="noreferrer">#20442</a>)</li><li>Acheron Austin Layout Macro Conversion and Additions (<a href="https://github.com/qmk/qmk_firmware/pull/20443" target="_blank" rel="noreferrer">#20443</a>)</li><li>Move remaining <code>LAYOUT_all</code>s to data driven (<a href="https://github.com/qmk/qmk_firmware/pull/20463" target="_blank" rel="noreferrer">#20463</a>)</li><li>Update lotus58 RGB config (<a href="https://github.com/qmk/qmk_firmware/pull/20468" target="_blank" rel="noreferrer">#20468</a>)</li><li>Cleanup <code>ekow/akira</code> (<a href="https://github.com/qmk/qmk_firmware/pull/20474" target="_blank" rel="noreferrer">#20474</a>)</li><li>Move 60% layouts to data driven (<a href="https://github.com/qmk/qmk_firmware/pull/20477" target="_blank" rel="noreferrer">#20477</a>)</li><li>Move DZ60 and MJ6XY layouts to data driven (<a href="https://github.com/qmk/qmk_firmware/pull/20478" target="_blank" rel="noreferrer">#20478</a>)</li><li>AEBoards Constellation Layout Macro Updates (<a href="https://github.com/qmk/qmk_firmware/pull/20487" target="_blank" rel="noreferrer">#20487</a>)</li><li>AI03 Equinox Layout Macro Additions (<a href="https://github.com/qmk/qmk_firmware/pull/20488" target="_blank" rel="noreferrer">#20488</a>)</li><li>AI03 Vega Layout Macro Additions (<a href="https://github.com/qmk/qmk_firmware/pull/20489" target="_blank" rel="noreferrer">#20489</a>)</li><li>AKB OGR Layout Macro Additions (<a href="https://github.com/qmk/qmk_firmware/pull/20490" target="_blank" rel="noreferrer">#20490</a>)</li><li>AKB Vero Layout Macro Additions (<a href="https://github.com/qmk/qmk_firmware/pull/20491" target="_blank" rel="noreferrer">#20491</a>)</li><li>Alf DC60 Layout Macro Additions (<a href="https://github.com/qmk/qmk_firmware/pull/20494" target="_blank" rel="noreferrer">#20494</a>)</li><li>Alf X2 Layout Macro Additions (<a href="https://github.com/qmk/qmk_firmware/pull/20495" target="_blank" rel="noreferrer">#20495</a>)</li><li>Koolertron AMAG23 Touch-Up (<a href="https://github.com/qmk/qmk_firmware/pull/20496" target="_blank" rel="noreferrer">#20496</a>)</li><li>BIOI G60 Layout Macro Additions (<a href="https://github.com/qmk/qmk_firmware/pull/20498" target="_blank" rel="noreferrer">#20498</a>)</li><li>BIOI Morgan65 Layout Macro Additions (<a href="https://github.com/qmk/qmk_firmware/pull/20499" target="_blank" rel="noreferrer">#20499</a>)</li><li>BIOI S65 Layout Macro Additions (<a href="https://github.com/qmk/qmk_firmware/pull/20500" target="_blank" rel="noreferrer">#20500</a>)</li><li>Boston Layout Macro Additions (<a href="https://github.com/qmk/qmk_firmware/pull/20504" target="_blank" rel="noreferrer">#20504</a>)</li><li>Potato65S Layout Macro Additions (<a href="https://github.com/qmk/qmk_firmware/pull/20508" target="_blank" rel="noreferrer">#20508</a>)</li><li>Move miscellaneous layouts to data driven (<a href="https://github.com/qmk/qmk_firmware/pull/20516" target="_blank" rel="noreferrer">#20516</a>)</li><li>Cable Car Designs Cypher rev6 Layout Additions and Touch-Up (<a href="https://github.com/qmk/qmk_firmware/pull/20518" target="_blank" rel="noreferrer">#20518</a>)</li><li>Caffeinated Studios Serpent65 Layout Macro Additions (<a href="https://github.com/qmk/qmk_firmware/pull/20519" target="_blank" rel="noreferrer">#20519</a>)</li><li>CannonKeys Adelie Layout Macro Additions (<a href="https://github.com/qmk/qmk_firmware/pull/20546" target="_blank" rel="noreferrer">#20546</a>)</li><li>CannonKeys Aella Layout Macro Additions (<a href="https://github.com/qmk/qmk_firmware/pull/20547" target="_blank" rel="noreferrer">#20547</a>)</li><li>CannonKeys Balance Layout Macro Additions and Touch-Up (<a href="https://github.com/qmk/qmk_firmware/pull/20548" target="_blank" rel="noreferrer">#20548</a>)</li><li>CannonKeys Brutal v2 1800 Layout Macro Additions (<a href="https://github.com/qmk/qmk_firmware/pull/20549" target="_blank" rel="noreferrer">#20549</a>)</li><li>CannonKeys Brutal v2 65 Layout Macro Additions (<a href="https://github.com/qmk/qmk_firmware/pull/20552" target="_blank" rel="noreferrer">#20552</a>)</li><li>CannonKeys Cloudline Layout Macro Additions (<a href="https://github.com/qmk/qmk_firmware/pull/20553" target="_blank" rel="noreferrer">#20553</a>)</li><li>CannonKeys Crin Layout Macro Additions (<a href="https://github.com/qmk/qmk_firmware/pull/20554" target="_blank" rel="noreferrer">#20554</a>)</li><li>CannonKeys DevastatingTKL Layout Macro Additions (<a href="https://github.com/qmk/qmk_firmware/pull/20555" target="_blank" rel="noreferrer">#20555</a>)</li><li>CannonKeys Ellipse Layout Macro Additions (<a href="https://github.com/qmk/qmk_firmware/pull/20558" target="_blank" rel="noreferrer">#20558</a>)</li><li>CannonKeys Ellipse Hotswap Layout Macro Addition &amp; Touch-Up (<a href="https://github.com/qmk/qmk_firmware/pull/20560" target="_blank" rel="noreferrer">#20560</a>)</li><li>CannonKeys Gentoo Layout Macro Additions (<a href="https://github.com/qmk/qmk_firmware/pull/20561" target="_blank" rel="noreferrer">#20561</a>)</li><li>CannonKeys Gentoo Hotswap Touch-Up (<a href="https://github.com/qmk/qmk_firmware/pull/20562" target="_blank" rel="noreferrer">#20562</a>)</li><li>CannonKeys HoodrowG Layout Macro Additions (<a href="https://github.com/qmk/qmk_firmware/pull/20563" target="_blank" rel="noreferrer">#20563</a>)</li><li>CannonKeys Moment Layout Macro Additions (<a href="https://github.com/qmk/qmk_firmware/pull/20564" target="_blank" rel="noreferrer">#20564</a>)</li><li>CannonKeys Moment Hotswap Touch-Up (<a href="https://github.com/qmk/qmk_firmware/pull/20565" target="_blank" rel="noreferrer">#20565</a>)</li><li>CannonKeys Nearfield Layout Macro Addition (<a href="https://github.com/qmk/qmk_firmware/pull/20566" target="_blank" rel="noreferrer">#20566</a>)</li><li>CannonKeys Obliterated75 Layout Macro Additions (<a href="https://github.com/qmk/qmk_firmware/pull/20567" target="_blank" rel="noreferrer">#20567</a>)</li><li>CannonKeys Onyx Layout Macro Additions (<a href="https://github.com/qmk/qmk_firmware/pull/20568" target="_blank" rel="noreferrer">#20568</a>)</li><li>CannonKeys Rekt1800 Layout Macro Additions (<a href="https://github.com/qmk/qmk_firmware/pull/20569" target="_blank" rel="noreferrer">#20569</a>)</li><li>CannonKeys Serenity Layout Macro Additions (<a href="https://github.com/qmk/qmk_firmware/pull/20570" target="_blank" rel="noreferrer">#20570</a>)</li><li>CannonKeys Vector Layout Macro Additions (<a href="https://github.com/qmk/qmk_firmware/pull/20571" target="_blank" rel="noreferrer">#20571</a>)</li><li>Carbo65 Community Layout support (<a href="https://github.com/qmk/qmk_firmware/pull/20580" target="_blank" rel="noreferrer">#20580</a>)</li><li>cest73 TKM Layout Macro Additions (<a href="https://github.com/qmk/qmk_firmware/pull/20583" target="_blank" rel="noreferrer">#20583</a>)</li><li>Charue Charon Layout Macro Additions (<a href="https://github.com/qmk/qmk_firmware/pull/20585" target="_blank" rel="noreferrer">#20585</a>)</li><li>Charue Sunsetter R2 Layout Macro Additions (<a href="https://github.com/qmk/qmk_firmware/pull/20586" target="_blank" rel="noreferrer">#20586</a>)</li><li>Remove <code>FLIP_HALF</code> layouts and move to data driven (<a href="https://github.com/qmk/qmk_firmware/pull/20588" target="_blank" rel="noreferrer">#20588</a>)</li><li>update ymdk/id75/rules.mk for develop (<a href="https://github.com/qmk/qmk_firmware/pull/20592" target="_blank" rel="noreferrer">#20592</a>)</li><li>CherryB Studio CB1800 Layout Macro Additions (<a href="https://github.com/qmk/qmk_firmware/pull/20593" target="_blank" rel="noreferrer">#20593</a>)</li><li>CherryB Studio CB65 Layout Macro Additions (<a href="https://github.com/qmk/qmk_firmware/pull/20594" target="_blank" rel="noreferrer">#20594</a>)</li><li>CherryB Studio CB87RGB Layout Macro Additions (<a href="https://github.com/qmk/qmk_firmware/pull/20595" target="_blank" rel="noreferrer">#20595</a>)</li><li>CheckerBoards G_IDB60 Layout Macro Edits (<a href="https://github.com/qmk/qmk_firmware/pull/20596" target="_blank" rel="noreferrer">#20596</a>)</li><li>CherryB Studio CB87v2 Layout Macro Additions (<a href="https://github.com/qmk/qmk_firmware/pull/20597" target="_blank" rel="noreferrer">#20597</a>)</li><li>CX60 Community Layout Support (<a href="https://github.com/qmk/qmk_firmware/pull/20598" target="_blank" rel="noreferrer">#20598</a>)</li><li>Demiurge Layout Macro Touch-Up (<a href="https://github.com/qmk/qmk_firmware/pull/20599" target="_blank" rel="noreferrer">#20599</a>)</li><li>Ducky One 2 SF 1967ST Layout Macro Additions (<a href="https://github.com/qmk/qmk_firmware/pull/20600" target="_blank" rel="noreferrer">#20600</a>)</li><li>Move <code>FORCE_NKRO</code> to data driven (<a href="https://github.com/qmk/qmk_firmware/pull/20604" target="_blank" rel="noreferrer">#20604</a>)</li><li>dyz Synthesis60 Layout Macro Addition (<a href="https://github.com/qmk/qmk_firmware/pull/20610" target="_blank" rel="noreferrer">#20610</a>)</li><li>DZTech Bocc Layout Macro Additions (<a href="https://github.com/qmk/qmk_firmware/pull/20611" target="_blank" rel="noreferrer">#20611</a>)</li><li>E88 Layout Macro Additions (<a href="https://github.com/qmk/qmk_firmware/pull/20612" target="_blank" rel="noreferrer">#20612</a>)</li><li>Emery65 Layout Macro Additions (<a href="https://github.com/qmk/qmk_firmware/pull/20613" target="_blank" rel="noreferrer">#20613</a>)</li><li>EvyD13 MX5160 Layout Macro Additions (<a href="https://github.com/qmk/qmk_firmware/pull/20614" target="_blank" rel="noreferrer">#20614</a>)</li><li>FJLabs AD65 Layout Macro Additions (<a href="https://github.com/qmk/qmk_firmware/pull/20619" target="_blank" rel="noreferrer">#20619</a>)</li><li>FJLabs Avalon Layout Additions and Touch-Up (<a href="https://github.com/qmk/qmk_firmware/pull/20620" target="_blank" rel="noreferrer">#20620</a>)</li><li>FJLabs Midway60 Layout Macro Additions (<a href="https://github.com/qmk/qmk_firmware/pull/20621" target="_blank" rel="noreferrer">#20621</a>)</li><li>FJLabs Polaris Layout Additions and Touch-Up (<a href="https://github.com/qmk/qmk_firmware/pull/20622" target="_blank" rel="noreferrer">#20622</a>)</li><li>FJLabs Sinanju WK Layout Additions and Touch-Up (<a href="https://github.com/qmk/qmk_firmware/pull/20628" target="_blank" rel="noreferrer">#20628</a>)</li><li>LFK87 refactor (<a href="https://github.com/qmk/qmk_firmware/pull/20635" target="_blank" rel="noreferrer">#20635</a>)</li><li>Fox Lab Time80 Layout Macro Additions (<a href="https://github.com/qmk/qmk_firmware/pull/20636" target="_blank" rel="noreferrer">#20636</a>)</li><li>FJLabs Solanis Layout Macro Additions (<a href="https://github.com/qmk/qmk_firmware/pull/20639" target="_blank" rel="noreferrer">#20639</a>)</li><li>GrayStudio Aero 75 Refactor and Touch-Up (<a href="https://github.com/qmk/qmk_firmware/pull/20640" target="_blank" rel="noreferrer">#20640</a>)</li><li>Move <code>USB_MAX_POWER_CONSUMPTION</code> to data driven (<a href="https://github.com/qmk/qmk_firmware/pull/20648" target="_blank" rel="noreferrer">#20648</a>)</li><li><code>info.json</code> whitespace cleanups (<a href="https://github.com/qmk/qmk_firmware/pull/20651" target="_blank" rel="noreferrer">#20651</a>)</li><li>Hand88 Layout Macro Additions (<a href="https://github.com/qmk/qmk_firmware/pull/20657" target="_blank" rel="noreferrer">#20657</a>)</li><li>Cyberstar Handwired Layout Macro Additions (<a href="https://github.com/qmk/qmk_firmware/pull/20658" target="_blank" rel="noreferrer">#20658</a>)</li><li>split_65 Handwired Layout Macro Addition and Touch-Up (<a href="https://github.com/qmk/qmk_firmware/pull/20659" target="_blank" rel="noreferrer">#20659</a>)</li><li>Bebol Handwired Layout Macro Additions (<a href="https://github.com/qmk/qmk_firmware/pull/20660" target="_blank" rel="noreferrer">#20660</a>)</li><li>Glacier Handwired Layout Macro Addition and Touch-Up (<a href="https://github.com/qmk/qmk_firmware/pull/20661" target="_blank" rel="noreferrer">#20661</a>)</li><li>Koalafications Handwired Layout Macro Additions (<a href="https://github.com/qmk/qmk_firmware/pull/20662" target="_blank" rel="noreferrer">#20662</a>)</li><li>The Galleon Handwired Layout Macro Additions (<a href="https://github.com/qmk/qmk_firmware/pull/20663" target="_blank" rel="noreferrer">#20663</a>)</li><li>More <code>info.json</code> whitespace cleanups (<a href="https://github.com/qmk/qmk_firmware/pull/20665" target="_blank" rel="noreferrer">#20665</a>)</li><li>Remove use of layout macros for LFKeyboards LED config (<a href="https://github.com/qmk/qmk_firmware/pull/20666" target="_blank" rel="noreferrer">#20666</a>)</li><li>Helix rev2: remove 4 rows option (<a href="https://github.com/qmk/qmk_firmware/pull/20667" target="_blank" rel="noreferrer">#20667</a>)</li><li>Wakizashi40 Handwired Touch-Up (<a href="https://github.com/qmk/qmk_firmware/pull/20671" target="_blank" rel="noreferrer">#20671</a>)</li><li>yttyx: convert readme to utf-8 encoding (<a href="https://github.com/qmk/qmk_firmware/pull/20672" target="_blank" rel="noreferrer">#20672</a>)</li><li>Alicia Cook Layout Macro Additions (<a href="https://github.com/qmk/qmk_firmware/pull/20675" target="_blank" rel="noreferrer">#20675</a>)</li><li>Primus75 Layout Macro Additions (<a href="https://github.com/qmk/qmk_firmware/pull/20676" target="_blank" rel="noreferrer">#20676</a>)</li><li>Volcano660 Layout Macro Additions (<a href="https://github.com/qmk/qmk_firmware/pull/20677" target="_blank" rel="noreferrer">#20677</a>)</li><li>Iris Keyboards Iris60 Layout Macro Additions (<a href="https://github.com/qmk/qmk_firmware/pull/20678" target="_blank" rel="noreferrer">#20678</a>)</li><li>Irene Layout Macro Additions (<a href="https://github.com/qmk/qmk_firmware/pull/20679" target="_blank" rel="noreferrer">#20679</a>)</li><li>Iron180 Layout Macro Additions (<a href="https://github.com/qmk/qmk_firmware/pull/20680" target="_blank" rel="noreferrer">#20680</a>)</li><li>kinesis/alvicstep: remove kicad project files (<a href="https://github.com/qmk/qmk_firmware/pull/20681" target="_blank" rel="noreferrer">#20681</a>)</li><li>Remove more junk files and scripts (<a href="https://github.com/qmk/qmk_firmware/pull/20682" target="_blank" rel="noreferrer">#20682</a>)</li><li>JKeys Design Gentleman65 Layout Macro Addition and Touch-Up (<a href="https://github.com/qmk/qmk_firmware/pull/20684" target="_blank" rel="noreferrer">#20684</a>)</li><li>JKeys Design Gentleman65 Suited Edition Layout Macro Addition (<a href="https://github.com/qmk/qmk_firmware/pull/20685" target="_blank" rel="noreferrer">#20685</a>)</li><li>add additional layouts to <code>dactyl_manuform</code> variants (<a href="https://github.com/qmk/qmk_firmware/pull/20688" target="_blank" rel="noreferrer">#20688</a>)</li><li>TheDogKeyboard Layout Macro Addition (<a href="https://github.com/qmk/qmk_firmware/pull/20689" target="_blank" rel="noreferrer">#20689</a>)</li><li>KBDfans Bella Soldered Layout Macro Additions (<a href="https://github.com/qmk/qmk_firmware/pull/20691" target="_blank" rel="noreferrer">#20691</a>)</li><li>KBDfans Bounce75 Hotswap Touch-Up (<a href="https://github.com/qmk/qmk_firmware/pull/20692" target="_blank" rel="noreferrer">#20692</a>)</li><li>KBDfans KBD66 Layout Additions and Refactor (<a href="https://github.com/qmk/qmk_firmware/pull/20693" target="_blank" rel="noreferrer">#20693</a>)</li><li>KBDfans Odin RGB Touch-Up (<a href="https://github.com/qmk/qmk_firmware/pull/20694" target="_blank" rel="noreferrer">#20694</a>)</li><li>KBDfans Odin Soldered Layout Additions and Touch-Up (<a href="https://github.com/qmk/qmk_firmware/pull/20695" target="_blank" rel="noreferrer">#20695</a>)</li><li>keebzdotnet FMe Layout Additions (<a href="https://github.com/qmk/qmk_firmware/pull/20696" target="_blank" rel="noreferrer">#20696</a>)</li><li>Kegen G-Boy Layout Additions (<a href="https://github.com/qmk/qmk_firmware/pull/20697" target="_blank" rel="noreferrer">#20697</a>)</li><li>Escape Unicode characters in info.json (<a href="https://github.com/qmk/qmk_firmware/pull/20698" target="_blank" rel="noreferrer">#20698</a>)</li><li>Kiko&#39;s Lab Ellora65 Layout Additions (<a href="https://github.com/qmk/qmk_firmware/pull/20699" target="_blank" rel="noreferrer">#20699</a>)</li><li>Even more <code>info.json</code> whitespace cleanups (<a href="https://github.com/qmk/qmk_firmware/pull/20703" target="_blank" rel="noreferrer">#20703</a>)</li><li>kkatano Bakeneko 65 V3 Layout Additions (<a href="https://github.com/qmk/qmk_firmware/pull/20706" target="_blank" rel="noreferrer">#20706</a>)</li><li>kopibeng MNK65 Layout Additions (<a href="https://github.com/qmk/qmk_firmware/pull/20708" target="_blank" rel="noreferrer">#20708</a>)</li><li>kopibeng Typ65+ Layout Additions (<a href="https://github.com/qmk/qmk_firmware/pull/20710" target="_blank" rel="noreferrer">#20710</a>)</li><li>kopibeng XT60 Layout Additions (<a href="https://github.com/qmk/qmk_firmware/pull/20711" target="_blank" rel="noreferrer">#20711</a>)</li><li>kopibeng XT60_SINGA Layout Additions (<a href="https://github.com/qmk/qmk_firmware/pull/20712" target="_blank" rel="noreferrer">#20712</a>)</li><li>kopibeng XT8x Layout Additions (<a href="https://github.com/qmk/qmk_firmware/pull/20713" target="_blank" rel="noreferrer">#20713</a>)</li><li>Lefty Touch-Up (<a href="https://github.com/qmk/qmk_firmware/pull/20714" target="_blank" rel="noreferrer">#20714</a>)</li><li>Loki65 Layout Additions (<a href="https://github.com/qmk/qmk_firmware/pull/20715" target="_blank" rel="noreferrer">#20715</a>)</li><li>Lucid Alexa Solder Layout Additions (<a href="https://github.com/qmk/qmk_firmware/pull/20716" target="_blank" rel="noreferrer">#20716</a>)</li><li>Lucid Phantom Soldered Layout Additions (<a href="https://github.com/qmk/qmk_firmware/pull/20717" target="_blank" rel="noreferrer">#20717</a>)</li><li>Leftover30 Layout Addition (<a href="https://github.com/qmk/qmk_firmware/pull/20718" target="_blank" rel="noreferrer">#20718</a>)</li><li>Matrix Cain RE Touch-Up (<a href="https://github.com/qmk/qmk_firmware/pull/20719" target="_blank" rel="noreferrer">#20719</a>)</li><li>Matrix Lab 8XV1.2 OG Layout Updates (<a href="https://github.com/qmk/qmk_firmware/pull/20720" target="_blank" rel="noreferrer">#20720</a>)</li><li>Mechlovin Studio Hex6C Layout Additions (<a href="https://github.com/qmk/qmk_firmware/pull/20722" target="_blank" rel="noreferrer">#20722</a>)</li><li>Mechlovin.Studio Rogue87 Rev.1 Layout Additions (<a href="https://github.com/qmk/qmk_firmware/pull/20724" target="_blank" rel="noreferrer">#20724</a>)</li><li>Mechlovin.Studio Rouge87 Rev.1 Layout Additions (<a href="https://github.com/qmk/qmk_firmware/pull/20725" target="_blank" rel="noreferrer">#20725</a>)</li><li>Mechlovin.Studio infinity87 Rev.1 Layout Additions (<a href="https://github.com/qmk/qmk_firmware/pull/20726" target="_blank" rel="noreferrer">#20726</a>)</li><li>Mechlovin.Studio Infinity87 RGB Rev1 Layout Additions (<a href="https://github.com/qmk/qmk_firmware/pull/20727" target="_blank" rel="noreferrer">#20727</a>)</li><li>Mechlovin9 Layout Addition (<a href="https://github.com/qmk/qmk_firmware/pull/20728" target="_blank" rel="noreferrer">#20728</a>)</li><li>1upkeyboards/pi50 WS2812_DI_PIN patch for develop (<a href="https://github.com/qmk/qmk_firmware/pull/20731" target="_blank" rel="noreferrer">#20731</a>)</li><li>Mechlovin.Studio Infinity87 Rev.2 Layout Additions (<a href="https://github.com/qmk/qmk_firmware/pull/20735" target="_blank" rel="noreferrer">#20735</a>)</li><li>Mechlovin.Studio Olly JF Layout Additions (<a href="https://github.com/qmk/qmk_firmware/pull/20736" target="_blank" rel="noreferrer">#20736</a>)</li><li>Mechlovin Studio Serratus Layout Additions (<a href="https://github.com/qmk/qmk_firmware/pull/20737" target="_blank" rel="noreferrer">#20737</a>)</li><li>MechWild Mercutio Layout Addition (<a href="https://github.com/qmk/qmk_firmware/pull/20738" target="_blank" rel="noreferrer">#20738</a>)</li><li>MisterKnife Knife66 ISO Layout Addition (<a href="https://github.com/qmk/qmk_firmware/pull/20739" target="_blank" rel="noreferrer">#20739</a>)</li><li>MNK1800s Layout Addition (<a href="https://github.com/qmk/qmk_firmware/pull/20740" target="_blank" rel="noreferrer">#20740</a>)</li><li>MNK75 Layout Additions (<a href="https://github.com/qmk/qmk_firmware/pull/20741" target="_blank" rel="noreferrer">#20741</a>)</li><li>Mode SixtyFive S Layout Additions (<a href="https://github.com/qmk/qmk_firmware/pull/20742" target="_blank" rel="noreferrer">#20742</a>)</li><li>Mode SeventyFive H Layout Addition (<a href="https://github.com/qmk/qmk_firmware/pull/20743" target="_blank" rel="noreferrer">#20743</a>)</li><li>Monstargear XO87 Soldered Layout Additions (<a href="https://github.com/qmk/qmk_firmware/pull/20744" target="_blank" rel="noreferrer">#20744</a>)</li><li>MTBKeys MTB60 Solder Layout Additions (<a href="https://github.com/qmk/qmk_firmware/pull/20745" target="_blank" rel="noreferrer">#20745</a>)</li><li>Nix Keyboards Day Off 60 Touch-Up and Layout Additions (<a href="https://github.com/qmk/qmk_firmware/pull/20746" target="_blank" rel="noreferrer">#20746</a>)</li><li>Kastenwagen 1840 Layout Addition (<a href="https://github.com/qmk/qmk_firmware/pull/20747" target="_blank" rel="noreferrer">#20747</a>)</li><li>Kastenwagen 48 Layout Addition (<a href="https://github.com/qmk/qmk_firmware/pull/20748" target="_blank" rel="noreferrer">#20748</a>)</li><li>NovelKeys NK87 Touch-Up (<a href="https://github.com/qmk/qmk_firmware/pull/20749" target="_blank" rel="noreferrer">#20749</a>)</li><li>NovelKeys NK87B Touch-Up (<a href="https://github.com/qmk/qmk_firmware/pull/20750" target="_blank" rel="noreferrer">#20750</a>)</li><li>Noxary 378 Layout Addition (<a href="https://github.com/qmk/qmk_firmware/pull/20751" target="_blank" rel="noreferrer">#20751</a>)</li><li>Noxary Valhalla Layout Addition (<a href="https://github.com/qmk/qmk_firmware/pull/20752" target="_blank" rel="noreferrer">#20752</a>)</li><li>Nightly Boards/DeskDaily Daily60 Layout Additions (<a href="https://github.com/qmk/qmk_firmware/pull/20753" target="_blank" rel="noreferrer">#20753</a>)</li><li>Odelia Touch-Up (<a href="https://github.com/qmk/qmk_firmware/pull/20754" target="_blank" rel="noreferrer">#20754</a>)</li><li>One Key Co Dango40 Touch-Up and Layout Addition (<a href="https://github.com/qmk/qmk_firmware/pull/20755" target="_blank" rel="noreferrer">#20755</a>)</li><li>P3D Glitch Layout Addition (<a href="https://github.com/qmk/qmk_firmware/pull/20763" target="_blank" rel="noreferrer">#20763</a>)</li><li>Pearl Boards Pandora Layout Additions (<a href="https://github.com/qmk/qmk_firmware/pull/20764" target="_blank" rel="noreferrer">#20764</a>)</li><li>Pearl Boards Pearl Layout Addition (<a href="https://github.com/qmk/qmk_firmware/pull/20765" target="_blank" rel="noreferrer">#20765</a>)</li><li>support boards with APM32 instead of the STM32 (<a href="https://github.com/qmk/qmk_firmware/pull/20770" target="_blank" rel="noreferrer">#20770</a>)</li><li>Pearl Boards Zeus Layout Additions (<a href="https://github.com/qmk/qmk_firmware/pull/20773" target="_blank" rel="noreferrer">#20773</a>)</li><li>Peej Rosaline Staggered Layout Additions (<a href="https://github.com/qmk/qmk_firmware/pull/20774" target="_blank" rel="noreferrer">#20774</a>)</li><li>plywrks Lune Layout Touch-Up (<a href="https://github.com/qmk/qmk_firmware/pull/20775" target="_blank" rel="noreferrer">#20775</a>)</li><li>Project Keyboard Signature65 Layout Additions (<a href="https://github.com/qmk/qmk_firmware/pull/20776" target="_blank" rel="noreferrer">#20776</a>)</li><li>protoTypist Allison Layout Additions (<a href="https://github.com/qmk/qmk_firmware/pull/20777" target="_blank" rel="noreferrer">#20777</a>)</li><li>Prototypist J-01 Rev1 Layout Additions (<a href="https://github.com/qmk/qmk_firmware/pull/20778" target="_blank" rel="noreferrer">#20778</a>)</li><li>Protozoa Cassini Layout Additions (<a href="https://github.com/qmk/qmk_firmware/pull/20779" target="_blank" rel="noreferrer">#20779</a>)</li><li>Protozoa P.01 Layout Additions (<a href="https://github.com/qmk/qmk_firmware/pull/20781" target="_blank" rel="noreferrer">#20781</a>)</li><li>QwertleKeys Calice Layout Addition (<a href="https://github.com/qmk/qmk_firmware/pull/20782" target="_blank" rel="noreferrer">#20782</a>)</li><li>Ramlord WITF Layout Touch-Up and Addition (<a href="https://github.com/qmk/qmk_firmware/pull/20783" target="_blank" rel="noreferrer">#20783</a>)</li><li>Rart45: rename LAYOUT_all to LAYOUT (<a href="https://github.com/qmk/qmk_firmware/pull/20784" target="_blank" rel="noreferrer">#20784</a>)</li><li>Rart60 Layout Additions (<a href="https://github.com/qmk/qmk_firmware/pull/20785" target="_blank" rel="noreferrer">#20785</a>)</li><li>Rart67 Layout Additions (<a href="https://github.com/qmk/qmk_firmware/pull/20786" target="_blank" rel="noreferrer">#20786</a>)</li><li>Rart67M: rename LAYOUT_all to LAYOUT (<a href="https://github.com/qmk/qmk_firmware/pull/20787" target="_blank" rel="noreferrer">#20787</a>)</li><li>RART75 Layout Additions (<a href="https://github.com/qmk/qmk_firmware/pull/20788" target="_blank" rel="noreferrer">#20788</a>)</li><li>RART75 Hotswap Layout Additions (<a href="https://github.com/qmk/qmk_firmware/pull/20789" target="_blank" rel="noreferrer">#20789</a>)</li><li>RART75M: rename LAYOUT_all to LAYOUT (<a href="https://github.com/qmk/qmk_firmware/pull/20790" target="_blank" rel="noreferrer">#20790</a>)</li><li>RART80 Hotswap Layout Additions (<a href="https://github.com/qmk/qmk_firmware/pull/20791" target="_blank" rel="noreferrer">#20791</a>)</li><li>Rartand Layout Additions (<a href="https://github.com/qmk/qmk_firmware/pull/20799" target="_blank" rel="noreferrer">#20799</a>)</li><li>Rartlice: rename LAYOUT_all to LAYOUT (<a href="https://github.com/qmk/qmk_firmware/pull/20800" target="_blank" rel="noreferrer">#20800</a>)</li><li>Ratio65 Hotswap: rename LAYOUT_all to LAYOUT_65_ansi_blocker (<a href="https://github.com/qmk/qmk_firmware/pull/20801" target="_blank" rel="noreferrer">#20801</a>)</li><li>Ratio65 Solder Layout Additions (<a href="https://github.com/qmk/qmk_firmware/pull/20802" target="_blank" rel="noreferrer">#20802</a>)</li><li>Specifying the default board file is redundant (<a href="https://github.com/qmk/qmk_firmware/pull/20807" target="_blank" rel="noreferrer">#20807</a>)</li><li>RGBKB Pan Layout Additions (<a href="https://github.com/qmk/qmk_firmware/pull/20809" target="_blank" rel="noreferrer">#20809</a>)</li><li>saevus cor Layout Additions (<a href="https://github.com/qmk/qmk_firmware/pull/20810" target="_blank" rel="noreferrer">#20810</a>)</li><li>Clean up trailing commas from info.json (<a href="https://github.com/qmk/qmk_firmware/pull/20812" target="_blank" rel="noreferrer">#20812</a>)</li><li>Enable LTO on salicylic acid 7skb to reduce size (<a href="https://github.com/qmk/qmk_firmware/pull/20813" target="_blank" rel="noreferrer">#20813</a>)</li><li>Reduce compiled size for mt64rgb&#39;s via keymap (<a href="https://github.com/qmk/qmk_firmware/pull/20814" target="_blank" rel="noreferrer">#20814</a>)</li><li>Reduce compiled size for prototypist oceanographer&#39;s via keymap (<a href="https://github.com/qmk/qmk_firmware/pull/20816" target="_blank" rel="noreferrer">#20816</a>)</li><li>Sauce Mild Layout Additions (<a href="https://github.com/qmk/qmk_firmware/pull/20818" target="_blank" rel="noreferrer">#20818</a>)</li><li>VCL x SawnsProjects VCL65 Layout Additions (<a href="https://github.com/qmk/qmk_firmware/pull/20819" target="_blank" rel="noreferrer">#20819</a>)</li><li>senselessclay had60 Layout Additions (<a href="https://github.com/qmk/qmk_firmware/pull/20820" target="_blank" rel="noreferrer">#20820</a>)</li><li>Space Holdings Nebula12B (<a href="https://github.com/qmk/qmk_firmware/pull/20821" target="_blank" rel="noreferrer">#20821</a>)</li><li>SmithRune Iron180 Layout Additions (<a href="https://github.com/qmk/qmk_firmware/pull/20822" target="_blank" rel="noreferrer">#20822</a>)</li><li>Stello65 Beta Layout Additions and Clean-Up (<a href="https://github.com/qmk/qmk_firmware/pull/20824" target="_blank" rel="noreferrer">#20824</a>)</li><li>Studio Kestra Nue Layout Additions (<a href="https://github.com/qmk/qmk_firmware/pull/20825" target="_blank" rel="noreferrer">#20825</a>)</li><li>Switchplate Peripherals 910 Layout Additions (<a href="https://github.com/qmk/qmk_firmware/pull/20827" target="_blank" rel="noreferrer">#20827</a>)</li><li>TKC California Layout Addition and Touch-Up (<a href="https://github.com/qmk/qmk_firmware/pull/20829" target="_blank" rel="noreferrer">#20829</a>)</li><li>TKC M0lly Layout Additions (<a href="https://github.com/qmk/qmk_firmware/pull/20830" target="_blank" rel="noreferrer">#20830</a>)</li><li>TKC TKL A/B87 Layout Additions (<a href="https://github.com/qmk/qmk_firmware/pull/20831" target="_blank" rel="noreferrer">#20831</a>)</li><li>Viendi 8L Layout Additions (<a href="https://github.com/qmk/qmk_firmware/pull/20832" target="_blank" rel="noreferrer">#20832</a>)</li><li>Viktus Smolka Layout Additions (<a href="https://github.com/qmk/qmk_firmware/pull/20833" target="_blank" rel="noreferrer">#20833</a>)</li><li>Viktus SP111 Layout Additions (<a href="https://github.com/qmk/qmk_firmware/pull/20834" target="_blank" rel="noreferrer">#20834</a>)</li><li>Viktus SP_Mini Layout Additions (<a href="https://github.com/qmk/qmk_firmware/pull/20835" target="_blank" rel="noreferrer">#20835</a>)</li><li>W1-AT Layout Additions (<a href="https://github.com/qmk/qmk_firmware/pull/20842" target="_blank" rel="noreferrer">#20842</a>)</li><li>Weirdo Geminate60 Layout Additions (<a href="https://github.com/qmk/qmk_firmware/pull/20843" target="_blank" rel="noreferrer">#20843</a>)</li><li>Cypher rev5 Layout Additions (<a href="https://github.com/qmk/qmk_firmware/pull/20844" target="_blank" rel="noreferrer">#20844</a>)</li><li>Prophet Layout Additions (<a href="https://github.com/qmk/qmk_firmware/pull/20845" target="_blank" rel="noreferrer">#20845</a>)</li><li>Tidy up encoder_map directions (<a href="https://github.com/qmk/qmk_firmware/pull/20847" target="_blank" rel="noreferrer">#20847</a>)</li><li>Rama Works Koyu Community Layout Support (<a href="https://github.com/qmk/qmk_firmware/pull/20848" target="_blank" rel="noreferrer">#20848</a>)</li><li>Rama Works M65-B Community Layout Support (<a href="https://github.com/qmk/qmk_firmware/pull/20850" target="_blank" rel="noreferrer">#20850</a>)</li><li>Rama Works M65-BX Community Layout Support (<a href="https://github.com/qmk/qmk_firmware/pull/20851" target="_blank" rel="noreferrer">#20851</a>)</li><li>Rama Works U80-A Community Layout Support (<a href="https://github.com/qmk/qmk_firmware/pull/20853" target="_blank" rel="noreferrer">#20853</a>)</li><li>Wilba Tech WT60-B Community Layout Support (<a href="https://github.com/qmk/qmk_firmware/pull/20854" target="_blank" rel="noreferrer">#20854</a>)</li><li>Wilba Tech WT60-BX Layout Additions and Touch-Up (<a href="https://github.com/qmk/qmk_firmware/pull/20855" target="_blank" rel="noreferrer">#20855</a>)</li><li>Wilba Tech WT60-C Community Layout Support (<a href="https://github.com/qmk/qmk_firmware/pull/20858" target="_blank" rel="noreferrer">#20858</a>)</li><li>Wilba Tech WT60-D Layout Addition and Touch-Up (<a href="https://github.com/qmk/qmk_firmware/pull/20859" target="_blank" rel="noreferrer">#20859</a>)</li><li>Wilba Tech WT60-G Community Layout Support (<a href="https://github.com/qmk/qmk_firmware/pull/20860" target="_blank" rel="noreferrer">#20860</a>)</li><li>Wilba Tech WT60-G2 Community Layout Support (<a href="https://github.com/qmk/qmk_firmware/pull/20861" target="_blank" rel="noreferrer">#20861</a>)</li><li>Wilba Tech WT60-H2: rename LAYOUT_all to LAYOUT_60_ansi_tsangan_split_rshift (<a href="https://github.com/qmk/qmk_firmware/pull/20864" target="_blank" rel="noreferrer">#20864</a>)</li><li>Wilba Tech WT60-XT Layout Additions and Touch-Up (<a href="https://github.com/qmk/qmk_firmware/pull/20865" target="_blank" rel="noreferrer">#20865</a>)</li><li>Wilba Tech WT65-A Community Layout Support and Touch-Up (<a href="https://github.com/qmk/qmk_firmware/pull/20866" target="_blank" rel="noreferrer">#20866</a>)</li><li>Wilba Tech WT65-B Layout Addition and Touch-Up (<a href="https://github.com/qmk/qmk_firmware/pull/20867" target="_blank" rel="noreferrer">#20867</a>)</li><li>Wilba Tech WT65-F Community Layout Support and Touch-Up (<a href="https://github.com/qmk/qmk_firmware/pull/20869" target="_blank" rel="noreferrer">#20869</a>)</li><li>Wilba Tech WT65-FX Community Layout Support (<a href="https://github.com/qmk/qmk_firmware/pull/20870" target="_blank" rel="noreferrer">#20870</a>)</li><li>Wilba Tech WT65-G Layout Additions and Touch-Up (<a href="https://github.com/qmk/qmk_firmware/pull/20871" target="_blank" rel="noreferrer">#20871</a>)</li><li>Wilba Tech WT65-G2 Layout Additions and Touch-Up (<a href="https://github.com/qmk/qmk_firmware/pull/20872" target="_blank" rel="noreferrer">#20872</a>)</li><li>Wilba Tech WT65-XT: rename LAYOUT_all to LAYOUT_65_xt_ansi_blocker_tsangan (<a href="https://github.com/qmk/qmk_firmware/pull/20873" target="_blank" rel="noreferrer">#20873</a>)</li><li>Wilba Tech WT65-XTX Layout Additions and Touch-Up (<a href="https://github.com/qmk/qmk_firmware/pull/20874" target="_blank" rel="noreferrer">#20874</a>)</li><li>Wilba Tech WT69-A Layout Addition and Touch-Up (<a href="https://github.com/qmk/qmk_firmware/pull/20875" target="_blank" rel="noreferrer">#20875</a>)</li><li>Wilba Tech WT70-JB Layout Addition and Touch-Up (<a href="https://github.com/qmk/qmk_firmware/pull/20876" target="_blank" rel="noreferrer">#20876</a>)</li><li>Wilba Tech WT75-A Layout Additions and Touch-Up (<a href="https://github.com/qmk/qmk_firmware/pull/20877" target="_blank" rel="noreferrer">#20877</a>)</li><li>Wilba Tech WT75-B Layout Additions and Touch-Up (<a href="https://github.com/qmk/qmk_firmware/pull/20878" target="_blank" rel="noreferrer">#20878</a>)</li><li>Wilba Tech WT75-C Layout Additions and Touch-Up (<a href="https://github.com/qmk/qmk_firmware/pull/20879" target="_blank" rel="noreferrer">#20879</a>)</li><li>Wilba Tech WT80-G Layout Additions and Touch-Up (<a href="https://github.com/qmk/qmk_firmware/pull/20880" target="_blank" rel="noreferrer">#20880</a>)</li><li>WinKeys Mini Winni: rename LAYOUT_all to LAYOUT_ortho_2x4 (<a href="https://github.com/qmk/qmk_firmware/pull/20881" target="_blank" rel="noreferrer">#20881</a>)</li><li>Scarlet Bandana Layout Additions (<a href="https://github.com/qmk/qmk_firmware/pull/20882" target="_blank" rel="noreferrer">#20882</a>)</li><li>Winkeyless B87 Community Layout Support (<a href="https://github.com/qmk/qmk_firmware/pull/20884" target="_blank" rel="noreferrer">#20884</a>)</li><li>Xelus AkiS Layout Additions (<a href="https://github.com/qmk/qmk_firmware/pull/20885" target="_blank" rel="noreferrer">#20885</a>)</li><li>Xelus Dharma Layout Additions (<a href="https://github.com/qmk/qmk_firmware/pull/20886" target="_blank" rel="noreferrer">#20886</a>)</li><li>Xelus Kangaroo Layout Additions (<a href="https://github.com/qmk/qmk_firmware/pull/20887" target="_blank" rel="noreferrer">#20887</a>)</li><li>Xelus La+ Layout Addition (<a href="https://github.com/qmk/qmk_firmware/pull/20888" target="_blank" rel="noreferrer">#20888</a>)</li><li>Xelus Pachi Mini 32U4 Community Layout Support (<a href="https://github.com/qmk/qmk_firmware/pull/20889" target="_blank" rel="noreferrer">#20889</a>)</li><li>Xelus Pachi rev1 Community Layout Support (<a href="https://github.com/qmk/qmk_firmware/pull/20891" target="_blank" rel="noreferrer">#20891</a>)</li><li>Xelus Trinity XT TKL Layout Additions (<a href="https://github.com/qmk/qmk_firmware/pull/20892" target="_blank" rel="noreferrer">#20892</a>)</li><li>Xelus Valor FRL TKL Layout Additions (<a href="https://github.com/qmk/qmk_firmware/pull/20893" target="_blank" rel="noreferrer">#20893</a>)</li><li>YDKB Chili Community Layout Support (<a href="https://github.com/qmk/qmk_firmware/pull/20895" target="_blank" rel="noreferrer">#20895</a>)</li><li>YDKB Grape Layout Additions (<a href="https://github.com/qmk/qmk_firmware/pull/20899" target="_blank" rel="noreferrer">#20899</a>)</li><li>YMDK Wings Layout Addition (<a href="https://github.com/qmk/qmk_firmware/pull/20900" target="_blank" rel="noreferrer">#20900</a>)</li><li>YMDK Wings Hotswap: rename LAYOUT_all to LAYOUT (<a href="https://github.com/qmk/qmk_firmware/pull/20901" target="_blank" rel="noreferrer">#20901</a>)</li><li>YMDK YM68 Community Layout Support (<a href="https://github.com/qmk/qmk_firmware/pull/20906" target="_blank" rel="noreferrer">#20906</a>)</li><li>Yugo-M Controller Layout Additions (<a href="https://github.com/qmk/qmk_firmware/pull/20907" target="_blank" rel="noreferrer">#20907</a>)</li><li>Zicodia TKLFRLNRLMLAO Layout Addition (<a href="https://github.com/qmk/qmk_firmware/pull/20908" target="_blank" rel="noreferrer">#20908</a>)</li><li>ZTBoards After Layout Addition (<a href="https://github.com/qmk/qmk_firmware/pull/20912" target="_blank" rel="noreferrer">#20912</a>)</li><li>ZTBoards Noon Layout Addition (<a href="https://github.com/qmk/qmk_firmware/pull/20913" target="_blank" rel="noreferrer">#20913</a>)</li><li>SawnsProjects Amber80 Solder Community Layout Support (<a href="https://github.com/qmk/qmk_firmware/pull/20917" target="_blank" rel="noreferrer">#20917</a>)</li><li>Pearl Boards Atlas Layout Additions (<a href="https://github.com/qmk/qmk_firmware/pull/20918" target="_blank" rel="noreferrer">#20918</a>)</li><li>Xiudi XD004: rename LAYOUT_all to LAYOUT_ortho_1x4 (<a href="https://github.com/qmk/qmk_firmware/pull/20919" target="_blank" rel="noreferrer">#20919</a>)</li><li>Wilba Tech WT80-BC Community Layout Support (<a href="https://github.com/qmk/qmk_firmware/pull/20920" target="_blank" rel="noreferrer">#20920</a>)</li><li>4pplet Eagle Viper REP Rev B Community Layout Support (<a href="https://github.com/qmk/qmk_firmware/pull/20921" target="_blank" rel="noreferrer">#20921</a>)</li><li>FR4Boards unix60 Layout Additions (<a href="https://github.com/qmk/qmk_firmware/pull/20926" target="_blank" rel="noreferrer">#20926</a>)</li><li>MC-76K: rename LAYOUT_all to LAYOUT (<a href="https://github.com/qmk/qmk_firmware/pull/20927" target="_blank" rel="noreferrer">#20927</a>)</li><li>Mechlovin Studio Jay60 Community Layout Support (<a href="https://github.com/qmk/qmk_firmware/pull/20928" target="_blank" rel="noreferrer">#20928</a>)</li><li>MisterKnife Knife66 Layout Additions (<a href="https://github.com/qmk/qmk_firmware/pull/20929" target="_blank" rel="noreferrer">#20929</a>)</li><li>MisterKnife Knife66 ISO Layout Additions II (<a href="https://github.com/qmk/qmk_firmware/pull/20930" target="_blank" rel="noreferrer">#20930</a>)</li><li>4pplet Waffling80 Community Layout Support and Touch-Up (<a href="https://github.com/qmk/qmk_firmware/pull/20932" target="_blank" rel="noreferrer">#20932</a>)</li><li>Acheron Elongate Delta: rename LAYOUT_all to LAYOUT (<a href="https://github.com/qmk/qmk_firmware/pull/20956" target="_blank" rel="noreferrer">#20956</a>)</li><li>ADPenrose Akemipad Layout Addition (<a href="https://github.com/qmk/qmk_firmware/pull/20957" target="_blank" rel="noreferrer">#20957</a>)</li><li>ADPenrose Shisaku: rename LAYOUT_all to LAYOUT (<a href="https://github.com/qmk/qmk_firmware/pull/20958" target="_blank" rel="noreferrer">#20958</a>)</li><li>AEBoards Aegis Layout Additions (<a href="https://github.com/qmk/qmk_firmware/pull/20960" target="_blank" rel="noreferrer">#20960</a>)</li><li>rart/rart80:via: restore rules.mk after #20334 (<a href="https://github.com/qmk/qmk_firmware/pull/21002" target="_blank" rel="noreferrer">#21002</a>)</li><li>Remove HHKB RN42 code (<a href="https://github.com/qmk/qmk_firmware/pull/21007" target="_blank" rel="noreferrer">#21007</a>)</li><li>Move <code>thekey</code> to Drop vendor folder (<a href="https://github.com/qmk/qmk_firmware/pull/21032" target="_blank" rel="noreferrer">#21032</a>)</li></ul><p>Keyboard fixes:</p><ul><li>userspace/community layout fixes (<a href="https://github.com/qmk/qmk_firmware/pull/19998" target="_blank" rel="noreferrer">#19998</a>)</li><li>Fix layout macro keys with no matrix position (<a href="https://github.com/qmk/qmk_firmware/pull/20033" target="_blank" rel="noreferrer">#20033</a>)</li><li>Restore matrix pins for ep/40 (<a href="https://github.com/qmk/qmk_firmware/pull/20083" target="_blank" rel="noreferrer">#20083</a>)</li><li>kbdfans/tiger80: remove duplicate keys in info.json (<a href="https://github.com/qmk/qmk_firmware/pull/20148" target="_blank" rel="noreferrer">#20148</a>)</li><li>Fixup z70ultra — replace mis-removed file (<a href="https://github.com/qmk/qmk_firmware/pull/20157" target="_blank" rel="noreferrer">#20157</a>)</li><li>Fixup CI build for F103C6 onekey. (<a href="https://github.com/qmk/qmk_firmware/pull/20188" target="_blank" rel="noreferrer">#20188</a>)</li><li>Fix layouts containing keys with multiple matrix positions (<a href="https://github.com/qmk/qmk_firmware/pull/20191" target="_blank" rel="noreferrer">#20191</a>)</li><li>Fix some more missing <code>#pragma once</code>s (<a href="https://github.com/qmk/qmk_firmware/pull/20241" target="_blank" rel="noreferrer">#20241</a>)</li><li>Fixup CI build for <code>nack</code>. (<a href="https://github.com/qmk/qmk_firmware/pull/20292" target="_blank" rel="noreferrer">#20292</a>)</li><li>Fixup Pointing device functions (<a href="https://github.com/qmk/qmk_firmware/pull/20311" target="_blank" rel="noreferrer">#20311</a>)</li><li>Fix a handful of CLI errors (<a href="https://github.com/qmk/qmk_firmware/pull/20321" target="_blank" rel="noreferrer">#20321</a>)</li><li>Fix API errors (<a href="https://github.com/qmk/qmk_firmware/pull/20326" target="_blank" rel="noreferrer">#20326</a>)</li><li>Set up DEFAULT_FOLDER for primekb/meridian (<a href="https://github.com/qmk/qmk_firmware/pull/20367" target="_blank" rel="noreferrer">#20367</a>)</li><li>Fix up via keymap builds. (<a href="https://github.com/qmk/qmk_firmware/pull/20383" target="_blank" rel="noreferrer">#20383</a>)</li><li>Fix up via keymap builds. (<a href="https://github.com/qmk/qmk_firmware/pull/20397" target="_blank" rel="noreferrer">#20397</a>)</li><li>Fix some missing QMK_KEYBOARD_H includes in user keymaps (<a href="https://github.com/qmk/qmk_firmware/pull/20417" target="_blank" rel="noreferrer">#20417</a>)</li><li>Update ymdk/id75 config (<a href="https://github.com/qmk/qmk_firmware/pull/20432" target="_blank" rel="noreferrer">#20432</a>)</li><li>Fix info.json LTO and format encoder definitions (<a href="https://github.com/qmk/qmk_firmware/pull/20456" target="_blank" rel="noreferrer">#20456</a>)</li><li>Fixup dymium65 RGB Pin on develop (<a href="https://github.com/qmk/qmk_firmware/pull/20473" target="_blank" rel="noreferrer">#20473</a>)</li><li>Fixup missing include in mxss <code>via</code> keymap (<a href="https://github.com/qmk/qmk_firmware/pull/20475" target="_blank" rel="noreferrer">#20475</a>)</li><li>Fix nk plus ws2812 config (<a href="https://github.com/qmk/qmk_firmware/pull/20524" target="_blank" rel="noreferrer">#20524</a>)</li><li>cannonkeys/ellipse_hs: correct layout macro references (<a href="https://github.com/qmk/qmk_firmware/pull/20577" target="_blank" rel="noreferrer">#20577</a>)</li><li>Remove use of layout macros for <code>music_map</code> (<a href="https://github.com/qmk/qmk_firmware/pull/20634" target="_blank" rel="noreferrer">#20634</a>)</li><li>Vertex/angle65 WS2812 pin fix (<a href="https://github.com/qmk/qmk_firmware/pull/20653" target="_blank" rel="noreferrer">#20653</a>)</li><li>Fix ws2812 pin for phantagom boards (<a href="https://github.com/qmk/qmk_firmware/pull/20670" target="_blank" rel="noreferrer">#20670</a>)</li><li>Fixup 1upkeyboards/pi50 (<a href="https://github.com/qmk/qmk_firmware/pull/20733" target="_blank" rel="noreferrer">#20733</a>)</li><li>Fix <code>test_json2c_no_json()</code> (<a href="https://github.com/qmk/qmk_firmware/pull/20756" target="_blank" rel="noreferrer">#20756</a>)</li><li>Fix mxss rgblight.c compilation issues (<a href="https://github.com/qmk/qmk_firmware/pull/20804" target="_blank" rel="noreferrer">#20804</a>)</li><li>Fixup paladin64 (<a href="https://github.com/qmk/qmk_firmware/pull/20805" target="_blank" rel="noreferrer">#20805</a>)</li><li>Fixup dogtag (<a href="https://github.com/qmk/qmk_firmware/pull/20808" target="_blank" rel="noreferrer">#20808</a>)</li><li>Fixup zwag75 (<a href="https://github.com/qmk/qmk_firmware/pull/20923" target="_blank" rel="noreferrer">#20923</a>)</li><li>Fixup latinpadble (<a href="https://github.com/qmk/qmk_firmware/pull/20924" target="_blank" rel="noreferrer">#20924</a>)</li><li>Add missing layout data for a handful of boards (<a href="https://github.com/qmk/qmk_firmware/pull/20931" target="_blank" rel="noreferrer">#20931</a>)</li><li>Fixup evo70 (<a href="https://github.com/qmk/qmk_firmware/pull/20949" target="_blank" rel="noreferrer">#20949</a>)</li><li>Fixup Crkbd default keymap (<a href="https://github.com/qmk/qmk_firmware/pull/20962" target="_blank" rel="noreferrer">#20962</a>)</li><li>Fix key display on Corne OLED (<a href="https://github.com/qmk/qmk_firmware/pull/21044" target="_blank" rel="noreferrer">#21044</a>)</li></ul><p>Others:</p><ul><li>Add layer-cycle example (<a href="https://github.com/qmk/qmk_firmware/pull/19069" target="_blank" rel="noreferrer">#19069</a>)</li><li>Remove remnants of Vagrant. (<a href="https://github.com/qmk/qmk_firmware/pull/20000" target="_blank" rel="noreferrer">#20000</a>)</li><li>Develop cleanup IS31FL3736 docs (<a href="https://github.com/qmk/qmk_firmware/pull/20633" target="_blank" rel="noreferrer">#20633</a>)</li><li>Organise config/rules &lt;-&gt; info mappings (<a href="https://github.com/qmk/qmk_firmware/pull/20723" target="_blank" rel="noreferrer">#20723</a>)</li><li>Add a change log for PR20584 (<a href="https://github.com/qmk/qmk_firmware/pull/20998" target="_blank" rel="noreferrer">#20998</a>)</li></ul><p>Bugs:</p><ul><li>Strip whitespace from CONVERT_TO variables (<a href="https://github.com/qmk/qmk_firmware/pull/19948" target="_blank" rel="noreferrer">#19948</a>)</li><li>Check all rows have the correct number of columns when parsing <code>g_led_config</code> (<a href="https://github.com/qmk/qmk_firmware/pull/19954" target="_blank" rel="noreferrer">#19954</a>)</li><li>Fix OSMs getting stuck (<a href="https://github.com/qmk/qmk_firmware/pull/20034" target="_blank" rel="noreferrer">#20034</a>)</li><li>Fix rgblight layers when animations aren&#39;t enabled (<a href="https://github.com/qmk/qmk_firmware/pull/20097" target="_blank" rel="noreferrer">#20097</a>)</li><li>Fixed split keyboard issue where custom LED indicators could activate incorrect LEDs (#20203) (<a href="https://github.com/qmk/qmk_firmware/pull/20204" target="_blank" rel="noreferrer">#20204</a>)</li><li>Reduce _validate complexity (<a href="https://github.com/qmk/qmk_firmware/pull/20274" target="_blank" rel="noreferrer">#20274</a>)</li><li><code>qmk info</code>: account for ISO enter when calculating layout X offset (<a href="https://github.com/qmk/qmk_firmware/pull/20325" target="_blank" rel="noreferrer">#20325</a>)</li><li>Disable specific warnings to mitigate compilation problems with <code>KEEP_INTERMEDIATES=yes</code>. (<a href="https://github.com/qmk/qmk_firmware/pull/20339" target="_blank" rel="noreferrer">#20339</a>)</li><li>Fix compilation issue with Swap Hands and Encoder Map (<a href="https://github.com/qmk/qmk_firmware/pull/20348" target="_blank" rel="noreferrer">#20348</a>)</li><li>Fix preprocessor condition for SPLIT_HAPTIC_ENABLE (<a href="https://github.com/qmk/qmk_firmware/pull/20411" target="_blank" rel="noreferrer">#20411</a>)</li><li>Fix compilation issues with PS/2 driver on F4x1 controllers (<a href="https://github.com/qmk/qmk_firmware/pull/20433" target="_blank" rel="noreferrer">#20433</a>)</li><li>Fix capital letters not getting sent with sendstring_swiss_fr.h (<a href="https://github.com/qmk/qmk_firmware/pull/20515" target="_blank" rel="noreferrer">#20515</a>)</li><li>Duplicate board files for blok converter (<a href="https://github.com/qmk/qmk_firmware/pull/20629" target="_blank" rel="noreferrer">#20629</a>)</li><li>Fix Mod-Tap combo regression (<a href="https://github.com/qmk/qmk_firmware/pull/20669" target="_blank" rel="noreferrer">#20669</a>)</li><li>Revert use of legacy wear leveling driver now ChibiOS is fixed (<a href="https://github.com/qmk/qmk_firmware/pull/20806" target="_blank" rel="noreferrer">#20806</a>)</li><li>Fix compilation error introduced by #20669 (<a href="https://github.com/qmk/qmk_firmware/pull/20849" target="_blank" rel="noreferrer">#20849</a>)</li><li>Fix English word list retrieval in qmk generate-autocorrect-data (<a href="https://github.com/qmk/qmk_firmware/pull/20915" target="_blank" rel="noreferrer">#20915</a>)</li><li>Improve keymap folder resolution (<a href="https://github.com/qmk/qmk_firmware/pull/20981" target="_blank" rel="noreferrer">#20981</a>)</li><li>Fix issue with Repeat Key-Combo test (<a href="https://github.com/qmk/qmk_firmware/pull/21005" target="_blank" rel="noreferrer">#21005</a>)</li><li><code>qmk info</code> - Remove printing of &quot;Keyboard Folder&quot; (<a href="https://github.com/qmk/qmk_firmware/pull/21033" target="_blank" rel="noreferrer">#21033</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("{\"breaking_changes_history.md\":\"CkzdD6x8\",\"breaking_changes_instructions.md\":\"BAjIGeJb\",\"chibios_upgrade_instructions.md\":\"B5dMtL5R\",\"cli.md\":\"BLzAdA6l\",\"cli_tab_complete.md\":\"ChaxfzYo\",\"coding_conventions_c.md\":\"DdrpXBEh\",\"cli_development.md\":\"3xFA2OvS\",\"api_development_environment.md\":\"EhJClb9f\",\"api_development_overview.md\":\"Dcey4ntL\",\"capabilities_inc.md\":\"Ca9zpMce\",\"changelog_20240526.md\":\"DAmAEDG5\",\"capabilities.md\":\"DgKwcj5n\",\"api_docs.md\":\"CRoD6CbL\",\"api_overview.md\":\"0FPaUsMb\",\"cli_configuration.md\":\"CGSB128P\",\"changelog_20200530.md\":\"Dk-vRpTQ\",\"changelog_20230226.md\":\"Cg0AYxIn\",\"arm_debugging.md\":\"BH-H2Ukz\",\"changelog_20221126.md\":\"DpbrnXeC\",\"changelog_20240225.md\":\"B4-WrXj6\",\"changelog_20230827.md\":\"NSPhmB6l\",\"config_options.md\":\"DvMeqlpB\",\"configurator_architecture.md\":\"DEFTvTlS\",\"coding_conventions_python.md\":\"BV-OK1s5\",\"configurator_step_by_step.md\":\"GvmPtScT\",\"custom_matrix.md\":\"DMnRw_5l\",\"changelog_20220226.md\":\"BWO5r_ec\",\"changelog_20230528.md\":\"nX9R48zP\",\"changelog_20201128.md\":\"7XXL02Bn\",\"configurator_default_keymaps.md\":\"B3v8dlHd\",\"changelog_20210227.md\":\"BWOtCaeS\",\"changelog_20210529.md\":\"CR1YNfZX\",\"changelog_20190830.md\":\"Drtq3lMy\",\"contributing.md\":\"DLsp4vSA\",\"changelog_20220827.md\":\"DjPthqDk\",\"changelog_20211127.md\":\"ClUawWkq\",\"breaking_changes.md\":\"BtdqWQlY\",\"changelog_20210828.md\":\"DNbHIuuM\",\"cli_commands.md\":\"DGx-qNiE\",\"changelog_20200229.md\":\"DNsowwM1\",\"feature_debounce_type.md\":\"CUrSp0Iy\",\"changelog_20231126.md\":\"D2Ok5QAf\",\"compatible_microcontrollers.md\":\"6HA6FJZJ\",\"configurator_troubleshooting.md\":\"BxGLPT8G\",\"changelog_20200829.md\":\"CoqrOffn\",\"custom_quantum_functions.md\":\"DrUNiV1i\",\"changelog_20220528.md\":\"BX3CCY1Z\",\"documentation_best_practices.md\":\"BtEjePaZ\",\"data_driven_config.md\":\"BvLQ7P20\",\"feature_layers.md\":\"8GwBUTZN\",\"easy_maker.md\":\"DAfbIK4w\",\"faq_build.md\":\"DL_WezA1\",\"faq_debug.md\":\"DuThValw\",\"faq_general.md\":\"BC3pFw4U\",\"drivers_apa102.md\":\"Qb-KXRpF\",\"drivers_ws2812.md\":\"D9E3Wb-Y\",\"drivers_gpio.md\":\"C5PvyJVh\",\"drivers_spi.md\":\"tJVeIT7e\",\"drivers_serial.md\":\"qxjytVdM\",\"feature_eeprom.md\":\"a0eoTZm7\",\"faq_keymap.md\":\"BsEmEZTo\",\"feature_converters.md\":\"DFKin1io\",\"drivers_i2c.md\":\"Cuj87reB\",\"driver_installation_zadig.md\":\"CX9-BACt\",\"faq_misc.md\":\"qGrhOTu4\",\"drivers_flash.md\":\"DhWcHp8S\",\"drivers_audio.md\":\"mqaz6p5N\",\"feature_advanced_keycodes.md\":\"CX8dJkY-\",\"documentation_templates.md\":\"Bhkum0wD\",\"drivers_adc.md\":\"DzU8txf8\",\"drivers_eeprom.md\":\"B_6soqar\",\"drivers_uart.md\":\"BNBs-m3h\",\"features_bluetooth.md\":\"CiAjl875\",\"features_caps_word.md\":\"BDQGM0-x\",\"features_bootmagic.md\":\"CeNSUsBQ\",\"features_command.md\":\"Byl9YoT7\",\"features_digitizer.md\":\"DGIGZFVx\",\"features_stenography.md\":\"Bb_IhUGl\",\"getting_started_docker.md\":\"mz6HE4Bl\",\"quantum_keycodes.md\":\"DM5WeUFF\",\"newbs_git_resynchronize_a_branch.md\":\"YGDefQFx\",\"newbs_building_firmware_workflow.md\":\"DpLVwA7x\",\"newbs_building_firmware_configurator.md\":\"yyo-1QDE\",\"newbs.md\":\"-YYNd3dT\",\"newbs_flashing.md\":\"B42m5Wln\",\"features_haptic_feedback.md\":\"DS8CmC7e\",\"features_dynamic_macros.md\":\"CrJ1vhBA\",\"features_dip_switch.md\":\"DtBOdc98\",\"features_hd44780.md\":\"15K40o_e\",\"features_audio.md\":\"DWNYte3W\",\"features_encoders.md\":\"B2SX3hG2\",\"features_grave_esc.md\":\"mUNEjUYS\",\"features_led_indicators.md\":\"CCZhjHe9\",\"features_midi.md\":\"u3tHPteB\",\"features_key_overrides.md\":\"rVTP6kn9\",\"features_joystick.md\":\"CW0gZHec\",\"features_leader_key.md\":\"DBQTnBRh\",\"features_os_detection.md\":\"DZKTWvSd\",\"features_mouse_keys.md\":\"C3P3pYuE\",\"features_split_keyboard.md\":\"mMTUzI5n\",\"features_st7565.md\":\"MoajNurJ\",\"features_repeat_key.md\":\"C3eWDUWn\",\"features_swap_hands.md\":\"DOhgGQf9\",\"features_wpm.md\":\"BYf-Xc1H\",\"flashing_bootloadhid.md\":\"aXGP0bN5\",\"getting_started_github.md\":\"OYq7IT7B\",\"getting_started_introduction.md\":\"BOJreqSs\",\"features_tap_dance.md\":\"CKLVpnIn\",\"platformdev_rp2040.md\":\"CYKYMDfc\",\"keycodes_magic.md\":\"CGO3hgMm\",\"keycodes_us_ansi_shifted.md\":\"Cs78SDfM\",\"hardware_drivers.md\":\"BUnx48D9\",\"getting_started_make_guide.md\":\"BjUuEnSh\",\"keymap.md\":\"Y4Fei1Ty\",\"hardware_keyboard_guidelines.md\":\"CJevsanE\",\"how_a_matrix_works.md\":\"JINKbCuX\",\"mod_tap.md\":\"C7wRKLcf\",\"how_keyboards_work.md\":\"CB7z8ocb\",\"index.md\":\"B4QYzvHE\",\"feature_userspace.md\":\"BsmY9yWw\",\"features_key_lock.md\":\"IjFq9dYs\",\"feature_layouts.md\":\"qcy8hNMO\",\"newbs_learn_more_resources.md\":\"Dj1s2BDG\",\"newbs_external_userspace.md\":\"pD9Lc-a5\",\"keycodes_basic.md\":\"CHIeCvwn\",\"newbs_testing_debugging.md\":\"D-c7Gle_\",\"newbs_building_firmware.md\":\"DnVUK9it\",\"isp_flashing_guide.md\":\"BiuBpOKX\",\"platformdev_blackpill_f4x1.md\":\"DvObLRuk\",\"newbs_git_best_practices.md\":\"BI2-EVI5\",\"keycodes.md\":\"hkOkKJPh\",\"platformdev_proton_c.md\":\"CDRuJBvD\",\"other_vscode.md\":\"Di3vOySR\",\"newbs_git_resolving_merge_conflicts.md\":\"72w3BRmm\",\"newbs_git_using_your_master_branch.md\":\"B9DxZCl8\",\"newbs_getting_started.md\":\"DD4a5qPC\",\"platformdev_chibios_earlyinit.md\":\"BQJSTP3y\",\"quantum_painter_lvgl.md\":\"DobNbSgA\",\"reference_glossary.md\":\"CXMuxToT\",\"reference_keymap_extras.md\":\"-n_bLm78\",\"quantum_painter_rle.md\":\"B07V3m-n\",\"platformdev_selecting_arm_mcu.md\":\"aF4DUsvb\",\"quantum_painter_qff.md\":\"kLNwshez\",\"ref_functions.md\":\"BVI2uXSN\",\"reference_info_json.md\":\"CEbbd-o6\",\"porting_your_keyboard_to_qmk.md\":\"CGlGdFj4\",\"quantum_painter_qgf.md\":\"BJNSu2s0\",\"support.md\":\"CwJ_H6Qx\",\"tap_hold.md\":\"DD8WTSla\",\"hand_wire.md\":\"CcI1spCv\",\"features_auto_shift.md\":\"B9HLt3QM\",\"features_backlight.md\":\"D7R4FkYo\",\"one_shot_keys.md\":\"QR09rSb-\",\"features_autocorrect.md\":\"DHRDcuho\",\"features_programmable_button.md\":\"D332w_PT\",\"features_send_string.md\":\"vM68un4v\",\"features_ps2_mouse.md\":\"CL_pA9sk\",\"features_secure.md\":\"BX7jFvW5\",\"features_space_cadet.md\":\"DmNfYRVJ\",\"features_led_matrix.md\":\"DV31nHH-\",\"features_oled_driver.md\":\"D9wJVdL1\",\"features_unicode.md\":\"CsON-fJH\",\"other_eclipse.md\":\"C-zqyJO9\",\"features_combo.md\":\"C-GfDyXJ\",\"features_tri_layer.md\":\"DdnBVinw\",\"pr_checklist.md\":\"BnrDXG2G\",\"flashing.md\":\"BSZF2RCy\",\"unit_testing.md\":\"u3fgbGUj\",\"squeezing_avr.md\":\"BmcLYKOr\",\"support_deprecation_policy.md\":\"CCo4ljiw\",\"feature_macros.md\":\"By1M5R8G\",\"quantum_painter.md\":\"BK_I9g4h\",\"syllabus.md\":\"B_ARGkLg\",\"understanding_qmk.md\":\"f-Bc_eHQ\",\"features_rawhid.md\":\"bKKG3KCa\",\"features_sequencer.md\":\"DkgqNCsQ\",\"features_pointing_device.md\":\"DP6-XwL6\",\"reference_configurator_support.md\":\"FaBQzIj6\",\"features_rgblight.md\":\"DehQikiL\",\"features_rgb_matrix.md\":\"R4jl5Yvh\"}");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\",\"items\":[{\"text\":\"Flashing\",\"link\":\"/flashing\"},{\"text\":\"Flashing ATmega32A (ps2avrgb)\",\"link\":\"/flashing_bootloadhid\"}]},{\"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/20240526\"},{\"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>