qmk_firmware/ChangeLog/20210828.html

112 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.

This file contains Unicode characters that might be confused with other characters. 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 - 2021 August 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.B7PFkdfJ.js"></script>
<link rel="preload" href="/assets/inter-roman-latin.Di8DUHzh.woff2" as="font" type="font/woff2" crossorigin="">
<link rel="modulepreload" href="/assets/chunks/theme.CkLEqEBY.js">
<link rel="modulepreload" href="/assets/chunks/framework.B9AX-CPi.js">
<link rel="modulepreload" href="/assets/ChangeLog_20210828.md.Bz_Cqhkz.lean.js">
<script id="check-dark-mode">(()=>{const e=localStorage.getItem("vitepress-theme-appearance")||"auto",a=window.matchMedia("(prefers-color-scheme: dark)").matches;(!e||e==="auto"?a:e==="dark")&&document.documentElement.classList.add("dark")})();</script>
<script id="check-mac-os">document.documentElement.classList.toggle("mac",/Mac|iPhone|iPod|iPad/i.test(navigator.platform));</script>
</head>
<body>
<div id="app"><div class="Layout" data-v-5d98c3a5><!--[--><!--]--><!--[--><span tabindex="-1" data-v-0f60ec36></span><a href="#VPContent" class="VPSkipLink visually-hidden" data-v-0f60ec36> Skip to content </a><!--]--><!----><header class="VPNav" data-v-5d98c3a5 data-v-ae24b3ad><div class="VPNavBar has-sidebar top" data-v-ae24b3ad data-v-ccf7ddec><div class="wrapper" data-v-ccf7ddec><div class="container" data-v-ccf7ddec><div class="title" data-v-ccf7ddec><div class="VPNavBarTitle has-sidebar" data-v-ccf7ddec data-v-ab179fa1><a class="title" href="/" data-v-ab179fa1><!--[--><!--]--><!--[--><!--[--><!--[--><img class="VPImage dark logo" src="/qmk-logo-dark.svg" alt data-v-8426fc1a><!--]--><!--[--><img class="VPImage light logo" src="/qmk-logo-light.svg" alt data-v-8426fc1a><!--]--><!--]--><!--]--><span data-v-ab179fa1>QMK Firmware</span><!--[--><!--]--></a></div></div><div class="content" data-v-ccf7ddec><div class="content-body" data-v-ccf7ddec><!--[--><!--]--><div class="VPNavBarSearch search" data-v-ccf7ddec><!--[--><!----><div id="local-search"><button type="button" class="DocSearch DocSearch-Button" aria-label="Search"><span class="DocSearch-Button-Container"><span class="vp-icon DocSearch-Search-Icon"></span><span class="DocSearch-Button-Placeholder">Search</span></span><span class="DocSearch-Button-Keys"><kbd class="DocSearch-Button-Key"></kbd><kbd class="DocSearch-Button-Key">K</kbd></span></button></div><!--]--></div><nav aria-labelledby="main-nav-aria-label" class="VPNavBarMenu menu" data-v-ccf7ddec data-v-7f418b0f><span id="main-nav-aria-label" class="visually-hidden" data-v-7f418b0f>Main Navigation</span><!--[--><!--[--><a class="VPLink link VPNavBarMenuLink" href="/" tabindex="0" data-v-7f418b0f data-v-9c663999><!--[--><span data-v-9c663999>Home</span><!--]--></a><!--]--><!--]--></nav><!----><div class="VPNavBarAppearance appearance" data-v-ccf7ddec data-v-e6aabb21><button class="VPSwitch VPSwitchAppearance" type="button" role="switch" title="Switch to dark theme" aria-checked="false" data-v-e6aabb21 data-v-d1f28634 data-v-1d5665e3><span class="check" data-v-1d5665e3><span class="icon" data-v-1d5665e3><!--[--><span class="vpi-sun sun" data-v-d1f28634></span><span class="vpi-moon moon" data-v-d1f28634></span><!--]--></span></span></button></div><div class="VPSocialLinks VPNavBarSocialLinks social-links" data-v-ccf7ddec data-v-0394ad82 data-v-7bc22406><!--[--><a class="VPSocialLink no-icon" href="https://reddit.com/r/olkb" aria-label target="_blank" rel="noopener" data-v-7bc22406 data-v-eee4e7cb><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 50 50" width="50px" height="50px"><path d="M 29 3 C 28.0625 3 27.164063 3.382813 26.5 4 C 25.835938 4.617188 25.363281 5.433594 25 6.40625 C 24.355469 8.140625 24.085938 10.394531 24.03125 13.03125 C 19.234375 13.179688 14.820313 14.421875 11.28125 16.46875 C 10.214844 15.46875 8.855469 14.96875 7.5 14.96875 C 6.089844 14.96875 4.675781 15.511719 3.59375 16.59375 C 1.425781 18.761719 1.425781 22.238281 3.59375 24.40625 L 3.84375 24.65625 C 3.3125 26.035156 3 27.488281 3 29 C 3 33.527344 5.566406 37.585938 9.5625 40.4375 C 13.558594 43.289063 19.007813 45 25 45 C 30.992188 45 36.441406 43.289063 40.4375 40.4375 C 44.433594 37.585938 47 33.527344 47 29 C 47 27.488281 46.6875 26.035156 46.15625 24.65625 L 46.40625 24.40625 C 48.574219 22.238281 48.574219 18.761719 46.40625 16.59375 C 45.324219 15.511719 43.910156 14.96875 42.5 14.96875 C 41.144531 14.96875 39.785156 15.46875 38.71875 16.46875 C 35.195313 14.433594 30.800781 13.191406 26.03125 13.03125 C 26.09375 10.546875 26.363281 8.46875 26.875 7.09375 C 27.164063 6.316406 27.527344 5.757813 27.875 5.4375 C 28.222656 5.117188 28.539063 5 29 5 C 29.460938 5 29.683594 5.125 30.03125 5.40625 C 30.378906 5.6875 30.785156 6.148438 31.3125 6.6875 C 32.253906 7.652344 33.695313 8.714844 36.09375 8.9375 C 36.539063 11.238281 38.574219 13 41 13 C 43.75 13 46 10.75 46 8 C 46 5.25 43.75 3 41 3 C 38.605469 3 36.574219 4.710938 36.09375 6.96875 C 34.3125 6.796875 33.527344 6.109375 32.75 5.3125 C 32.300781 4.851563 31.886719 4.3125 31.3125 3.84375 C 30.738281 3.375 29.9375 3 29 3 Z M 41 5 C 42.667969 5 44 6.332031 44 8 C 44 9.667969 42.667969 11 41 11 C 39.332031 11 38 9.667969 38 8 C 38 6.332031 39.332031 5 41 5 Z M 25 15 C 30.609375 15 35.675781 16.613281 39.28125 19.1875 C 42.886719 21.761719 45 25.226563 45 29 C 45 32.773438 42.886719 36.238281 39.28125 38.8125 C 35.675781 41.386719 30.609375 43 25 43 C 19.390625 43 14.324219 41.386719 10.71875 38.8125 C 7.113281 36.238281 5 32.773438 5 29 C 5 25.226563 7.113281 21.761719 10.71875 19.1875 C 14.324219 16.613281 19.390625 15 25 15 Z M 7.5 16.9375 C 8.203125 16.9375 8.914063 17.148438 9.53125 17.59375 C 7.527344 19.03125 5.886719 20.769531 4.75 22.71875 C 3.582031 21.296875 3.660156 19.339844 5 18 C 5.714844 17.285156 6.609375 16.9375 7.5 16.9375 Z M 42.5 16.9375 C 43.390625 16.9375 44.285156 17.285156 45 18 C 46.339844 19.339844 46.417969 21.296875 45.25 22.71875 C 44.113281 20.769531 42.472656 19.03125 40.46875 17.59375 C 41.085938 17.148438 41.796875 16.9375 42.5 16.9375 Z M 17 22 C 14.800781 22 13 23.800781 13 26 C 13 28.199219 14.800781 30 17 30 C 19.199219 30 21 28.199219 21 26 C 21 23.800781 19.199219 22 17 22 Z M 33 22 C 30.800781 22 29 23.800781 29 26 C 29 28.199219 30.800781 30 33 30 C 35.199219 30 37 28.199219 37 26 C 37 23.800781 35.199219 22 33 22 Z M 17 24 C 18.117188 24 19 24.882813 19 26 C 19 27.117188 18.117188 28 17 28 C 15.882813 28 15 27.117188 15 26 C 15 24.882813 15.882813 24 17 24 Z M 33 24 C 34.117188 24 35 24.882813 35 26 C 35 27.117188 34.117188 28 33 28 C 31.882813 28 31 27.117188 31 26 C 31 24.882813 31.882813 24 33 24 Z M 34.15625 33.84375 C 34.101563 33.851563 34.050781 33.859375 34 33.875 C 33.683594 33.9375 33.417969 34.144531 33.28125 34.4375 C 33.28125 34.4375 32.757813 35.164063 31.4375 36 C 30.117188 36.835938 28.058594 37.6875 25 37.6875 C 21.941406 37.6875 19.882813 36.835938 18.5625 36 C 17.242188 35.164063 16.71875 34.4375 16.71875 34.4375 C 16.492188 34.082031 16.066406 33.90625 15.65625 34 C 15.332031 34.082031 15.070313 34.316406 14.957031 34.632813 C 14.84375 34.945313 14.894531 35.292969 15.09375 35.5625 C 15.09375 35.5625 15.863281 36.671875 17.46875 37.6875 C 19.074219 38.703125 21.558594 39.6875 25 39.6875 C 28.441406 39.6875 30.925781 38.703125 32.53125 37.6875 C 34.136719 36.671875 34.90625 35.5625 34.90625 35.5625 C 35.207031 35.273438 35.296875 34.824219 35.128906 34.441406 C 34.960938 34.058594 34.574219 33.820313 34.15625 33.84375 Z"/></svg></a><a class="VPSocialLink no-icon" href="https://discord.gg/qmk" aria-label="discord" target="_blank" rel="noopener" data-v-7bc22406 data-v-eee4e7cb><span class="vpi-social-discord" /></a><a class="VPSocialLink no-icon" href="https://github.com/qmk/qmk_firmware" aria-label="github" target="_blank" rel="noopener" data-v-7bc22406 data-v-eee4e7cb><span class="vpi-social-github" /></a><!--]--></div><div class="VPFlyout VPNavBarExtra extra" data-v-ccf7ddec data-v-d0bd9dde data-v-b6c34ac9><button type="button" class="button" aria-haspopup="true" aria-expanded="false" aria-label="extra navigation" data-v-b6c34ac9><span class="vpi-more-horizontal icon" data-v-b6c34ac9></span></button><div class="menu" data-v-b6c34ac9><div class="VPMenu" data-v-b6c34ac9 data-v-e7ea1737><!----><!--[--><!--[--><!----><div class="group" data-v-d0bd9dde><div class="item appearance" data-v-d0bd9dde><p class="label" data-v-d0bd9dde>Appearance</p><div class="appearance-action" data-v-d0bd9dde><button class="VPSwitch VPSwitchAppearance" type="button" role="switch" title="Switch to dark theme" aria-checked="false" data-v-d0bd9dde data-v-d1f28634 data-v-1d5665e3><span class="check" data-v-1d5665e3><span class="icon" data-v-1d5665e3><!--[--><span class="vpi-sun sun" data-v-d1f28634></span><span class="vpi-moon moon" data-v-d1f28634></span><!--]--></span></span></button></div></div></div><div class="group" data-v-d0bd9dde><div class="item social-links" data-v-d0bd9dde><div class="VPSocialLinks social-links-list" data-v-d0bd9dde data-v-7bc22406><!--[--><a class="VPSocialLink no-icon" href="https://reddit.com/r/olkb" aria-label target="_blank" rel="noopener" data-v-7bc22406 data-v-eee4e7cb><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 50 50" width="50px" height="50px"><path d="M 29 3 C 28.0625 3 27.164063 3.382813 26.5 4 C 25.835938 4.617188 25.363281 5.433594 25 6.40625 C 24.355469 8.140625 24.085938 10.394531 24.03125 13.03125 C 19.234375 13.179688 14.820313 14.421875 11.28125 16.46875 C 10.214844 15.46875 8.855469 14.96875 7.5 14.96875 C 6.089844 14.96875 4.675781 15.511719 3.59375 16.59375 C 1.425781 18.761719 1.425781 22.238281 3.59375 24.40625 L 3.84375 24.65625 C 3.3125 26.035156 3 27.488281 3 29 C 3 33.527344 5.566406 37.585938 9.5625 40.4375 C 13.558594 43.289063 19.007813 45 25 45 C 30.992188 45 36.441406 43.289063 40.4375 40.4375 C 44.433594 37.585938 47 33.527344 47 29 C 47 27.488281 46.6875 26.035156 46.15625 24.65625 L 46.40625 24.40625 C 48.574219 22.238281 48.574219 18.761719 46.40625 16.59375 C 45.324219 15.511719 43.910156 14.96875 42.5 14.96875 C 41.144531 14.96875 39.785156 15.46875 38.71875 16.46875 C 35.195313 14.433594 30.800781 13.191406 26.03125 13.03125 C 26.09375 10.546875 26.363281 8.46875 26.875 7.09375 C 27.164063 6.316406 27.527344 5.757813 27.875 5.4375 C 28.222656 5.117188 28.539063 5 29 5 C 29.460938 5 29.683594 5.125 30.03125 5.40625 C 30.378906 5.6875 30.785156 6.148438 31.3125 6.6875 C 32.253906 7.652344 33.695313 8.714844 36.09375 8.9375 C 36.539063 11.238281 38.574219 13 41 13 C 43.75 13 46 10.75 46 8 C 46 5.25 43.75 3 41 3 C 38.605469 3 36.574219 4.710938 36.09375 6.96875 C 34.3125 6.796875 33.527344 6.109375 32.75 5.3125 C 32.300781 4.851563 31.886719 4.3125 31.3125 3.84375 C 30.738281 3.375 29.9375 3 29 3 Z M 41 5 C 42.667969 5 44 6.332031 44 8 C 44 9.667969 42.667969 11 41 11 C 39.332031 11 38 9.667969 38 8 C 38 6.332031 39.332031 5 41 5 Z M 25 15 C 30.609375 15 35.675781 16.613281 39.28125 19.1875 C 42.886719 21.761719 45 25.226563 45 29 C 45 32.773438 42.886719 36.238281 39.28125 38.8125 C 35.675781 41.386719 30.609375 43 25 43 C 19.390625 43 14.324219 41.386719 10.71875 38.8125 C 7.113281 36.238281 5 32.773438 5 29 C 5 25.226563 7.113281 21.761719 10.71875 19.1875 C 14.324219 16.613281 19.390625 15 25 15 Z M 7.5 16.9375 C 8.203125 16.9375 8.914063 17.148438 9.53125 17.59375 C 7.527344 19.03125 5.886719 20.769531 4.75 22.71875 C 3.582031 21.296875 3.660156 19.339844 5 18 C 5.714844 17.285156 6.609375 16.9375 7.5 16.9375 Z M 42.5 16.9375 C 43.390625 16.9375 44.285156 17.285156 45 18 C 46.339844 19.339844 46.417969 21.296875 45.25 22.71875 C 44.113281 20.769531 42.472656 19.03125 40.46875 17.59375 C 41.085938 17.148438 41.796875 16.9375 42.5 16.9375 Z M 17 22 C 14.800781 22 13 23.800781 13 26 C 13 28.199219 14.800781 30 17 30 C 19.199219 30 21 28.199219 21 26 C 21 23.800781 19.199219 22 17 22 Z M 33 22 C 30.800781 22 29 23.800781 29 26 C 29 28.199219 30.800781 30 33 30 C 35.199219 30 37 28.199219 37 26 C 37 23.800781 35.199219 22 33 22 Z M 17 24 C 18.117188 24 19 24.882813 19 26 C 19 27.117188 18.117188 28 17 28 C 15.882813 28 15 27.117188 15 26 C 15 24.882813 15.882813 24 17 24 Z M 33 24 C 34.117188 24 35 24.882813 35 26 C 35 27.117188 34.117188 28 33 28 C 31.882813 28 31 27.117188 31 26 C 31 24.882813 31.882813 24 33 24 Z M 34.15625 33.84375 C 34.101563 33.851563 34.050781 33.859375 34 33.875 C 33.683594 33.9375 33.417969 34.144531 33.28125 34.4375 C 33.28125 34.4375 32.757813 35.164063 31.4375 36 C 30.117188 36.835938 28.058594 37.6875 25 37.6875 C 21.941406 37.6875 19.882813 36.835938 18.5625 36 C 17.242188 35.164063 16.71875 34.4375 16.71875 34.4375 C 16.492188 34.082031 16.066406 33.90625 15.65625 34 C 15.332031 34.082031 15.070313 34.316406 14.957031 34.632813 C 14.84375 34.945313 14.894531 35.292969 15.09375 35.5625 C 15.09375 35.5625 15.863281 36.671875 17.46875 37.6875 C 19.074219 38.703125 21.558594 39.6875 25 39.6875 C 28.441406 39.6875 30.925781 38.703125 32.53125 37.6875 C 34.136719 36.671875 34.90625 35.5625 34.90625 35.5625 C 35.207031 35.273438 35.296875 34.824219 35.128906 34.441406 C 34.960938 34.058594 34.574219 33.820313 34.15625 33.84375 Z"/></svg></a><a class="VPSocialLink no-icon" href="https://discord.gg/qmk" aria-label="discord" target="_blank" rel="noopener" data-v-7bc22406 data-v-eee4e7cb><span class="vpi-social-discord" /></a><a class="VPSocialLink no-icon" href="https://github.com/qmk/qmk_firmware" aria-label="github" target="_blank" rel="noopener" data-v-7bc22406 data-v-eee4e7cb><span class="vpi-social-github" /></a><!--]--></div></div></div><!--]--><!--]--></div></div></div><!--[--><!--]--><button type="button" class="VPNavBarHamburger hamburger" aria-label="mobile navigation" aria-expanded="false" aria-controls="VPNavScreen" data-v-ccf7ddec data-v-e5dd9c1c><span class="container" data-v-e5dd9c1c><span class="top" data-v-e5dd9c1c></span><span class="middle" data-v-e5dd9c1c></span><span class="bottom" data-v-e5dd9c1c></span></span></button></div></div></div></div><div class="divider" data-v-ccf7ddec><div class="divider-line" data-v-ccf7ddec></div></div></div><!----></header><div class="VPLocalNav has-sidebar empty" data-v-5d98c3a5 data-v-a6f0e41e><div class="container" data-v-a6f0e41e><button class="menu" aria-expanded="false" aria-controls="VPSidebarNav" data-v-a6f0e41e><span class="vpi-align-left menu-icon" data-v-a6f0e41e></span><span class="menu-text" data-v-a6f0e41e>Menu</span></button><div class="VPLocalNavOutlineDropdown" style="--vp-vh:0px;" data-v-a6f0e41e data-v-267dd0ed><button data-v-267dd0ed>Return to top</button><!----></div></div></div><aside class="VPSidebar" data-v-5d98c3a5 data-v-575e6a36><div class="curtain" data-v-575e6a36></div><nav class="nav" id="VPSidebarNav" aria-labelledby="sidebar-aria-label" tabindex="-1" data-v-575e6a36><span class="visually-hidden" id="sidebar-aria-label" data-v-575e6a36> Sidebar Navigation </span><!--[--><!--]--><!--[--><div class="group" data-v-575e6a36><section class="VPSidebarItem level-0" data-v-575e6a36 data-v-b8d55f3b><div class="item" role="button" tabindex="0" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><h2 class="text" data-v-b8d55f3b>Tutorial</h2><!----></div><div class="items" data-v-b8d55f3b><!--[--><div class="VPSidebarItem level-1 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/newbs" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>Introduction</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/newbs_getting_started" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>Setup</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/newbs_building_firmware" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>Building Your First Firmware</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/newbs_flashing" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>Flashing Firmware</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/support" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>Getting Help/Support</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/newbs_external_userspace" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>External Userspace</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/newbs_learn_more_resources" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>Other Resources</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/syllabus" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>Syllabus</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><div class="group" data-v-575e6a36><section class="VPSidebarItem level-0" data-v-575e6a36 data-v-b8d55f3b><div class="item" role="button" tabindex="0" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><h2 class="text" data-v-b8d55f3b>FAQs</h2><!----></div><div class="items" data-v-b8d55f3b><!--[--><div class="VPSidebarItem level-1 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/faq_general" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>General FAQ</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/faq_build" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>Build/Compile QMK</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/faq_misc" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>Troubleshooting QMK</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/faq_debug" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>Debugging QMK</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/faq_keymap" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>Keymap FAQ</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/squeezing_avr" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>Squeezing Space from AVR</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/reference_glossary" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>Glossary</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><div class="group" data-v-575e6a36><section class="VPSidebarItem level-0" data-v-575e6a36 data-v-b8d55f3b><div class="item" role="button" tabindex="0" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><h2 class="text" data-v-b8d55f3b>Configurator</h2><!----></div><div class="items" data-v-b8d55f3b><!--[--><div class="VPSidebarItem level-1 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/newbs_building_firmware_configurator" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>Overview</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/configurator_step_by_step" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>Step by Step</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/configurator_troubleshooting" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>Troubleshooting</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/configurator_architecture" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>Architecture</p><!--]--></a><!----></div><!----></div><section class="VPSidebarItem level-1" data-v-b8d55f3b data-v-b8d55f3b><div class="item" role="button" tabindex="0" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><h3 class="text" data-v-b8d55f3b>QMK API</h3><!----></div><div class="items" data-v-b8d55f3b><!--[--><div class="VPSidebarItem level-2 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/api_overview" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>Overview</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/api_docs" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>API Documentation</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/reference_configurator_support" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>Keyboard Support</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/configurator_default_keymaps" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>Adding Default Keymaps</p><!--]--></a><!----></div><!----></div><!--]--></div></section><!--]--></div></section></div><div class="group" data-v-575e6a36><section class="VPSidebarItem level-0" data-v-575e6a36 data-v-b8d55f3b><div class="item" role="button" tabindex="0" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><h2 class="text" data-v-b8d55f3b>CLI</h2><!----></div><div class="items" data-v-b8d55f3b><!--[--><div class="VPSidebarItem level-1 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/cli" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>Overview</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/cli_configuration" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>Configuration</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/cli_commands" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>Commands</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/cli_tab_complete" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>Tab Completion</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><div class="group" data-v-575e6a36><section class="VPSidebarItem level-0" data-v-575e6a36 data-v-b8d55f3b><div class="item" role="button" tabindex="0" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><h2 class="text" data-v-b8d55f3b>Using QMK</h2><!----></div><div class="items" data-v-b8d55f3b><!--[--><section class="VPSidebarItem level-1" data-v-b8d55f3b data-v-b8d55f3b><div class="item" role="button" tabindex="0" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><h3 class="text" data-v-b8d55f3b>Guides</h3><!----></div><div class="items" data-v-b8d55f3b><!--[--><div class="VPSidebarItem level-2 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/custom_quantum_functions" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>Customizing Functionality</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/driver_installation_zadig" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>Driver Installation with Zadig</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/keymap" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>Keymap Overview</p><!--]--></a><!----></div><!----></div><section class="VPSidebarItem level-2" data-v-b8d55f3b data-v-b8d55f3b><div class="item" role="button" tabindex="0" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><h4 class="text" data-v-b8d55f3b>Development Environments</h4><!----></div><div class="items" data-v-b8d55f3b><!--[--><div class="VPSidebarItem level-3 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/getting_started_docker" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>Docker Guide</p><!--]--></a><!----></div><!----></div><!--]--></div></section><div class="VPSidebarItem level-2 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/flashing" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>Flashing</p><!--]--></a><!----></div><!----></div><section class="VPSidebarItem level-2" data-v-b8d55f3b data-v-b8d55f3b><div class="item" role="button" tabindex="0" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><h4 class="text" data-v-b8d55f3b>IDEs</h4><!----></div><div class="items" data-v-b8d55f3b><!--[--><div class="VPSidebarItem level-3 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/other_eclipse" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>Using Eclipse with QMK</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-3 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/other_vscode" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>Using VSCode with QMK</p><!--]--></a><!----></div><!----></div><!--]--></div></section><section class="VPSidebarItem level-2" data-v-b8d55f3b data-v-b8d55f3b><div class="item" role="button" tabindex="0" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><h4 class="text" data-v-b8d55f3b>Git Best Practices</h4><!----></div><div class="items" data-v-b8d55f3b><!--[--><div class="VPSidebarItem level-3 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/newbs_git_best_practices" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>Introduction</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-3 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/newbs_git_using_your_master_branch" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>Your Fork</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-3 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/newbs_git_resolving_merge_conflicts" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>Merge Conflicts</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-3 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/newbs_git_resynchronize_a_branch" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>Fixing Your Branch</p><!--]--></a><!----></div><!----></div><!--]--></div></section><!--]--></div></section><section class="VPSidebarItem level-1" data-v-b8d55f3b data-v-b8d55f3b><div class="item" role="button" tabindex="0" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><h3 class="text" data-v-b8d55f3b>Simple Keycodes</h3><!----></div><div class="items" data-v-b8d55f3b><!--[--><div class="VPSidebarItem level-2 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/keycodes" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>Full List</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/keycodes_basic" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>Basic Keycodes</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/reference_keymap_extras" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>Language-Specific Keycodes</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/feature_advanced_keycodes" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>Modifier Keys</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/quantum_keycodes" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>Quantum Keycodes</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/keycodes_magic" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>Magic Keycodes</p><!--]--></a><!----></div><!----></div><!--]--></div></section><section class="VPSidebarItem level-1" data-v-b8d55f3b data-v-b8d55f3b><div class="item" role="button" tabindex="0" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><h3 class="text" data-v-b8d55f3b>Advanced Keycodes</h3><!----></div><div class="items" data-v-b8d55f3b><!--[--><div class="VPSidebarItem level-2 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/features/command" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>Command</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/features/dynamic_macros" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>Dynamic Macros</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/features/grave_esc" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>Grave Escape</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/features/leader_key" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>Leader Key</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/mod_tap" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>Mod-Tap</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/feature_macros" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>Macros</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/features/mouse_keys" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>Mouse Keys</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/features/programmable_button" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>Programmable Button</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/features/repeat_key" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>Repeat Key</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/features/space_cadet" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>Space Cadet Shift</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/keycodes_us_ansi_shifted" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>US ANSI Shifted Keys</p><!--]--></a><!----></div><!----></div><!--]--></div></section><section class="VPSidebarItem level-1" data-v-b8d55f3b data-v-b8d55f3b><div class="item" role="button" tabindex="0" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><h3 class="text" data-v-b8d55f3b>Software Features</h3><!----></div><div class="items" data-v-b8d55f3b><!--[--><div class="VPSidebarItem level-2 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/features/auto_shift" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>Auto Shift</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/features/autocorrect" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>Autocorrect</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/features/caps_word" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>Caps Word</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/features/combo" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>Combos</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/feature_debounce_type" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>Debounce API</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/features/digitizer" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>Digitizer</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/feature_eeprom" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>EEPROM</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/features/key_lock" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>Key Lock</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/features/key_overrides" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>Key Overrides</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/feature_layers" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>Layers</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/one_shot_keys" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>One Shot Keys</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/features/os_detection" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>OS Detection</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/features/rawhid" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>Raw HID</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/features/secure" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>Secure</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/features/send_string" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>Send String</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/features/sequencer" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>Sequencer</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/features/swap_hands" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>Swap Hands</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/features/tap_dance" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>Tap Dance</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/tap_hold" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>Tap-Hold Configuration</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/features/tri_layer" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>Tri Layer</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/features/unicode" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>Unicode</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/feature_userspace" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>Userspace</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/features/wpm" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>WPM Calculation</p><!--]--></a><!----></div><!----></div><!--]--></div></section><section class="VPSidebarItem level-1" data-v-b8d55f3b data-v-b8d55f3b><div class="item" role="button" tabindex="0" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><h3 class="text" data-v-b8d55f3b>Hardware Features</h3><!----></div><div class="items" data-v-b8d55f3b><!--[--><section class="VPSidebarItem level-2" data-v-b8d55f3b data-v-b8d55f3b><div class="item" role="button" tabindex="0" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><h4 class="text" data-v-b8d55f3b>Displays</h4><!----></div><div class="items" data-v-b8d55f3b><!--[--><section class="VPSidebarItem level-3 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" tabindex="0" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/quantum_painter" data-v-b8d55f3b><!--[--><h5 class="text" data-v-b8d55f3b>Quantum Painter</h5><!--]--></a><!----></div><div class="items" data-v-b8d55f3b><!--[--><div class="VPSidebarItem level-4 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/quantum_painter_lvgl" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>Quantum Painter LVGL Integration</p><!--]--></a><!----></div><!----></div><!--]--></div></section><div class="VPSidebarItem level-3 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/features/hd44780" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>HD44780 LCD Driver</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-3 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/features/st7565" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>ST7565 LCD Driver</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-3 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/features/oled_driver" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>OLED Driver</p><!--]--></a><!----></div><!----></div><!--]--></div></section><section class="VPSidebarItem level-2" data-v-b8d55f3b data-v-b8d55f3b><div class="item" role="button" tabindex="0" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><h4 class="text" data-v-b8d55f3b>Lighting</h4><!----></div><div class="items" data-v-b8d55f3b><!--[--><div class="VPSidebarItem level-3 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/features/backlight" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>Backlight</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-3 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/features/led_matrix" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>LED Matrix</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-3 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/features/rgblight" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>RGB Lighting</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-3 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/features/rgb_matrix" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>RGB Matrix</p><!--]--></a><!----></div><!----></div><!--]--></div></section><div class="VPSidebarItem level-2 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/features/audio" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>Audio</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/features/bluetooth" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>Bluetooth</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/features/bootmagic" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>Bootmagic</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/feature_converters" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>Converters</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/custom_matrix" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>Custom Matrix</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/features/dip_switch" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>DIP Switch</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/features/encoders" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>Encoders</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/features/haptic_feedback" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>Haptic Feedback</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/features/joystick" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>Joystick</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/features/led_indicators" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>LED Indicators</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/features/midi" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>MIDI</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/features/pointing_device" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>Pointing Device</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/features/ps2_mouse" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>PS/2 Mouse</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/features/split_keyboard" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>Split Keyboard</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/features/stenography" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>Stenography</p><!--]--></a><!----></div><!----></div><!--]--></div></section><section class="VPSidebarItem level-1" data-v-b8d55f3b data-v-b8d55f3b><div class="item" role="button" tabindex="0" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><h3 class="text" data-v-b8d55f3b>Keyboard Building</h3><!----></div><div class="items" data-v-b8d55f3b><!--[--><div class="VPSidebarItem level-2 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/easy_maker" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>Easy Maker for One Offs</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/porting_your_keyboard_to_qmk" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>Porting Keyboards</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/hand_wire" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>Hand Wiring Guide</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/isp_flashing_guide" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>ISP Flashing Guide</p><!--]--></a><!----></div><!----></div><!--]--></div></section><!--]--></div></section></div><div class="group" data-v-575e6a36><section class="VPSidebarItem level-0" data-v-575e6a36 data-v-b8d55f3b><div class="item" role="button" tabindex="0" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><h2 class="text" data-v-b8d55f3b>Developing QMK</h2><!----></div><div class="items" data-v-b8d55f3b><!--[--><div class="VPSidebarItem level-1 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/pr_checklist" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>PR Checklist</p><!--]--></a><!----></div><!----></div><section class="VPSidebarItem level-1" data-v-b8d55f3b data-v-b8d55f3b><div class="item" role="button" tabindex="0" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><h3 class="text" data-v-b8d55f3b>Breaking Changes</h3><!----></div><div class="items" data-v-b8d55f3b><!--[--><div class="VPSidebarItem level-2 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/breaking_changes" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>Overview</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/breaking_changes_instructions" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>My Pull Request Was Flagged</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/ChangeLog/20240825" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>Most Recent ChangeLog</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/breaking_changes_history" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>Past Breaking Changes</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/support_deprecation_policy" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>Deprecation Policy</p><!--]--></a><!----></div><!----></div><!--]--></div></section><section class="VPSidebarItem level-1" data-v-b8d55f3b data-v-b8d55f3b><div class="item" role="button" tabindex="0" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><h3 class="text" data-v-b8d55f3b>C Development</h3><!----></div><div class="items" data-v-b8d55f3b><!--[--><div class="VPSidebarItem level-2 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/arm_debugging" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>ARM Debugging Guide</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/coding_conventions_c" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>Coding Conventions</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/compatible_microcontrollers" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>Compatible Microcontrollers</p><!--]--></a><!----></div><!----></div><section class="VPSidebarItem level-2 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" tabindex="0" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/hardware_drivers" data-v-b8d55f3b><!--[--><h4 class="text" data-v-b8d55f3b>Drivers</h4><!--]--></a><!----></div><div class="items" data-v-b8d55f3b><!--[--><div class="VPSidebarItem level-3 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/drivers/adc" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>ADC Driver</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-3 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/drivers/apa102" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>APA102 Driver</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-3 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/drivers/audio" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>Audio Driver</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-3 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/drivers/eeprom" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>EEPROM Driver</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-3 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/drivers/flash" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>Flash Driver</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-3 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/drivers/i2c" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>I2C Driver</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-3 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/drivers/serial" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>'serial' Driver</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-3 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/drivers/spi" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>SPI Driver</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-3 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/drivers/uart" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>UART Driver</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-3 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/drivers/ws2812" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>WS2812 Driver</p><!--]--></a><!----></div><!----></div><!--]--></div></section><div class="VPSidebarItem level-2 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/drivers/gpio" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>GPIO Controls</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/hardware_keyboard_guidelines" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>Keyboard Guidelines</p><!--]--></a><!----></div><!----></div><!--]--></div></section><section class="VPSidebarItem level-1" data-v-b8d55f3b data-v-b8d55f3b><div class="item" role="button" tabindex="0" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><h3 class="text" data-v-b8d55f3b>Python Development</h3><!----></div><div class="items" data-v-b8d55f3b><!--[--><div class="VPSidebarItem level-2 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/coding_conventions_python" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>Coding Conventions</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/cli_development" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>QMK CLI Development</p><!--]--></a><!----></div><!----></div><!--]--></div></section><section class="VPSidebarItem level-1" data-v-b8d55f3b data-v-b8d55f3b><div class="item" role="button" tabindex="0" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><h3 class="text" data-v-b8d55f3b>Configurator Development</h3><!----></div><div class="items" data-v-b8d55f3b><!--[--><section class="VPSidebarItem level-2" data-v-b8d55f3b data-v-b8d55f3b><div class="item" role="button" tabindex="0" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><h4 class="text" data-v-b8d55f3b>QMK API</h4><!----></div><div class="items" data-v-b8d55f3b><!--[--><div class="VPSidebarItem level-3 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/api_development_environment" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>Development Environment</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-3 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/api_development_overview" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>Architecture Overview</p><!--]--></a><!----></div><!----></div><!--]--></div></section><!--]--></div></section><section class="VPSidebarItem level-1" data-v-b8d55f3b data-v-b8d55f3b><div class="item" role="button" tabindex="0" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><h3 class="text" data-v-b8d55f3b>Hardware Platform Development</h3><!----></div><div class="items" data-v-b8d55f3b><!--[--><section class="VPSidebarItem level-2" data-v-b8d55f3b data-v-b8d55f3b><div class="item" role="button" tabindex="0" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><h4 class="text" data-v-b8d55f3b>Arm/ChibiOS</h4><!----></div><div class="items" data-v-b8d55f3b><!--[--><div class="VPSidebarItem level-3 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/platformdev_selecting_arm_mcu" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>Selecting an MCU</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-3 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/platformdev_chibios_earlyinit" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>Early initialization</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-3 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/platformdev_rp2040" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>Raspberry Pi RP2040</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-3 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/platformdev_proton_c" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>Proton C</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-3 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/platformdev_blackpill_f4x1" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>WeAct Blackpill F4x1</p><!--]--></a><!----></div><!----></div><!--]--></div></section><!--]--></div></section><section class="VPSidebarItem level-1" data-v-b8d55f3b data-v-b8d55f3b><div class="item" role="button" tabindex="0" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><h3 class="text" data-v-b8d55f3b>QMK Reference</h3><!----></div><div class="items" data-v-b8d55f3b><!--[--><div class="VPSidebarItem level-2 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/contributing" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>Contributing to QMK</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/config_options" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>Config Options</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/data_driven_config" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>Data Driven Configuration</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/getting_started_make_guide" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>Make Documentation</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/documentation_best_practices" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>Documentation Best Practices</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/documentation_templates" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>Documentation Templates</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/feature_layouts" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>Community Layouts</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/unit_testing" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>Unit Testing</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/ref_functions" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>Useful Functions</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/reference_info_json" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>info.json Format</p><!--]--></a><!----></div><!----></div><!--]--></div></section><section class="VPSidebarItem level-1" data-v-b8d55f3b data-v-b8d55f3b><div class="item" role="button" tabindex="0" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><h3 class="text" data-v-b8d55f3b>For a Deeper Understanding</h3><!----></div><div class="items" data-v-b8d55f3b><!--[--><div class="VPSidebarItem level-2 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/how_keyboards_work" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>How Keyboards Work</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/how_a_matrix_works" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>How a Matrix Works</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/understanding_qmk" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>Understanding QMK</p><!--]--></a><!----></div><!----></div><!--]--></div></section><!--]--></div></section></div><!--]--><!--[--><!--]--></nav></aside><div class="VPContent has-sidebar" id="VPContent" data-v-5d98c3a5 data-v-1428d186><div class="VPDoc has-sidebar has-aside" data-v-1428d186 data-v-39a288b8><!--[--><!--]--><div class="container" data-v-39a288b8><div class="aside" data-v-39a288b8><div class="aside-curtain" data-v-39a288b8></div><div class="aside-container" data-v-39a288b8><div class="aside-content" data-v-39a288b8><div class="VPDocAside" data-v-39a288b8 data-v-3f215769><!--[--><!--]--><!--[--><!--]--><div class="VPDocAsideOutline" role="navigation" data-v-3f215769 data-v-935f8a84><div class="content" data-v-935f8a84><div class="outline-marker" data-v-935f8a84></div><div class="outline-title" role="heading" aria-level="2" data-v-935f8a84>On this page</div><nav aria-labelledby="doc-outline-aria-label" data-v-935f8a84><span class="visually-hidden" id="doc-outline-aria-label" data-v-935f8a84> Table of Contents for current page </span><ul class="VPDocOutlineItem root" data-v-935f8a84 data-v-b933a997><!--[--><!--]--></ul></nav></div></div><!--[--><!--]--><div class="spacer" data-v-3f215769></div><!--[--><!--]--><!----><!--[--><!--]--><!--[--><!--]--></div></div></div></div><div class="content" data-v-39a288b8><div class="content-container" data-v-39a288b8><!--[--><!--]--><main class="main" data-v-39a288b8><div style="position:relative;" class="vp-doc _ChangeLog_20210828" data-v-39a288b8><div><h1 id="qmk-breaking-changes-2021-august-28-changelog" tabindex="-1">QMK Breaking Changes - 2021 August 28 Changelog <a class="header-anchor" href="#qmk-breaking-changes-2021-august-28-changelog" aria-label="Permalink to &quot;QMK Breaking Changes - 2021 August 28 Changelog&quot;"></a></h1><h2 id="notable-features" tabindex="-1">Notable Features <a class="header-anchor" href="#notable-features" aria-label="Permalink to &quot;Notable Features {#notable-features}&quot;"></a></h2><h3 id="combo-processing-improvements" tabindex="-1">Combo processing improvements (<a href="https://github.com/qmk/qmk_firmware/pull/8591" target="_blank" rel="noreferrer">#8591</a>) <a class="header-anchor" href="#combo-processing-improvements" aria-label="Permalink to &quot;Combo processing improvements ([#8591](https://github.com/qmk/qmk_firmware/pull/8591)) {#combo-processing-improvements}&quot;"></a></h3><p>Combo processing has been reordered with respect to keypress handling, allowing for much better compatibility with mod taps.</p><p>It is also now possible to define combos that have keys overlapping with other combos, triggering only one. For example, a combo of <code>A</code>, <code>B</code> can coexist with a longer combo of <code>A</code>, <code>B</code>, <code>C</code> -- previous functionality would trigger both combos if all three keys were pressed.</p><h3 id="key-overrides" tabindex="-1">Key Overrides (<a href="https://github.com/qmk/qmk_firmware/pull/11422" target="_blank" rel="noreferrer">#11422</a>) <a class="header-anchor" href="#key-overrides" aria-label="Permalink to &quot;Key Overrides ([#11422](https://github.com/qmk/qmk_firmware/pull/11422)) {#key-overrides}&quot;"></a></h3><p>QMK now has a new feature: <a href="./../features/key_overrides">key overrides</a>. This feature allows for overriding the output of key combinations involving modifiers. As an example, pressing <kbd>Shift+2</kbd> normally results in an <kbd>@</kbd> on US-ANSI keyboard layouts -- the new key overrides allow for adding similar functionality, but for any <kbd>modifier + key</kbd> press.</p><p>To illustrate, it&#39;s now possible to use the key overrides feature to translate <kbd>Shift + Backspace</kbd> into <kbd>Delete</kbd> -- an often-requested example of where this functionality comes in handy.</p><p>There&#39;s far more to describe that what lives in this changelog, so head over to the <a href="./../features/key_overrides">key overrides documentation</a> for more examples and info.</p><h3 id="digitizer-support-12851" tabindex="-1">Digitizer support (<a href="https://github.com/qmk/qmk_firmware/pull/12851" target="_blank" rel="noreferrer">#12851</a>) <a class="header-anchor" href="#digitizer-support-12851" aria-label="Permalink to &quot;Digitizer support ([#12851](https://github.com/qmk/qmk_firmware/pull/12851))&quot;"></a></h3><p>QMK gained the ability to pretend to be a digitizer device -- much like a tablet device. A mouse uses delta-coordinates -- move up, move right -- but a digitizer works with absolute coordinates -- top left, bottom right.</p><h2 id="changes-requiring-user-action" tabindex="-1">Changes Requiring User Action <a class="header-anchor" href="#changes-requiring-user-action" aria-label="Permalink to &quot;Changes Requiring User Action {#changes-requiring-user-action}&quot;"></a></h2><h3 id="updated-keyboard-codebases" tabindex="-1">Updated Keyboard Codebases <a class="header-anchor" href="#updated-keyboard-codebases" aria-label="Permalink to &quot;Updated Keyboard Codebases {#updated-keyboard-codebases}&quot;"></a></h3><p>The following keyboards have had their source moved within QMK:</p><table><thead><tr><th>Old Keyboard Name</th><th>New Keyboard Name</th></tr></thead><tbody><tr><td>aeboards/constellation</td><td>aeboards/constellation/rev1, aeboards/constellation/rev2</td></tr><tr><td>bakeneko65</td><td>bakeneko65/rev2, bakeneko65/rev3</td></tr><tr><td>bm16a</td><td>kprepublic/bm16a</td></tr><tr><td>bm16s</td><td>kprepublic/bm16s</td></tr><tr><td>bm40hsrgb</td><td>kprepublic/bm40hsrgb</td></tr><tr><td>bm43a</td><td>kprepublic/bm43a</td></tr><tr><td>bm60poker</td><td>kprepublic/bm60poker</td></tr><tr><td>bm60rgb</td><td>kprepublic/bm60rgb</td></tr><tr><td>bm60rgb_iso</td><td>kprepublic/bm60rgb_iso</td></tr><tr><td>bm68rgb</td><td>kprepublic/bm68rgb</td></tr><tr><td>clawsome/gamebuddy</td><td>clawsome/gamebuddy/v1_0, clawsome/gamebuddy/v1_m</td></tr><tr><td>cospad</td><td>kprepublic/cospad</td></tr><tr><td>custommk/genesis</td><td>custommk/genesis/rev1, custommk/genesis/rev2</td></tr><tr><td>daisy</td><td>ktec/daisy</td></tr><tr><td>durgod/k320</td><td>durgod/k3x0/k320</td></tr><tr><td>dztech/volcano660</td><td>ilumkb/volcano660</td></tr><tr><td>ergodone</td><td>ktec/ergodone</td></tr><tr><td>gmmk/pro</td><td>gmmk/pro/ansi, gmmk/pro/iso</td></tr><tr><td>handwired/p1800fl</td><td>team0110/p1800fl</td></tr><tr><td>jj40</td><td>kprepublic/jj40</td></tr><tr><td>jj4x4</td><td>kprepublic/jj4x4</td></tr><tr><td>jj50</td><td>kprepublic/jj50</td></tr><tr><td>kyria</td><td>splitkb/kyria</td></tr><tr><td>lazydesigners/the60</td><td>lazydesigners/the60/rev1, lazydesigners/the60/rev2</td></tr><tr><td>matrix/m12og</td><td>matrix/m12og/rev1, matrix/m12og/rev2</td></tr><tr><td>mechlovin/hannah65/mechlovin9</td><td>mechlovin/mechlovin9/rev1, mechlovin/mechlovin9/rev2</td></tr><tr><td>peiorisboards/ixora</td><td>coarse/ixora</td></tr><tr><td>ramonimbao/mona</td><td>ramonimbao/mona/v1, ramonimbao/mona/v1_1</td></tr><tr><td>staryu</td><td>ktec/staryu</td></tr><tr><td>tokyo60</td><td>tokyokeyboard/tokyo60</td></tr><tr><td>vinta</td><td>coarse/vinta</td></tr><tr><td>xd002</td><td>xiudi/xd002</td></tr><tr><td>xd004</td><td>xiudi/xd004</td></tr><tr><td>xd60</td><td>xiudi/xd60</td></tr><tr><td>xd68</td><td>xiudi/xd68</td></tr><tr><td>xd75</td><td>xiudi/xd75</td></tr><tr><td>xd84</td><td>xiudi/xd84</td></tr><tr><td>xd84pro</td><td>xiudi/xd84pro</td></tr><tr><td>xd87</td><td>xiudi/xd87</td></tr><tr><td>xd96</td><td>xiudi/xd96</td></tr></tbody></table><h3 id="bootmagic-full-removal" tabindex="-1">Bootmagic Full Removal (<a href="https://github.com/qmk/qmk_firmware/pull/13846" target="_blank" rel="noreferrer">#13846</a>) <a class="header-anchor" href="#bootmagic-full-removal" aria-label="Permalink to &quot;Bootmagic Full Removal ([#13846](https://github.com/qmk/qmk_firmware/pull/13846)) {#bootmagic-full-removal}&quot;"></a></h3><p>As noted during last breaking changes cycle, QMK has decided to deprecate the full Bootmagic feature and leave Bootmagic Lite as the only remaining option.</p><p>This pull request changes the behavior of <code>BOOTMAGIC_ENABLE</code> such that specifying <code>full</code> results in an error, allowing only <code>no</code>, <code>yes</code>, or <code>lite</code>.</p><p>Currently <code>lite</code> is the equivalent of <code>yes</code> in <code>rules.mk</code>. Next cycle the use of the <code>lite</code> keyword will be prevented in favour of <code>yes</code> -- any new submissions should now be using <code>yes</code> or <code>no</code> to minimise disruption.</p><h4 id="bootmagic-full-deprecation-schedule" tabindex="-1">Bootmagic Full Deprecation Schedule <a class="header-anchor" href="#bootmagic-full-deprecation-schedule" aria-label="Permalink to &quot;Bootmagic Full Deprecation Schedule&quot;"></a></h4><p>This is the current roadmap for the behavior of <code>BOOTMAGIC_ENABLE</code>:</p><ul><li>(done) From 2021 May 29, setting <code>BOOTMAGIC_ENABLE = yes</code> will enable Bootmagic Lite instead of full Bootmagic.</li><li>(now) From 2021 Aug 28, <code>BOOTMAGIC_ENABLE</code> must be either <code>yes</code>, <code>lite</code>, or <code>no</code> setting <code>BOOTMAGIC_ENABLE = full</code> will cause compilation to fail.</li><li>(next) From 2021 Nov 27, <code>BOOTMAGIC_ENABLE</code> must be either <code>yes</code> or <code>no</code> setting <code>BOOTMAGIC_ENABLE = lite</code> will cause compilation to fail.</li></ul><h3 id="dip-switch-boolean" tabindex="-1">DIP switch callbacks are now boolean (<a href="https://github.com/qmk/qmk_firmware/pull/13399" target="_blank" rel="noreferrer">#13399</a>) <a class="header-anchor" href="#dip-switch-boolean" aria-label="Permalink to &quot;DIP switch callbacks are now boolean ([#13399](https://github.com/qmk/qmk_firmware/pull/13399)) {#dip-switch-boolean}&quot;"></a></h3><p>To match the encoder change last breaking changes cycle, DIP switch callbacks now return <code>bool</code>, too.</p><p>Example code before change:</p><div class="language-c vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">c</span><pre class="shiki shiki-themes github-light github-dark vp-code"><code><span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">void</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> dip_switch_update_kb</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">uint8_t</span><span style="--shiki-light:#E36209;--shiki-dark:#FFAB70;"> index</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">bool</span><span style="--shiki-light:#E36209;--shiki-dark:#FFAB70;"> active</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">) {</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> dip_switch_update_user</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(index, active);</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">}</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">void</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> dip_switch_update_user</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">uint8_t</span><span style="--shiki-light:#E36209;--shiki-dark:#FFAB70;"> index</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">bool</span><span style="--shiki-light:#E36209;--shiki-dark:#FFAB70;"> active</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">) {</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> switch</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> (index) {</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> case</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> 0</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">:</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> if</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(active) { </span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">audio_on</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(); } </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">else</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> { </span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">audio_off</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(); }</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> break</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">;</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> }</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">}</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">void</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> dip_switch_update_mask_kb</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">uint32_t</span><span style="--shiki-light:#E36209;--shiki-dark:#FFAB70;"> state</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">) { </span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> dip_switch_update_mask_user</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(state);</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">}</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">void</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> dip_switch_update_mask_user</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">uint32_t</span><span style="--shiki-light:#E36209;--shiki-dark:#FFAB70;"> state</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">) {</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> if</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> (state </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">&amp;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> (</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">1</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">UL&lt;&lt;</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">0</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">) </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">&amp;&amp;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> state </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">&amp;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> (</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">1</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">UL&lt;&lt;</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">1</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">)) {</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> layer_on</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(_ADJUST);</span><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"> // C on esc</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> } </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">else</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> {</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> layer_off</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(_ADJUST);</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> }</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">}</span></span></code></pre></div><p>Example code after change:</p><div class="language-c vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">c</span><pre class="shiki shiki-themes github-light github-dark vp-code"><code><span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">bool</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> dip_switch_update_kb</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">uint8_t</span><span style="--shiki-light:#E36209;--shiki-dark:#FFAB70;"> index</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">bool</span><span style="--shiki-light:#E36209;--shiki-dark:#FFAB70;"> active</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">) {</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> if</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> !</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">dip_switch_update_user</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(index, active)) { </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">return</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> false</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">; }</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> return</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> true</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">;</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">}</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">bool</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> dip_switch_update_user</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">uint8_t</span><span style="--shiki-light:#E36209;--shiki-dark:#FFAB70;"> index</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">bool</span><span style="--shiki-light:#E36209;--shiki-dark:#FFAB70;"> active</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">) {</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> switch</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> (index) {</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> case</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> 0</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">:</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> if</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(active) { </span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">audio_on</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(); } </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">else</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> { </span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">audio_off</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(); }</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> break</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">;</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> }</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> return</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> true</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">;</span><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"> // Returning true allows keyboard code to execute, false will tell the keyboard code &quot;I&#39;ve already handled it&quot;.</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">}</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">bool</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> dip_switch_update_mask_kb</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">uint32_t</span><span style="--shiki-light:#E36209;--shiki-dark:#FFAB70;"> state</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">) {</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> if</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> (</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">!</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">dip_switch_update_mask_user</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(state)) { </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">return</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> false</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">; }</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> return</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> true</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">;</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">}</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">bool</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> dip_switch_update_mask_user</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">uint32_t</span><span style="--shiki-light:#E36209;--shiki-dark:#FFAB70;"> state</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">) {</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> if</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> (state </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">&amp;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> (</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">1</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">UL&lt;&lt;</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">0</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">) </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">&amp;&amp;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> state </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">&amp;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> (</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">1</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">UL&lt;&lt;</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">1</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">)) {</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> layer_on</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(_ADJUST);</span><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"> // C on esc</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> } </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">else</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> {</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> layer_off</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(_ADJUST);</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> }</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> return</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> true</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">;</span><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"> // Returning true allows keyboard code to execute, false will tell the keyboard code &quot;I&#39;ve already handled it&quot;.</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">}</span></span></code></pre></div><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="split-transport-improvements" tabindex="-1">Split transport improvements <a class="header-anchor" href="#split-transport-improvements" aria-label="Permalink to &quot;Split transport improvements {#split-transport-improvements}&quot;"></a></h3><p>Split keyboards gained a significant amount of improvements during this breaking changes cycle, specifically:</p><ul><li>Extensible split data sync (<a href="https://github.com/qmk/qmk_firmware/pull/11930" target="_blank" rel="noreferrer">#11930</a>) -- rewritten data sharing between sides, allowing for data transfer only when required, as well as enabling keyboards and keymaps to define their own shared data.</li><li>Full-duplex ARM USART split (<a href="https://github.com/qmk/qmk_firmware/pull/13081" target="_blank" rel="noreferrer">#13081</a>) -- adds to the previous half-duplex driver and now allows for full-duplex support on ARM.</li><li>Make solo half of split keyboards (more) usable. (<a href="https://github.com/qmk/qmk_firmware/pull/13523" target="_blank" rel="noreferrer">#13523</a>) -- allows the slave to be disconnected, enabling one-handed use.</li><li>Switch split_common to CRC subsystem (<a href="https://github.com/qmk/qmk_firmware/pull/13418" target="_blank" rel="noreferrer">#13418</a>)</li></ul><div class="warning custom-block"><p class="custom-block-title">WARNING</p><p>If you&#39;re updating your split keyboard, you will need to flash both sides of the split with the your firmware.</p></div><h3 id="teensy-4-x-support" tabindex="-1">Teensy 4.x support (<a href="https://github.com/qmk/qmk_firmware/pull/13056" target="_blank" rel="noreferrer">#13056</a>, <a href="https://github.com/qmk/qmk_firmware/pull/13076" target="_blank" rel="noreferrer">#13076</a>, <a href="https://github.com/qmk/qmk_firmware/pull/13077" target="_blank" rel="noreferrer">#13077</a>) <a class="header-anchor" href="#teensy-4-x-support" aria-label="Permalink to &quot;Teensy 4.x support ([#13056](https://github.com/qmk/qmk_firmware/pull/13056), [#13076](https://github.com/qmk/qmk_firmware/pull/13076), [#13077](https://github.com/qmk/qmk_firmware/pull/13077)) {#teensy-4-x-support}&quot;"></a></h3><p>Updated ChibiOS and ChibiOS-Contrib, which brought in support for Teensy 4.x dev boards, running NXP i.MX1062.</p><h3 id="data-driven-improvements-13366" tabindex="-1">Data Driven Improvements (<a href="https://github.com/qmk/qmk_firmware/pull/13366" target="_blank" rel="noreferrer">#13366</a>) <a class="header-anchor" href="#data-driven-improvements-13366" aria-label="Permalink to &quot;Data Driven Improvements ([#13366](https://github.com/qmk/qmk_firmware/pull/13366))&quot;"></a></h3><p>QMK&#39;s pursuit of data-driven keyboards has progressed, allowing substantially more configurable options to be specified in <code>info.json</code>.</p><h4 id="tags" tabindex="-1">Tags <a class="header-anchor" href="#tags" aria-label="Permalink to &quot;Tags&quot;"></a></h4><p>Tags will let you categorize your keyboard, and will be used in the future to allow browsing and sorting through keyboards in QMK. Tags are free-form text identifiers that identify attributes about your keyboard. To add tags you simply add a <code>tags</code> key to your <code>info.json</code>:</p><pre><code>&quot;tags&quot;: [&quot;tkl&quot;, &quot;backlight&quot;, &quot;encoder&quot;]
</code></pre><h4 id="dot-notation" tabindex="-1">Dot Notation <a class="header-anchor" href="#dot-notation" aria-label="Permalink to &quot;Dot Notation&quot;"></a></h4><p>With this release we are moving towards using JSON dot notation in more places. For example, when using <code>qmk info -f text</code>:</p><div class="language- vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang"></span><pre class="shiki shiki-themes github-light github-dark vp-code"><code><span class="line"><span>$ qmk info -f text -kb clueboard/card</span></span>
<span class="line"><span> bootloader: atmel-dfu</span></span>
<span class="line"><span> debounce: 20</span></span>
<span class="line"><span> diode_direction: ROW2COL</span></span>
<span class="line"><span> features.audio: True</span></span>
<span class="line"><span> features.backlight: True</span></span>
<span class="line"><span> features.bluetooth: False</span></span>
<span class="line"><span> features.bootmagic: False</span></span>
<span class="line"><span> features.command: True</span></span>
<span class="line"><span> features.console: True</span></span>
<span class="line"><span> features.extrakey: True</span></span>
<span class="line"><span> features.lto: True</span></span>
<span class="line"><span> features.midi: False</span></span>
<span class="line"><span> features.mousekey: True</span></span>
<span class="line"><span> features.nkro: False</span></span>
<span class="line"><span> features.rgblight: True</span></span>
<span class="line"><span> features.unicode: False</span></span>
<span class="line"><span> height: 8</span></span>
<span class="line"><span> keyboard_folder: clueboard/card</span></span>
<span class="line"><span> keyboard_name: Cluecard</span></span>
<span class="line"><span> layout_aliases.LAYOUT: LAYOUT_all</span></span>
<span class="line"><span> layouts: LAYOUT_all</span></span>
<span class="line"><span> maintainer: skullydazed</span></span>
<span class="line"><span> manufacturer: Clueboard</span></span>
<span class="line"><span> matrix_pins.cols: F1, F6, F7</span></span>
<span class="line"><span> matrix_pins.rows: B4, F0, F4, F5</span></span>
<span class="line"><span> platform: unknown</span></span>
<span class="line"><span> processor: atmega32u4</span></span>
<span class="line"><span> processor_type: avr</span></span>
<span class="line"><span> protocol: LUFA</span></span>
<span class="line"><span> rgblight.brightness_steps: 17</span></span>
<span class="line"><span> rgblight.hue_steps: 10</span></span>
<span class="line"><span> rgblight.led_count: 4</span></span>
<span class="line"><span> rgblight.pin: E6</span></span>
<span class="line"><span> rgblight.saturation_steps: 17</span></span>
<span class="line"><span> split.transport.protocol: serial</span></span>
<span class="line"><span> usb.device_ver: 0x0001</span></span>
<span class="line"><span> usb.pid: 0x2330</span></span>
<span class="line"><span> usb.vid: 0xC1ED</span></span>
<span class="line"><span> width: 10</span></span></code></pre></div><h4 id="new-configuration-keys" tabindex="-1">New configuration keys <a class="header-anchor" href="#new-configuration-keys" aria-label="Permalink to &quot;New configuration keys&quot;"></a></h4><p>We&#39;ve added dozens of new keys to <code>info.json</code> so that you can configure more than ever without writing a single line of code. A quick overview of the new items you can configure:</p><ul><li><code>audio.pins</code>, <code>audio.voices</code></li><li><code>backlight.breathing</code>, <code>backlight.breathing_period</code>, <code>backlight.levels</code>, <code>backlight.pin</code>,</li><li><code>bluetooth.driver</code>, <code>bluetooth.lto</code></li><li><code>bootloader_instructions</code></li><li><code>build.debounce_type</code>, <code>build.firmware_format</code>, <code>build.lto</code></li><li><code>combo.count</code>, <code>combo.term</code></li><li><code>leader_key.timing</code>, <code>leader_key.strict_processing</code>, <code>leader_key.timeout</code></li><li><code>matrix.custom</code>, <code>matrix.custom_lite</code>, <code>matrix.ghost</code>, <code>matrix.io_delay</code></li><li><code>mouse_key.enabled</code>, <code>mouse_key.delay</code>, <code>mouse_key.interval</code>, <code>mouse_key.max_speed</code>, <code>mouse_key.time_to_max</code>, <code>mouse_key.wheel_delay</code></li><li><code>oneshot.tap_toggle</code>, <code>oneshot.timeout</code></li><li><code>rgblight.layers.blink</code>, <code>rgblight.layers.enabled</code>, <code>rgblight.layers.max</code>, <code>rgblight.layers.override_rgb</code>, <code>rgblight.rgbw</code></li><li><code>split.enabled</code>, <code>split.matrix_grid</code>, <code>split.matrix_pins</code>, <code>split.main</code>, <code>split.soft_serial_pin</code>, <code>split.soft_serial_speed</code>, <code>split.transport.protocol</code>, <code>split.transport.sync_matrix_state</code>, <code>split.transport.sync_modifiers</code>, <code>split.usb_detect</code></li><li><code>tapping.force_hold</code>, <code>tapping.force_hold_per_key</code>, <code>tapping.ignore_mod_tap_interrupt</code>, <code>tapping.ignore_mod_tap_interrupt_per_key</code>, <code>tapping.permissive_hold</code>, <code>tapping.permissive_hold_per_key</code>, <code>tapping.retro</code>, <code>tapping.retro_per_key</code>, <code>tapping.term</code>, <code>tapping.term_per_key</code>, <code>tapping.toggle</code></li><li><code>usb.force_nkro</code>, <code>usb.max_power</code>, <code>usb.no_startup_check</code>, <code>usb.polling_interval</code>, <code>usb.shared_endpoint.keyboard</code>, <code>usb.shared_endpoint.mouse</code>, <code>usb.suspend_wakeup_delay</code>, <code>usb.wait_for</code></li><li><code>qmk.keys_per_scan</code>, <code>qmk.tap_keycode_delay</code>, <code>qmk.tap_capslock_delay</code></li></ul><h3 id="codebase-restructure" tabindex="-1">Codebase restructure and cleanup <a class="header-anchor" href="#codebase-restructure" aria-label="Permalink to &quot;Codebase restructure and cleanup {#codebase-restructure}&quot;"></a></h3><p>QMK was originally based on TMK, and has grown in size considerably since its first inception. To keep moving things forward, restructure of some of the core areas of the code is needed to support new concepts and new hardware, and progress is happening along those lines:</p><ul><li>Move RGBLight code into its own folder (<a href="https://github.com/qmk/qmk_firmware/pull/13312" target="_blank" rel="noreferrer">#13312</a>)</li><li>Migrate platform independent code from tmk_core -&gt; quantum (<a href="https://github.com/qmk/qmk_firmware/pull/13673" target="_blank" rel="noreferrer">#13673</a>)</li><li>matrix_scan_x -&gt; x_task (<a href="https://github.com/qmk/qmk_firmware/pull/13748" target="_blank" rel="noreferrer">#13748</a>)</li><li>Move some led drivers to common folder (<a href="https://github.com/qmk/qmk_firmware/pull/13749" target="_blank" rel="noreferrer">#13749</a>)</li><li>Move chibios board files to allow tmk_core platform migration (<a href="https://github.com/qmk/qmk_firmware/pull/13777" target="_blank" rel="noreferrer">#13777</a>)</li><li>Begin to carve out platform/protocol API - Single main loop (<a href="https://github.com/qmk/qmk_firmware/pull/13843" target="_blank" rel="noreferrer">#13843</a>)</li><li>Relocate platform specific drivers (<a href="https://github.com/qmk/qmk_firmware/pull/13894" target="_blank" rel="noreferrer">#13894</a>)</li><li>Move all the flash logic from tmk_core (<a href="https://github.com/qmk/qmk_firmware/pull/13927" target="_blank" rel="noreferrer">#13927</a>)</li><li>Move USB Host Shield and Arduino core to <code>lib/</code> (<a href="https://github.com/qmk/qmk_firmware/pull/13973" target="_blank" rel="noreferrer">#13973</a>)</li><li>Unify behaviour of wait on AVR (<a href="https://github.com/qmk/qmk_firmware/pull/14025" target="_blank" rel="noreferrer">#14025</a>)</li><li>Move nix folder alongside vagrant (<a href="https://github.com/qmk/qmk_firmware/pull/14132" target="_blank" rel="noreferrer">#14132</a>)</li><li>Align some quantum sub-directories (<a href="https://github.com/qmk/qmk_firmware/pull/14134" target="_blank" rel="noreferrer">#14134</a>)</li></ul><hr><h2 id="full-changelist" tabindex="-1">Full changelist <a class="header-anchor" href="#full-changelist" aria-label="Permalink to &quot;Full changelist&quot;"></a></h2><p>Core:</p><ul><li>Arm ps2 mouse interrupt (<a href="https://github.com/qmk/qmk_firmware/pull/6490" target="_blank" rel="noreferrer">#6490</a>)</li><li>Process combos earlier &amp; overlapping combos (<a href="https://github.com/qmk/qmk_firmware/pull/8591" target="_blank" rel="noreferrer">#8591</a>)</li><li>Swap buttons on PS2 Mouse/Trackball (<a href="https://github.com/qmk/qmk_firmware/pull/9205" target="_blank" rel="noreferrer">#9205</a>)</li><li>Add HOLD_ON_OTHER_KEY_PRESS option for dual-role keys (<a href="https://github.com/qmk/qmk_firmware/pull/9404" target="_blank" rel="noreferrer">#9404</a>)</li><li>add yaml_build_options target (<a href="https://github.com/qmk/qmk_firmware/pull/10533" target="_blank" rel="noreferrer">#10533</a>)</li><li>Warn when building a board that uses arm_atsam (<a href="https://github.com/qmk/qmk_firmware/pull/10904" target="_blank" rel="noreferrer">#10904</a>)</li><li>Key Overrides (<a href="https://github.com/qmk/qmk_firmware/pull/11422" target="_blank" rel="noreferrer">#11422</a>)</li><li>Refactor <code>quantum/command.{c,h}</code> for code size &amp; {read,maintain}ability (<a href="https://github.com/qmk/qmk_firmware/pull/11842" target="_blank" rel="noreferrer">#11842</a>)</li><li>Extensible split data sync (<a href="https://github.com/qmk/qmk_firmware/pull/11930" target="_blank" rel="noreferrer">#11930</a>)</li><li>Move print/debug files to quantum (<a href="https://github.com/qmk/qmk_firmware/pull/12069" target="_blank" rel="noreferrer">#12069</a>)</li><li>Unconditionally call led_init_ports (<a href="https://github.com/qmk/qmk_firmware/pull/12116" target="_blank" rel="noreferrer">#12116</a>)</li><li>Support using a timer for wait_us() on ChibiOS-based boards (<a href="https://github.com/qmk/qmk_firmware/pull/12211" target="_blank" rel="noreferrer">#12211</a>)</li><li>Add support for NO_PIN to all matrix types (<a href="https://github.com/qmk/qmk_firmware/pull/12238" target="_blank" rel="noreferrer">#12238</a>)</li><li>Avoid 8-bit timer overflows in debounce algorithms (<a href="https://github.com/qmk/qmk_firmware/pull/12240" target="_blank" rel="noreferrer">#12240</a>)</li><li>Add Per Key exclusions for Haptic Feedback (<a href="https://github.com/qmk/qmk_firmware/pull/12386" target="_blank" rel="noreferrer">#12386</a>)</li><li>Steno combinedkeys (<a href="https://github.com/qmk/qmk_firmware/pull/12538" target="_blank" rel="noreferrer">#12538</a>)</li><li>eeprom_stm32: implement high density wear leveling (<a href="https://github.com/qmk/qmk_firmware/pull/12567" target="_blank" rel="noreferrer">#12567</a>)</li><li>eeprom_i2c driver: added EXTERNAL_EEPROM_WP_PIN configuration option. (<a href="https://github.com/qmk/qmk_firmware/pull/12617" target="_blank" rel="noreferrer">#12617</a>)</li><li>Add CRC8 calculation subsystem to quantum (<a href="https://github.com/qmk/qmk_firmware/pull/12641" target="_blank" rel="noreferrer">#12641</a>)</li><li>Limit saturation for RGB_MATRIX_JELLYBEAN_RAINDROPS (<a href="https://github.com/qmk/qmk_firmware/pull/12669" target="_blank" rel="noreferrer">#12669</a>)</li><li>Add asym_eager_defer_pk debounce type (<a href="https://github.com/qmk/qmk_firmware/pull/12689" target="_blank" rel="noreferrer">#12689</a>)</li><li>Include lib8tion.c into RGB/LED matrix build list (<a href="https://github.com/qmk/qmk_firmware/pull/12699" target="_blank" rel="noreferrer">#12699</a>)</li><li>Add readPort() and some API to &#39;tmk_core/common/*/gpio.h&#39; (<a href="https://github.com/qmk/qmk_firmware/pull/12754" target="_blank" rel="noreferrer">#12754</a>)</li><li>add wait_cpuclock() macro for AVR and CPU_CLOCK macro (<a href="https://github.com/qmk/qmk_firmware/pull/12755" target="_blank" rel="noreferrer">#12755</a>)</li><li>Trigger a wakeup after USB Reset on ChibiOS. (<a href="https://github.com/qmk/qmk_firmware/pull/12831" target="_blank" rel="noreferrer">#12831</a>)</li><li>Add sync_timer support over serial_link (i.e. Ergodox Infinity) (<a href="https://github.com/qmk/qmk_firmware/pull/12845" target="_blank" rel="noreferrer">#12845</a>)</li><li>Digitizer HID interface : absolute coordinates for mouse cursor (<a href="https://github.com/qmk/qmk_firmware/pull/12851" target="_blank" rel="noreferrer">#12851</a>)</li><li>Add config.h and rules.mk support for data driven keymaps (<a href="https://github.com/qmk/qmk_firmware/pull/12859" target="_blank" rel="noreferrer">#12859</a>)</li><li>Add alternate ldscript for STM32duino (F103xB) (<a href="https://github.com/qmk/qmk_firmware/pull/12914" target="_blank" rel="noreferrer">#12914</a>)</li><li><code>keymap_extras</code>: Remove deprecated defines (<a href="https://github.com/qmk/qmk_firmware/pull/12949" target="_blank" rel="noreferrer">#12949</a>)</li><li>Retain brightness with lighting layers (<a href="https://github.com/qmk/qmk_firmware/pull/13025" target="_blank" rel="noreferrer">#13025</a>)</li><li>Move optical sensor code to drivers folder (<a href="https://github.com/qmk/qmk_firmware/pull/13044" target="_blank" rel="noreferrer">#13044</a>)</li><li>Change the prototype of matrix_output_unselect_delay() (<a href="https://github.com/qmk/qmk_firmware/pull/13045" target="_blank" rel="noreferrer">#13045</a>)</li><li>Add weak refs on reading rows/cols. (<a href="https://github.com/qmk/qmk_firmware/pull/13062" target="_blank" rel="noreferrer">#13062</a>)</li><li>Use single memcmp to determine if matrix changed. (<a href="https://github.com/qmk/qmk_firmware/pull/13064" target="_blank" rel="noreferrer">#13064</a>)</li><li>Improve layer mask handling (<a href="https://github.com/qmk/qmk_firmware/pull/13065" target="_blank" rel="noreferrer">#13065</a>)</li><li>mousekey: expose current report to users (<a href="https://github.com/qmk/qmk_firmware/pull/13069" target="_blank" rel="noreferrer">#13069</a>)</li><li>ChibiOS SVN mirror script. (<a href="https://github.com/qmk/qmk_firmware/pull/13070" target="_blank" rel="noreferrer">#13070</a>)</li><li>Added right vs left specific pin assignments for dip switch (<a href="https://github.com/qmk/qmk_firmware/pull/13074" target="_blank" rel="noreferrer">#13074</a>)</li><li>make RESET key work with Teensy 4.x (<a href="https://github.com/qmk/qmk_firmware/pull/13076" target="_blank" rel="noreferrer">#13076</a>)</li><li>wire up flash make target for Teensy 4.x (<a href="https://github.com/qmk/qmk_firmware/pull/13077" target="_blank" rel="noreferrer">#13077</a>)</li><li>bump USB spec version in device descriptor to 2.0 (<a href="https://github.com/qmk/qmk_firmware/pull/13078" target="_blank" rel="noreferrer">#13078</a>)</li><li>Unite half-duplex and full-duplex serial drivers (<a href="https://github.com/qmk/qmk_firmware/pull/13081" target="_blank" rel="noreferrer">#13081</a>)</li><li>Add ST7565 LCD driver (<a href="https://github.com/qmk/qmk_firmware/pull/13089" target="_blank" rel="noreferrer">#13089</a>)</li><li><code>spi_master</code> Kinetis support (<a href="https://github.com/qmk/qmk_firmware/pull/13098" target="_blank" rel="noreferrer">#13098</a>)</li><li>GMMK Pro RGB Support (<a href="https://github.com/qmk/qmk_firmware/pull/13147" target="_blank" rel="noreferrer">#13147</a>)</li><li>Remove dfu-util arguments from mcu_selection (<a href="https://github.com/qmk/qmk_firmware/pull/13150" target="_blank" rel="noreferrer">#13150</a>)</li><li>Add subcommand to generate version.h (<a href="https://github.com/qmk/qmk_firmware/pull/13151" target="_blank" rel="noreferrer">#13151</a>)</li><li>Add oled_invert (<a href="https://github.com/qmk/qmk_firmware/pull/13172" target="_blank" rel="noreferrer">#13172</a>)</li><li>ST7565 invert (<a href="https://github.com/qmk/qmk_firmware/pull/13237" target="_blank" rel="noreferrer">#13237</a>)</li><li>RGB Matrix eeprom write limiting (<a href="https://github.com/qmk/qmk_firmware/pull/13238" target="_blank" rel="noreferrer">#13238</a>)</li><li>Temporary disable of CRC (<a href="https://github.com/qmk/qmk_firmware/pull/13252" target="_blank" rel="noreferrer">#13252</a>)</li><li>Move LED/RGB Matrix code into their own directories (<a href="https://github.com/qmk/qmk_firmware/pull/13257" target="_blank" rel="noreferrer">#13257</a>)</li><li>Skip EEPROM writes once done. (<a href="https://github.com/qmk/qmk_firmware/pull/13293" target="_blank" rel="noreferrer">#13293</a>)</li><li>Remove rgblight stubs (<a href="https://github.com/qmk/qmk_firmware/pull/13302" target="_blank" rel="noreferrer">#13302</a>)</li><li>Allow settable SPI divisor for AW20216 driver, set default to 4 (<a href="https://github.com/qmk/qmk_firmware/pull/13309" target="_blank" rel="noreferrer">#13309</a>)</li><li>Move RGBLight code into its own folder (<a href="https://github.com/qmk/qmk_firmware/pull/13312" target="_blank" rel="noreferrer">#13312</a>)</li><li>Unify matrix for split common and regular matrix (<a href="https://github.com/qmk/qmk_firmware/pull/13330" target="_blank" rel="noreferrer">#13330</a>)</li><li>Relocate RGB/HSV color defs to a more fitting place (<a href="https://github.com/qmk/qmk_firmware/pull/13377" target="_blank" rel="noreferrer">#13377</a>)</li><li>Adds support for STM32L412xB, STM32L422xB. (<a href="https://github.com/qmk/qmk_firmware/pull/13383" target="_blank" rel="noreferrer">#13383</a>)</li><li>Convert Dip Switch callbacks to boolean functions (<a href="https://github.com/qmk/qmk_firmware/pull/13399" target="_blank" rel="noreferrer">#13399</a>)</li><li>Use string literals for <code>SERIAL_NUMBER</code> (<a href="https://github.com/qmk/qmk_firmware/pull/13403" target="_blank" rel="noreferrer">#13403</a>)</li><li>Switch split_common to CRC subsystem (<a href="https://github.com/qmk/qmk_firmware/pull/13418" target="_blank" rel="noreferrer">#13418</a>)</li><li>Improve &#39;show_build_options&#39; target (<a href="https://github.com/qmk/qmk_firmware/pull/13425" target="_blank" rel="noreferrer">#13425</a>)</li><li>AW20216 use register increment for framebuffer flushes (<a href="https://github.com/qmk/qmk_firmware/pull/13430" target="_blank" rel="noreferrer">#13430</a>)</li><li>Allow invert of SPLIT_HAND_PIN logic (<a href="https://github.com/qmk/qmk_firmware/pull/13433" target="_blank" rel="noreferrer">#13433</a>)</li><li>chibios: bootloader: use integer pointers as volatile (<a href="https://github.com/qmk/qmk_firmware/pull/13450" target="_blank" rel="noreferrer">#13450</a>)</li><li>Refactor OLED to allow easy addition of other types (<a href="https://github.com/qmk/qmk_firmware/pull/13454" target="_blank" rel="noreferrer">#13454</a>)</li><li>Dual RGB Matrix IS31FL3737 driver support to address #13442 (<a href="https://github.com/qmk/qmk_firmware/pull/13457" target="_blank" rel="noreferrer">#13457</a>)</li><li>Enable g_is31_leds PROGMEM for RGB Matrix IS31FL3737 driver (<a href="https://github.com/qmk/qmk_firmware/pull/13480" target="_blank" rel="noreferrer">#13480</a>)</li><li>Switch Ergodox Infinity over to split_common (<a href="https://github.com/qmk/qmk_firmware/pull/13481" target="_blank" rel="noreferrer">#13481</a>)</li><li>Make solo half of split keyboards (more) usable. (<a href="https://github.com/qmk/qmk_firmware/pull/13523" target="_blank" rel="noreferrer">#13523</a>)</li><li>Enable sync of OLED/ST7565 display on/off state on Splits (<a href="https://github.com/qmk/qmk_firmware/pull/13542" target="_blank" rel="noreferrer">#13542</a>)</li><li>Revert &quot;Add rgblight to RGB Matrix VPATH&quot; (<a href="https://github.com/qmk/qmk_firmware/pull/13559" target="_blank" rel="noreferrer">#13559</a>)</li><li>Move <code>SENDSTRING_BELL</code> code to <code>send_string.h</code> (<a href="https://github.com/qmk/qmk_firmware/pull/13566" target="_blank" rel="noreferrer">#13566</a>)</li><li>Migrate platform independent code from tmk_core -&gt; quantum (<a href="https://github.com/qmk/qmk_firmware/pull/13673" target="_blank" rel="noreferrer">#13673</a>)</li><li>Avoid LTO conficts on arm_atsam (<a href="https://github.com/qmk/qmk_firmware/pull/13676" target="_blank" rel="noreferrer">#13676</a>)</li><li>Allow for removal of hysteresis on 4x encoders (<a href="https://github.com/qmk/qmk_firmware/pull/13698" target="_blank" rel="noreferrer">#13698</a>)</li><li>Port new_keyboard.sh to CLI (<a href="https://github.com/qmk/qmk_firmware/pull/13706" target="_blank" rel="noreferrer">#13706</a>)</li><li>Align AW20216 driver (<a href="https://github.com/qmk/qmk_firmware/pull/13712" target="_blank" rel="noreferrer">#13712</a>)</li><li>Haptic: driver-&gt; feature (<a href="https://github.com/qmk/qmk_firmware/pull/13713" target="_blank" rel="noreferrer">#13713</a>)</li><li>Add support for STM32F407x MCUs. (<a href="https://github.com/qmk/qmk_firmware/pull/13718" target="_blank" rel="noreferrer">#13718</a>)</li><li>Remove legacy BACKLIGHT_CUSTOM_DRIVER option (<a href="https://github.com/qmk/qmk_firmware/pull/13731" target="_blank" rel="noreferrer">#13731</a>)</li><li>Minor tidy up of key overrides (<a href="https://github.com/qmk/qmk_firmware/pull/13747" target="_blank" rel="noreferrer">#13747</a>)</li><li>matrix_scan_x -&gt; x_task (<a href="https://github.com/qmk/qmk_firmware/pull/13748" target="_blank" rel="noreferrer">#13748</a>)</li><li>Move some led drivers to common folder (<a href="https://github.com/qmk/qmk_firmware/pull/13749" target="_blank" rel="noreferrer">#13749</a>)</li><li>Allow for higher USB Polling rate on ATSAM boards (<a href="https://github.com/qmk/qmk_firmware/pull/13755" target="_blank" rel="noreferrer">#13755</a>)</li><li>Rgb matrix/enable modes explicitly (<a href="https://github.com/qmk/qmk_firmware/pull/13758" target="_blank" rel="noreferrer">#13758</a>)</li><li>Move chibios board files to allow tmk_core platform migration (<a href="https://github.com/qmk/qmk_firmware/pull/13777" target="_blank" rel="noreferrer">#13777</a>)</li><li>__flash? (<a href="https://github.com/qmk/qmk_firmware/pull/13799" target="_blank" rel="noreferrer">#13799</a>)</li><li><code>--parallel</code> improvements (<a href="https://github.com/qmk/qmk_firmware/pull/13800" target="_blank" rel="noreferrer">#13800</a>)</li><li>Speed up pimoroni trackball driver (<a href="https://github.com/qmk/qmk_firmware/pull/13823" target="_blank" rel="noreferrer">#13823</a>)</li><li>Add a toggle key for GUI On/Off in Magic feature (<a href="https://github.com/qmk/qmk_firmware/pull/13830" target="_blank" rel="noreferrer">#13830</a>)</li><li>Begin to carve out platform/protocol API - Single main loop (<a href="https://github.com/qmk/qmk_firmware/pull/13843" target="_blank" rel="noreferrer">#13843</a>)</li><li>Remove Full Bootmagic (<a href="https://github.com/qmk/qmk_firmware/pull/13846" target="_blank" rel="noreferrer">#13846</a>)</li><li>Remove backwards compatibility of debounce names (<a href="https://github.com/qmk/qmk_firmware/pull/13877" target="_blank" rel="noreferrer">#13877</a>)</li><li>Relocate platform specific drivers (<a href="https://github.com/qmk/qmk_firmware/pull/13894" target="_blank" rel="noreferrer">#13894</a>)</li><li>Remove ONEHAND_ENABLE (<a href="https://github.com/qmk/qmk_firmware/pull/13920" target="_blank" rel="noreferrer">#13920</a>)</li><li>Move all the flash logic from tmk_core (<a href="https://github.com/qmk/qmk_firmware/pull/13927" target="_blank" rel="noreferrer">#13927</a>)</li><li>adding uf2 flash support for blackpill 401 (<a href="https://github.com/qmk/qmk_firmware/pull/13968" target="_blank" rel="noreferrer">#13968</a>)</li><li>Unify behaviour of wait on AVR (<a href="https://github.com/qmk/qmk_firmware/pull/14025" target="_blank" rel="noreferrer">#14025</a>)</li><li>Add qmk-hid bootloader detection support to <code>qmk console</code> (<a href="https://github.com/qmk/qmk_firmware/pull/14038" target="_blank" rel="noreferrer">#14038</a>)</li><li>Align DIP_SWITCH_PINS_RIGHT implementation with encoders (<a href="https://github.com/qmk/qmk_firmware/pull/14079" target="_blank" rel="noreferrer">#14079</a>)</li><li>Tidy up quantum.c now some of tmk_core has been merged (<a href="https://github.com/qmk/qmk_firmware/pull/14083" target="_blank" rel="noreferrer">#14083</a>)</li><li>Improve pmw3360 sensor and make it more hardware agnostic (<a href="https://github.com/qmk/qmk_firmware/pull/14097" target="_blank" rel="noreferrer">#14097</a>)</li><li>Move nix folder alongside vagrant (<a href="https://github.com/qmk/qmk_firmware/pull/14132" target="_blank" rel="noreferrer">#14132</a>)</li><li>Align some quantum sub-directories (<a href="https://github.com/qmk/qmk_firmware/pull/14134" target="_blank" rel="noreferrer">#14134</a>)</li><li>Revert 14083 &amp;&amp; 14144 (<a href="https://github.com/qmk/qmk_firmware/pull/14150" target="_blank" rel="noreferrer">#14150</a>)</li></ul><p>CLI:</p><ul><li>allow LINE_PINxx for Teensy 4.x pins (<a href="https://github.com/qmk/qmk_firmware/pull/13247" target="_blank" rel="noreferrer">#13247</a>)</li><li>Remove the redundant pin name validation (<a href="https://github.com/qmk/qmk_firmware/pull/13251" target="_blank" rel="noreferrer">#13251</a>)</li><li>Move all our CLI file formatters to the format dir (<a href="https://github.com/qmk/qmk_firmware/pull/13296" target="_blank" rel="noreferrer">#13296</a>)</li><li>Refactor doctor.py into a directory (<a href="https://github.com/qmk/qmk_firmware/pull/13298" target="_blank" rel="noreferrer">#13298</a>)</li><li>Add git and venv info to doctor&#39;s output (<a href="https://github.com/qmk/qmk_firmware/pull/13405" target="_blank" rel="noreferrer">#13405</a>)</li><li>Matrix consistency check (<a href="https://github.com/qmk/qmk_firmware/pull/13470" target="_blank" rel="noreferrer">#13470</a>)</li><li>Remove references to info.json <code>width</code> and <code>height</code> in CLI (<a href="https://github.com/qmk/qmk_firmware/pull/13728" target="_blank" rel="noreferrer">#13728</a>)</li><li>Make <code>qmk doctor</code> more lenient about system config (<a href="https://github.com/qmk/qmk_firmware/pull/13804" target="_blank" rel="noreferrer">#13804</a>)</li><li>Defer the expensive search for layout macros until info.json has been processed (<a href="https://github.com/qmk/qmk_firmware/pull/14007" target="_blank" rel="noreferrer">#14007</a>)</li></ul><p>Submodule updates:</p><ul><li>Update ChibiOS, ChibiOS-Contrib. (<a href="https://github.com/qmk/qmk_firmware/pull/13056" target="_blank" rel="noreferrer">#13056</a>)</li><li>Update LUFA (18-07-2021) and add QMK-HID Bootloader support (<a href="https://github.com/qmk/qmk_firmware/pull/13588" target="_blank" rel="noreferrer">#13588</a>)</li><li>Update LUFA Submodule (2021-07-30) (<a href="https://github.com/qmk/qmk_firmware/pull/13819" target="_blank" rel="noreferrer">#13819</a>)</li><li>Bump gtest (<a href="https://github.com/qmk/qmk_firmware/pull/13885" target="_blank" rel="noreferrer">#13885</a>)</li><li>Update ChibiOS-Contrib, mirroring script. (<a href="https://github.com/qmk/qmk_firmware/pull/13896" target="_blank" rel="noreferrer">#13896</a>)</li><li>Move USB Host Shield and Arduino core to <code>lib/</code> (<a href="https://github.com/qmk/qmk_firmware/pull/13973" target="_blank" rel="noreferrer">#13973</a>)</li></ul><p>Keyboards:</p><ul><li>Migrate keyboards using uGFX to LED_MATRIX (<a href="https://github.com/qmk/qmk_firmware/pull/9657" target="_blank" rel="noreferrer">#9657</a>)</li><li>Remove MIDI Configuration boilerplate (<a href="https://github.com/qmk/qmk_firmware/pull/11151" target="_blank" rel="noreferrer">#11151</a>)</li><li>manyboard macro (<a href="https://github.com/qmk/qmk_firmware/pull/11896" target="_blank" rel="noreferrer">#11896</a>)</li><li>Moved tokyo60/ into tokyokeyboard/tokyo60/. (<a href="https://github.com/qmk/qmk_firmware/pull/12023" target="_blank" rel="noreferrer">#12023</a>)</li><li>Organize KPrepublic, K.T.E.C, xiudi boards into directories (<a href="https://github.com/qmk/qmk_firmware/pull/12159" target="_blank" rel="noreferrer">#12159</a>)</li><li>Add Durgod Taurus K310 keyboard (<a href="https://github.com/qmk/qmk_firmware/pull/12314" target="_blank" rel="noreferrer">#12314</a>)</li><li>add support for m65 and simple 5x13 ortholinear (<a href="https://github.com/qmk/qmk_firmware/pull/12315" target="_blank" rel="noreferrer">#12315</a>)</li><li>Relocalize and Update p1800fl (<a href="https://github.com/qmk/qmk_firmware/pull/12425" target="_blank" rel="noreferrer">#12425</a>)</li><li>GameBuddy v1.M (<a href="https://github.com/qmk/qmk_firmware/pull/12637" target="_blank" rel="noreferrer">#12637</a>)</li><li>Add mechlovin9 rev2 PCB (<a href="https://github.com/qmk/qmk_firmware/pull/12767" target="_blank" rel="noreferrer">#12767</a>)</li><li>Add RGB matrix support for Kyria (<a href="https://github.com/qmk/qmk_firmware/pull/12789" target="_blank" rel="noreferrer">#12789</a>)</li><li>RGB Matrix working for Sofle RGB (<a href="https://github.com/qmk/qmk_firmware/pull/12861" target="_blank" rel="noreferrer">#12861</a>)</li><li>Add Durgod Hades, Galaxy and Venus Keyboards (<a href="https://github.com/qmk/qmk_firmware/pull/12893" target="_blank" rel="noreferrer">#12893</a>)</li><li>kint36: set correct EEPROM size (<a href="https://github.com/qmk/qmk_firmware/pull/12946" target="_blank" rel="noreferrer">#12946</a>)</li><li>Updated encoder_update_user on my keymap to follow the new signature on quantum (<a href="https://github.com/qmk/qmk_firmware/pull/13152" target="_blank" rel="noreferrer">#13152</a>)</li><li>Add Creator Pro by SergioPoverony (<a href="https://github.com/qmk/qmk_firmware/pull/13154" target="_blank" rel="noreferrer">#13154</a>)</li><li>Use the new ST7565 driver on Ergodox Infinity (<a href="https://github.com/qmk/qmk_firmware/pull/13165" target="_blank" rel="noreferrer">#13165</a>)</li><li>Refactor atom47 and add rev4 and rev5 (<a href="https://github.com/qmk/qmk_firmware/pull/13201" target="_blank" rel="noreferrer">#13201</a>)</li><li>Add Bakeneko65 V3 and revision folders (<a href="https://github.com/qmk/qmk_firmware/pull/13228" target="_blank" rel="noreferrer">#13228</a>)</li><li>Keyboards/RGBKB/Mün (<a href="https://github.com/qmk/qmk_firmware/pull/13239" target="_blank" rel="noreferrer">#13239</a>)</li><li>Optimize our jsonschema by using refs (<a href="https://github.com/qmk/qmk_firmware/pull/13271" target="_blank" rel="noreferrer">#13271</a>)</li><li>Handwired/Stream_Cheap/2x4: Add via support (<a href="https://github.com/qmk/qmk_firmware/pull/13297" target="_blank" rel="noreferrer">#13297</a>)</li><li>ez_maker/directpins for easy one-offs in qmk_configurator (<a href="https://github.com/qmk/qmk_firmware/pull/13321" target="_blank" rel="noreferrer">#13321</a>)</li><li>add kinT kinesis keyboard controller (kint41 variant) (<a href="https://github.com/qmk/qmk_firmware/pull/13333" target="_blank" rel="noreferrer">#13333</a>)</li><li>Error log cleanup (<a href="https://github.com/qmk/qmk_firmware/pull/13349" target="_blank" rel="noreferrer">#13349</a>)</li><li>Drashna&#39;s split updates (<a href="https://github.com/qmk/qmk_firmware/pull/13350" target="_blank" rel="noreferrer">#13350</a>)</li><li>Migrate SHIFT_ESC and RGB <code>fn_actions</code> to Grave Escape and RGB keycodes (<a href="https://github.com/qmk/qmk_firmware/pull/13360" target="_blank" rel="noreferrer">#13360</a>)</li><li>Add a lot more data to info.json (<a href="https://github.com/qmk/qmk_firmware/pull/13366" target="_blank" rel="noreferrer">#13366</a>)</li><li>Remove <code>API_SYSEX_ENABLE</code>s from rules.mk (<a href="https://github.com/qmk/qmk_firmware/pull/13389" target="_blank" rel="noreferrer">#13389</a>)</li><li>gmmk/pro/mike1808 keymap (<a href="https://github.com/qmk/qmk_firmware/pull/13398" target="_blank" rel="noreferrer">#13398</a>)</li><li>Remove deprecated callbacks for encoders and dip switches (<a href="https://github.com/qmk/qmk_firmware/pull/13404" target="_blank" rel="noreferrer">#13404</a>)</li><li>first pass: matrix consistency improvements (<a href="https://github.com/qmk/qmk_firmware/pull/13471" target="_blank" rel="noreferrer">#13471</a>)</li><li>Migrate more <code>fn_actions</code> stuff (<a href="https://github.com/qmk/qmk_firmware/pull/13502" target="_blank" rel="noreferrer">#13502</a>)</li><li>add simple gmmk pro macos keymap with rgb (<a href="https://github.com/qmk/qmk_firmware/pull/13504" target="_blank" rel="noreferrer">#13504</a>)</li><li>move volcano660 to ilumkb folder (<a href="https://github.com/qmk/qmk_firmware/pull/13550" target="_blank" rel="noreferrer">#13550</a>)</li><li>Valor Rev 2 (<a href="https://github.com/qmk/qmk_firmware/pull/13551" target="_blank" rel="noreferrer">#13551</a>)</li><li>Split GMMK Pro PCBs into separate revisions (<a href="https://github.com/qmk/qmk_firmware/pull/13570" target="_blank" rel="noreferrer">#13570</a>)</li><li>Remove the vision_division keyboard (<a href="https://github.com/qmk/qmk_firmware/pull/13571" target="_blank" rel="noreferrer">#13571</a>)</li><li>Develop - Change uint32_t to layer_state_t (<a href="https://github.com/qmk/qmk_firmware/pull/13596" target="_blank" rel="noreferrer">#13596</a>)</li><li>Develop - DC01 left (<a href="https://github.com/qmk/qmk_firmware/pull/13597" target="_blank" rel="noreferrer">#13597</a>)</li><li>Created &quot;paddlegame&quot; keymap (<a href="https://github.com/qmk/qmk_firmware/pull/13629" target="_blank" rel="noreferrer">#13629</a>)</li><li>Add timer_avr to includes for broken builds (<a href="https://github.com/qmk/qmk_firmware/pull/13641" target="_blank" rel="noreferrer">#13641</a>)</li><li>Disable console by default on all Keebio boards (<a href="https://github.com/qmk/qmk_firmware/pull/13649" target="_blank" rel="noreferrer">#13649</a>)</li><li>Enable LTO by default on BastardKB Scylla (<a href="https://github.com/qmk/qmk_firmware/pull/13664" target="_blank" rel="noreferrer">#13664</a>)</li><li>Reduce compile size for dz60rgb v2.1 (<a href="https://github.com/qmk/qmk_firmware/pull/13680" target="_blank" rel="noreferrer">#13680</a>)</li><li>Clean up remaining RGB_DISABLE_WHEN_USB_SUSPENDED defines (<a href="https://github.com/qmk/qmk_firmware/pull/13689" target="_blank" rel="noreferrer">#13689</a>)</li><li>Remove some legacy files (<a href="https://github.com/qmk/qmk_firmware/pull/13715" target="_blank" rel="noreferrer">#13715</a>)</li><li>[Keyboard Update] Change to L422 (<a href="https://github.com/qmk/qmk_firmware/pull/13717" target="_blank" rel="noreferrer">#13717</a>)</li><li>Update kyria make path example (<a href="https://github.com/qmk/qmk_firmware/pull/13720" target="_blank" rel="noreferrer">#13720</a>)</li><li>Drashna&#39;s Defaults cleanup (<a href="https://github.com/qmk/qmk_firmware/pull/13722" target="_blank" rel="noreferrer">#13722</a>)</li><li>Reduce firmware size in prep for #12670 (<a href="https://github.com/qmk/qmk_firmware/pull/13724" target="_blank" rel="noreferrer">#13724</a>)</li><li>Tidy up rgbkb/mun (<a href="https://github.com/qmk/qmk_firmware/pull/13801" target="_blank" rel="noreferrer">#13801</a>)</li><li>Make default keymap for GMMK Pro reflect stock (<a href="https://github.com/qmk/qmk_firmware/pull/13850" target="_blank" rel="noreferrer">#13850</a>)</li><li>Rework as per 9824 (<a href="https://github.com/qmk/qmk_firmware/pull/13898" target="_blank" rel="noreferrer">#13898</a>)</li><li>Remove console from keebio via keyboards (<a href="https://github.com/qmk/qmk_firmware/pull/13901" target="_blank" rel="noreferrer">#13901</a>)</li><li>Drashna split transport improvement (<a href="https://github.com/qmk/qmk_firmware/pull/13905" target="_blank" rel="noreferrer">#13905</a>)</li><li>Copy GMMK Pro screw specs to ISO readme (<a href="https://github.com/qmk/qmk_firmware/pull/13908" target="_blank" rel="noreferrer">#13908</a>)</li><li>Clean up remaining RGB_DISABLE_WHEN_USB_SUSPENDED defines Part 2 (<a href="https://github.com/qmk/qmk_firmware/pull/13912" target="_blank" rel="noreferrer">#13912</a>)</li><li>Add andrebrait layout for GMMK Pro (<a href="https://github.com/qmk/qmk_firmware/pull/13932" target="_blank" rel="noreferrer">#13932</a>)</li><li>Updated RGB Matrix suspend define part 3 (<a href="https://github.com/qmk/qmk_firmware/pull/13954" target="_blank" rel="noreferrer">#13954</a>)</li><li>Improve andrebrait keymap (<a href="https://github.com/qmk/qmk_firmware/pull/13985" target="_blank" rel="noreferrer">#13985</a>)</li><li>Drashna&#39;s Improve OLEDs and custom Split code (<a href="https://github.com/qmk/qmk_firmware/pull/14063" target="_blank" rel="noreferrer">#14063</a>)</li><li>Kyria default reformat (<a href="https://github.com/qmk/qmk_firmware/pull/14080" target="_blank" rel="noreferrer">#14080</a>)</li><li>Feature rich keymap for GMMK Pro (ANSI) (<a href="https://github.com/qmk/qmk_firmware/pull/14120" target="_blank" rel="noreferrer">#14120</a>)</li></ul><p>Keyboard fixes:</p><ul><li>Fix LED mapping for GMMK Pro (<a href="https://github.com/qmk/qmk_firmware/pull/13189" target="_blank" rel="noreferrer">#13189</a>)</li><li>Fix up SplitKB keyboards (<a href="https://github.com/qmk/qmk_firmware/pull/13511" target="_blank" rel="noreferrer">#13511</a>)</li><li>Keyboards/sol rev2 fix (<a href="https://github.com/qmk/qmk_firmware/pull/13533" target="_blank" rel="noreferrer">#13533</a>)</li><li>Fix MATRIX_COLS for aeboards/constellation/rev2 (<a href="https://github.com/qmk/qmk_firmware/pull/13633" target="_blank" rel="noreferrer">#13633</a>)</li><li>Fix errors with matrix_output_unselect_delay function calls (<a href="https://github.com/qmk/qmk_firmware/pull/13645" target="_blank" rel="noreferrer">#13645</a>)</li><li>Fix default keymap for 0xCB 1337 keyboard (<a href="https://github.com/qmk/qmk_firmware/pull/13646" target="_blank" rel="noreferrer">#13646</a>)</li><li>Fix Matrix Row number for ggkeyboards/genisis (<a href="https://github.com/qmk/qmk_firmware/pull/13647" target="_blank" rel="noreferrer">#13647</a>)</li><li>Fix matrix issues with Promethium (<a href="https://github.com/qmk/qmk_firmware/pull/13648" target="_blank" rel="noreferrer">#13648</a>)</li><li>Fix dc01/left so that it doesn&#39;t throw a warning (<a href="https://github.com/qmk/qmk_firmware/pull/13653" target="_blank" rel="noreferrer">#13653</a>)</li><li>Remove broken, unmaintained converter/ibm_5291 (<a href="https://github.com/qmk/qmk_firmware/pull/13658" target="_blank" rel="noreferrer">#13658</a>)</li><li>Quick hack to fix Astro65 board (<a href="https://github.com/qmk/qmk_firmware/pull/13665" target="_blank" rel="noreferrer">#13665</a>)</li><li>Fix symmetric70_proto build break on develop branch (<a href="https://github.com/qmk/qmk_firmware/pull/13667" target="_blank" rel="noreferrer">#13667</a>)</li><li>Fix matrix delay on Drop boards (<a href="https://github.com/qmk/qmk_firmware/pull/13671" target="_blank" rel="noreferrer">#13671</a>)</li><li>Fix split matrix for sekigon grs 70ec (<a href="https://github.com/qmk/qmk_firmware/pull/13672" target="_blank" rel="noreferrer">#13672</a>)</li><li>Fix type on pandora via keymap (<a href="https://github.com/qmk/qmk_firmware/pull/13681" target="_blank" rel="noreferrer">#13681</a>)</li><li>Fix &amp; clean up tronguylabs/m122_3270 (<a href="https://github.com/qmk/qmk_firmware/pull/13684" target="_blank" rel="noreferrer">#13684</a>)</li><li>Fix up xd002 rgb keymaps (<a href="https://github.com/qmk/qmk_firmware/pull/13685" target="_blank" rel="noreferrer">#13685</a>)</li><li>Dactyl Manuform cleanup (<a href="https://github.com/qmk/qmk_firmware/pull/13686" target="_blank" rel="noreferrer">#13686</a>)</li><li>Fix Q1 change dip switch to bool (<a href="https://github.com/qmk/qmk_firmware/pull/13687" target="_blank" rel="noreferrer">#13687</a>)</li><li>Fix compile size for the Merge UM70 via keymap (<a href="https://github.com/qmk/qmk_firmware/pull/13690" target="_blank" rel="noreferrer">#13690</a>)</li><li>Fix compile size for the Lets Split Sockets via keymap (<a href="https://github.com/qmk/qmk_firmware/pull/13691" target="_blank" rel="noreferrer">#13691</a>)</li><li>Fix Compile size on ungodly Launch Pad (<a href="https://github.com/qmk/qmk_firmware/pull/13692" target="_blank" rel="noreferrer">#13692</a>)</li><li>dirty fix (<a href="https://github.com/qmk/qmk_firmware/pull/13695" target="_blank" rel="noreferrer">#13695</a>)</li><li>Fix compile size for the Vitamins Included via keymap (<a href="https://github.com/qmk/qmk_firmware/pull/13696" target="_blank" rel="noreferrer">#13696</a>)</li><li>Fix typo in Dactyl Manuform (<a href="https://github.com/qmk/qmk_firmware/pull/13740" target="_blank" rel="noreferrer">#13740</a>)</li><li>Fix compile issues due to LED changes (<a href="https://github.com/qmk/qmk_firmware/pull/13821" target="_blank" rel="noreferrer">#13821</a>)</li><li>Fix SRC include for matrix/m20add issi driver (<a href="https://github.com/qmk/qmk_firmware/pull/13826" target="_blank" rel="noreferrer">#13826</a>)</li><li>fix develop branch move file (<a href="https://github.com/qmk/qmk_firmware/pull/13832" target="_blank" rel="noreferrer">#13832</a>)</li><li>Fix knops keymaps (<a href="https://github.com/qmk/qmk_firmware/pull/13872" target="_blank" rel="noreferrer">#13872</a>)</li><li>Switch Draculad to using WPM char hack (<a href="https://github.com/qmk/qmk_firmware/pull/13886" target="_blank" rel="noreferrer">#13886</a>)</li><li>Fix up builds after #8591 (<a href="https://github.com/qmk/qmk_firmware/pull/13900" target="_blank" rel="noreferrer">#13900</a>)</li><li>Fix matrix_output_unselect_delay for handwired/xealousbrown (<a href="https://github.com/qmk/qmk_firmware/pull/13913" target="_blank" rel="noreferrer">#13913</a>)</li><li>Fixup rgb matrix config for KBD67 mkII boards (<a href="https://github.com/qmk/qmk_firmware/pull/13931" target="_blank" rel="noreferrer">#13931</a>)</li><li>Fix compliation for ferris 0.2 bling (<a href="https://github.com/qmk/qmk_firmware/pull/13937" target="_blank" rel="noreferrer">#13937</a>)</li><li>Fix some additional bootmagic settings (<a href="https://github.com/qmk/qmk_firmware/pull/13979" target="_blank" rel="noreferrer">#13979</a>)</li><li>Fix default keymap for GMMK Pro Iso (<a href="https://github.com/qmk/qmk_firmware/pull/13980" target="_blank" rel="noreferrer">#13980</a>)</li><li>Fixup Ungodly Launch Pad config (<a href="https://github.com/qmk/qmk_firmware/pull/13992" target="_blank" rel="noreferrer">#13992</a>)</li><li>Fix errors that have cropped up in develop (<a href="https://github.com/qmk/qmk_firmware/pull/14005" target="_blank" rel="noreferrer">#14005</a>)</li><li>Fix wait_us overflow in matrix for dactyl based boards (<a href="https://github.com/qmk/qmk_firmware/pull/14039" target="_blank" rel="noreferrer">#14039</a>)</li><li>Fixup Neson Design N6 ISSI includes (<a href="https://github.com/qmk/qmk_firmware/pull/14045" target="_blank" rel="noreferrer">#14045</a>)</li><li>Fixup <code>massdrop/alt</code>, <code>cest73/tkm</code>. (<a href="https://github.com/qmk/qmk_firmware/pull/14048" target="_blank" rel="noreferrer">#14048</a>)</li><li>fix helix:fraanrosi compile error caused by #13677. (<a href="https://github.com/qmk/qmk_firmware/pull/14061" target="_blank" rel="noreferrer">#14061</a>)</li><li>Fix compile issues for Tractyl Manuform (<a href="https://github.com/qmk/qmk_firmware/pull/14105" target="_blank" rel="noreferrer">#14105</a>)</li><li>Disable Console on Keebio Quefrency (<a href="https://github.com/qmk/qmk_firmware/pull/14108" target="_blank" rel="noreferrer">#14108</a>)</li><li>Fixed GMMK Pro -&gt; stickandgum keymap readme.md (<a href="https://github.com/qmk/qmk_firmware/pull/14123" target="_blank" rel="noreferrer">#14123</a>)</li><li>Drashna keymap fixups (<a href="https://github.com/qmk/qmk_firmware/pull/14140" target="_blank" rel="noreferrer">#14140</a>)</li><li>fix (<a href="https://github.com/qmk/qmk_firmware/pull/14142" target="_blank" rel="noreferrer">#14142</a>)</li><li>Fix merge artifacts (<a href="https://github.com/qmk/qmk_firmware/pull/14146" target="_blank" rel="noreferrer">#14146</a>)</li><li>Update readme files (<a href="https://github.com/qmk/qmk_firmware/pull/14172" target="_blank" rel="noreferrer">#14172</a>)</li></ul><p>Others:</p><ul><li>Add examples to RGB Matrix Indicators docs (<a href="https://github.com/qmk/qmk_firmware/pull/12797" target="_blank" rel="noreferrer">#12797</a>)</li></ul><p>Bugs:</p><ul><li>Fix Indicator LED issues (<a href="https://github.com/qmk/qmk_firmware/pull/12097" target="_blank" rel="noreferrer">#12097</a>)</li><li>Fixing incorrect keymap build when switching between multiple keymap.jsons (<a href="https://github.com/qmk/qmk_firmware/pull/12632" target="_blank" rel="noreferrer">#12632</a>)</li><li>Fix LED Hit Counter for LED/RGB Matrix (<a href="https://github.com/qmk/qmk_firmware/pull/12674" target="_blank" rel="noreferrer">#12674</a>)</li><li>ChibiOS fix O3 and LTO breakage of extra keys and joystick (<a href="https://github.com/qmk/qmk_firmware/pull/12819" target="_blank" rel="noreferrer">#12819</a>)</li><li>Remove the #10088 hotfix for Teensy 3.1-like Input:Club keyboards (<a href="https://github.com/qmk/qmk_firmware/pull/12870" target="_blank" rel="noreferrer">#12870</a>)</li><li>Fix firmware size check with avr-libc 1:2.0.0+Atmel3.6.2-1.1 (Debian bullseye) (<a href="https://github.com/qmk/qmk_firmware/pull/12951" target="_blank" rel="noreferrer">#12951</a>)</li><li>Fix RGB/LED Suspend defines (<a href="https://github.com/qmk/qmk_firmware/pull/13146" target="_blank" rel="noreferrer">#13146</a>)</li><li>Fix overrun in st7565_write_raw when not at (0, 0) (<a href="https://github.com/qmk/qmk_firmware/pull/13209" target="_blank" rel="noreferrer">#13209</a>)</li><li>Upgrades Vagrant box to Debian 10 to fix Docker build error on Debian 9. (<a href="https://github.com/qmk/qmk_firmware/pull/13236" target="_blank" rel="noreferrer">#13236</a>)</li><li>Fix issues with VIA EEPROM init and bring in line with eeconfig functionality (<a href="https://github.com/qmk/qmk_firmware/pull/13243" target="_blank" rel="noreferrer">#13243</a>)</li><li>Fix CRC for AVR and enable again. (<a href="https://github.com/qmk/qmk_firmware/pull/13253" target="_blank" rel="noreferrer">#13253</a>)</li><li>Fix linker error when rgblight and RGB Matrix are both enabled (<a href="https://github.com/qmk/qmk_firmware/pull/13304" target="_blank" rel="noreferrer">#13304</a>)</li><li>Fix building layouts from JSON (<a href="https://github.com/qmk/qmk_firmware/pull/13310" target="_blank" rel="noreferrer">#13310</a>)</li><li>Add rgblight to RGB Matrix VPATH (<a href="https://github.com/qmk/qmk_firmware/pull/13371" target="_blank" rel="noreferrer">#13371</a>)</li><li>Fix two out of bounds accesses from #13330. (<a href="https://github.com/qmk/qmk_firmware/pull/13525" target="_blank" rel="noreferrer">#13525</a>)</li><li>Fixes for clang not being able to run unit tests (<a href="https://github.com/qmk/qmk_firmware/pull/13546" target="_blank" rel="noreferrer">#13546</a>)</li><li>Fixup Audio startup and add to documents (<a href="https://github.com/qmk/qmk_firmware/pull/13606" target="_blank" rel="noreferrer">#13606</a>)</li><li>CLI/Docs: Fix the format commands&#39; name (<a href="https://github.com/qmk/qmk_firmware/pull/13668" target="_blank" rel="noreferrer">#13668</a>)</li><li>Disables rgblight twinkle by default. (<a href="https://github.com/qmk/qmk_firmware/pull/13677" target="_blank" rel="noreferrer">#13677</a>)</li><li>Fix typo in dip switch example (<a href="https://github.com/qmk/qmk_firmware/pull/13688" target="_blank" rel="noreferrer">#13688</a>)</li><li>docs/cli_commands: fix typo (<a href="https://github.com/qmk/qmk_firmware/pull/13697" target="_blank" rel="noreferrer">#13697</a>)</li><li>Include gpio.h in solenoid driver for GPIO Control functions (<a href="https://github.com/qmk/qmk_firmware/pull/13716" target="_blank" rel="noreferrer">#13716</a>)</li><li>Fix pimoroni trackball read address (<a href="https://github.com/qmk/qmk_firmware/pull/13810" target="_blank" rel="noreferrer">#13810</a>)</li><li>Fix Key Override includes (<a href="https://github.com/qmk/qmk_firmware/pull/13831" target="_blank" rel="noreferrer">#13831</a>)</li><li>Fix alignment of USB out report buffer 2 -&gt; 4 (<a href="https://github.com/qmk/qmk_firmware/pull/13838" target="_blank" rel="noreferrer">#13838</a>)</li><li>Fix compilation issue. (<a href="https://github.com/qmk/qmk_firmware/pull/13926" target="_blank" rel="noreferrer">#13926</a>)</li><li>Fix <code>combo_disable</code> (<a href="https://github.com/qmk/qmk_firmware/pull/13988" target="_blank" rel="noreferrer">#13988</a>)</li><li>Fix pmw3360 code to only output debug info if mouse debugging is enabled (<a href="https://github.com/qmk/qmk_firmware/pull/13993" target="_blank" rel="noreferrer">#13993</a>)</li><li>Fix ifdefs for OLED split sync code (<a href="https://github.com/qmk/qmk_firmware/pull/14017" target="_blank" rel="noreferrer">#14017</a>)</li><li>Various fixes from reorg of files (<a href="https://github.com/qmk/qmk_firmware/pull/14051" target="_blank" rel="noreferrer">#14051</a>)</li><li>Fixup atsam builds. (<a href="https://github.com/qmk/qmk_firmware/pull/14052" target="_blank" rel="noreferrer">#14052</a>)</li><li>Fix RGB/LED Matrix Suspend code (<a href="https://github.com/qmk/qmk_firmware/pull/14084" target="_blank" rel="noreferrer">#14084</a>)</li><li>Fix issues with recent keymap.json changes (<a href="https://github.com/qmk/qmk_firmware/pull/14089" target="_blank" rel="noreferrer">#14089</a>)</li><li>Fix LED Matrix suspend code (<a href="https://github.com/qmk/qmk_firmware/pull/14090" target="_blank" rel="noreferrer">#14090</a>)</li><li>Fix up compilation issues. (<a href="https://github.com/qmk/qmk_firmware/pull/14095" target="_blank" rel="noreferrer">#14095</a>)</li><li>Fix copypasta issue with pmw3360 sensor config (<a href="https://github.com/qmk/qmk_firmware/pull/14106" target="_blank" rel="noreferrer">#14106</a>)</li><li>Fix typo (<a href="https://github.com/qmk/qmk_firmware/pull/14118" target="_blank" rel="noreferrer">#14118</a>)</li><li>Fix bootloadHID comments breaking :flash (<a href="https://github.com/qmk/qmk_firmware/pull/14133" target="_blank" rel="noreferrer">#14133</a>)</li><li>Fix Mouse Shared EP functionality (<a href="https://github.com/qmk/qmk_firmware/pull/14136" target="_blank" rel="noreferrer">#14136</a>)</li><li>Short term bodge for firmware size bloat (<a href="https://github.com/qmk/qmk_firmware/pull/14144" target="_blank" rel="noreferrer">#14144</a>)</li><li>Move to correct location (<a href="https://github.com/qmk/qmk_firmware/pull/14171" target="_blank" rel="noreferrer">#14171</a>)</li></ul></div></div></main><footer class="VPDocFooter" data-v-39a288b8 data-v-09de1c0f><!--[--><!--]--><!----><nav class="prev-next" data-v-09de1c0f><div class="pager" data-v-09de1c0f><!----></div><div class="pager" data-v-09de1c0f><a class="VPLink link pager-link next" href="/newbs" data-v-09de1c0f><!--[--><span class="desc" data-v-09de1c0f>Next page</span><span class="title" data-v-09de1c0f>Introduction</span><!--]--></a></div></nav></footer><!--[--><!--]--></div></div></div><!--[--><!--]--></div></div><!----><!--[--><!--]--></div></div>
<script>window.__VP_HASH_MAP__=JSON.parse("{\"changelog_20190830.md\":\"6XixyP8L\",\"changelog_20200229.md\":\"BmeRJene\",\"changelog_20200530.md\":\"q1Nx4Bsf\",\"changelog_20200829.md\":\"DPwMxUVb\",\"changelog_20201128.md\":\"cyEKi6md\",\"changelog_20210227.md\":\"D-qZNAtE\",\"changelog_20210529.md\":\"CMCDBsST\",\"changelog_20210828.md\":\"Bz_Cqhkz\",\"changelog_20211127.md\":\"CKqQnO6y\",\"changelog_20220226.md\":\"CyVoLONs\",\"changelog_20220528.md\":\"CihUA7fi\",\"changelog_20220827.md\":\"Df1nzx8O\",\"changelog_20221126.md\":\"Coqj0YNT\",\"changelog_20230226.md\":\"kWJusvXj\",\"changelog_20230528.md\":\"BQOXA7rR\",\"changelog_20230827.md\":\"CysqTdAP\",\"changelog_20231126.md\":\"D6JlaCSH\",\"changelog_20240225.md\":\"DmbHo-aA\",\"changelog_20240526.md\":\"ChevS3SM\",\"changelog_20240825.md\":\"Bim1xI09\",\"capabilities.md\":\"C8eGasTO\",\"capabilities_inc.md\":\"Pt72L4b9\",\"api_development_environment.md\":\"Co1Lkuhl\",\"api_development_overview.md\":\"iUK6GGbG\",\"api_docs.md\":\"DrPevC-R\",\"api_overview.md\":\"B3sDKDJg\",\"arm_debugging.md\":\"BiRXU6nl\",\"breaking_changes.md\":\"BIpM1JDF\",\"breaking_changes_history.md\":\"B_yw4mvF\",\"breaking_changes_instructions.md\":\"DUu8Tdu8\",\"chibios_upgrade_instructions.md\":\"BkS-xCQh\",\"cli.md\":\"Ct8-gh67\",\"cli_commands.md\":\"CijNW8-t\",\"cli_configuration.md\":\"DT4O5Qrb\",\"cli_development.md\":\"C1RMbrqW\",\"cli_tab_complete.md\":\"CT9NBEM3\",\"coding_conventions_c.md\":\"Bi7EH0Zk\",\"coding_conventions_python.md\":\"C45woQX8\",\"compatible_microcontrollers.md\":\"C3RSssel\",\"config_options.md\":\"BroSRrlf\",\"configurator_architecture.md\":\"ClRUnOlV\",\"configurator_default_keymaps.md\":\"Btb4Y_-z\",\"configurator_step_by_step.md\":\"Bhhrr-KZ\",\"configurator_troubleshooting.md\":\"CyTH_MO_\",\"contributing.md\":\"Z2KawZJM\",\"custom_matrix.md\":\"C5Wxxs18\",\"custom_quantum_functions.md\":\"CchHkQ2j\",\"data_driven_config.md\":\"CemhrDnh\",\"documentation_best_practices.md\":\"D_2t5SCy\",\"documentation_templates.md\":\"DNSTMFQT\",\"driver_installation_zadig.md\":\"CzMMyItw\",\"drivers_adc.md\":\"CdK8AtnR\",\"drivers_apa102.md\":\"D1i8N4Yl\",\"drivers_audio.md\":\"FGaarcoq\",\"drivers_aw20216s.md\":\"DFO5qaXQ\",\"drivers_eeprom.md\":\"DjbSpQAl\",\"drivers_flash.md\":\"TpToebZV\",\"drivers_gpio.md\":\"_T-XR1i8\",\"drivers_i2c.md\":\"CZ3yUqUc\",\"drivers_is31fl3218.md\":\"Bw4QYvxz\",\"drivers_is31fl3236.md\":\"kw_4WomB\",\"drivers_is31fl3729.md\":\"B05FYaEa\",\"drivers_is31fl3731.md\":\"EbaJGcwl\",\"drivers_is31fl3733.md\":\"CxiWN3qf\",\"drivers_is31fl3736.md\":\"CNsB35Bn\",\"drivers_is31fl3737.md\":\"dFrKnsKN\",\"drivers_is31fl3741.md\":\"DCbdJxE4\",\"drivers_is31fl3742a.md\":\"Bh9Q6Zt4\",\"drivers_is31fl3743a.md\":\"W_EODxfi\",\"drivers_is31fl3745.md\":\"Dd_riPpV\",\"drivers_is31fl3746a.md\":\"DaWS07Rz\",\"drivers_serial.md\":\"B9cdhvZY\",\"drivers_snled27351.md\":\"C202OTO_\",\"drivers_spi.md\":\"KJwJ1bDT\",\"drivers_uart.md\":\"D5bf2Ez7\",\"drivers_ws2812.md\":\"_cnUpPJK\",\"easy_maker.md\":\"B1e0p_KP\",\"faq_build.md\":\"CdMV-bmr\",\"faq_debug.md\":\"fagccKfw\",\"faq_general.md\":\"BS8dICfT\",\"faq_keymap.md\":\"CmJjc7AB\",\"faq_misc.md\":\"pugCgT23\",\"feature_advanced_keycodes.md\":\"Dc44pi1G\",\"feature_converters.md\":\"nbsy9vmL\",\"feature_debounce_type.md\":\"BcX3faCS\",\"feature_eeprom.md\":\"CrKIb9by\",\"feature_layers.md\":\"mZMmAI4u\",\"feature_layouts.md\":\"CC3GUG9e\",\"feature_macros.md\":\"bo5m05vP\",\"feature_userspace.md\":\"DzgyEZm9\",\"features_audio.md\":\"B4yww0JU\",\"features_auto_shift.md\":\"gbN4UbG7\",\"features_autocorrect.md\":\"BgqtSxc-\",\"features_backlight.md\":\"BtYuf8hb\",\"features_bluetooth.md\":\"DB3PFlcy\",\"features_bootmagic.md\":\"DBdRU139\",\"features_caps_word.md\":\"Cz8-Ua5R\",\"features_combo.md\":\"nQwtfYKJ\",\"features_command.md\":\"DDU6fJSP\",\"features_digitizer.md\":\"qNC7cDmj\",\"features_dip_switch.md\":\"DQ7jEipz\",\"features_dynamic_macros.md\":\"CmY3EYfK\",\"features_encoders.md\":\"Cw1N3hGV\",\"features_grave_esc.md\":\"RGWiZPw2\",\"features_haptic_feedback.md\":\"gCZCxZph\",\"features_hd44780.md\":\"-3NTUiv7\",\"features_joystick.md\":\"C2qziErP\",\"features_key_lock.md\":\"CUN1wwEW\",\"features_key_overrides.md\":\"8BXSGuCp\",\"features_leader_key.md\":\"n1dWYTAs\",\"features_led_indicators.md\":\"BVxGMxO2\",\"features_led_matrix.md\":\"9rVa2nNi\",\"features_midi.md\":\"43GZ4OH3\",\"features_mouse_keys.md\":\"BmllLEqo\",\"features_oled_driver.md\":\"C3uxh0Oj\",\"features_os_detection.md\":\"drYM7kiJ\",\"features_pointing_device.md\":\"B9EDVJB4\",\"features_programmable_button.md\":\"DwWC5ebv\",\"features_ps2_mouse.md\":\"DKwoXQGb\",\"features_rawhid.md\":\"DTmSRY8x\",\"features_repeat_key.md\":\"BqI6T5Mq\",\"features_rgb_matrix.md\":\"DUewVusO\",\"features_rgblight.md\":\"CG7f7xkY\",\"features_secure.md\":\"CD5kcVKe\",\"features_send_string.md\":\"CnGykRQb\",\"features_sequencer.md\":\"CBjmlRB1\",\"features_space_cadet.md\":\"CfxwOTcC\",\"features_split_keyboard.md\":\"y_WiFRAc\",\"features_st7565.md\":\"CuGH6SXy\",\"features_stenography.md\":\"BRUTFgYl\",\"features_swap_hands.md\":\"BhxH6MTX\",\"features_tap_dance.md\":\"DvetqhsD\",\"features_tri_layer.md\":\"BMJJN_w-\",\"features_unicode.md\":\"B6SxjNg9\",\"features_wpm.md\":\"CWZNhgox\",\"flashing.md\":\"tM_8Yx0K\",\"getting_started_docker.md\":\"Cnn_f4sW\",\"getting_started_github.md\":\"D0lC10jh\",\"getting_started_introduction.md\":\"GsEegiNA\",\"getting_started_make_guide.md\":\"DDTf0-f5\",\"hand_wire.md\":\"2nCOM8b0\",\"hardware_drivers.md\":\"BsD3xGzk\",\"hardware_keyboard_guidelines.md\":\"Dcs7WQiS\",\"how_a_matrix_works.md\":\"EVA8jmAG\",\"how_keyboards_work.md\":\"D2JdKSHc\",\"index.md\":\"D5T9CS99\",\"isp_flashing_guide.md\":\"DmbtFgBl\",\"keycodes.md\":\"og9kdgJC\",\"keycodes_basic.md\":\"gl4lXp5J\",\"keycodes_magic.md\":\"iJfQN0Dn\",\"keycodes_us_ansi_shifted.md\":\"BehOeGdH\",\"keymap.md\":\"CdrmoAZr\",\"mod_tap.md\":\"GSxUpFEk\",\"newbs.md\":\"DS70jPXW\",\"newbs_building_firmware.md\":\"06z-sXhq\",\"newbs_building_firmware_configurator.md\":\"DfUl3R6q\",\"newbs_building_firmware_workflow.md\":\"BLcAY2Lf\",\"newbs_external_userspace.md\":\"kNI3eL4q\",\"newbs_flashing.md\":\"CF33sxBJ\",\"newbs_getting_started.md\":\"DdGftrxz\",\"newbs_git_best_practices.md\":\"DTeBT97L\",\"newbs_git_resolving_merge_conflicts.md\":\"vfprxTW3\",\"newbs_git_resynchronize_a_branch.md\":\"BL1pkTK0\",\"newbs_git_using_your_master_branch.md\":\"pZJVFMzk\",\"newbs_learn_more_resources.md\":\"DZbC0sy7\",\"newbs_testing_debugging.md\":\"C8AE6Pzy\",\"one_shot_keys.md\":\"g_Tmds-e\",\"other_eclipse.md\":\"CT58b2iV\",\"other_vscode.md\":\"DR8ueVMr\",\"platformdev_blackpill_f4x1.md\":\"Bj4fjFyI\",\"platformdev_chibios_earlyinit.md\":\"DplaR3bf\",\"platformdev_proton_c.md\":\"Dk_Wz8u3\",\"platformdev_rp2040.md\":\"C9gaLOqj\",\"platformdev_selecting_arm_mcu.md\":\"DfJIN6w2\",\"porting_your_keyboard_to_qmk.md\":\"Yzrs-YYe\",\"pr_checklist.md\":\"tdi1x8q1\",\"quantum_keycodes.md\":\"CZq9PZhZ\",\"quantum_painter.md\":\"_fKaEhr6\",\"quantum_painter_lvgl.md\":\"mVA69vbX\",\"quantum_painter_qff.md\":\"CdS-Jujf\",\"quantum_painter_qgf.md\":\"DO-ewW08\",\"quantum_painter_rle.md\":\"Jmsd0cx7\",\"ref_functions.md\":\"EuUUGcm-\",\"reference_configurator_support.md\":\"X0J2tW_B\",\"reference_glossary.md\":\"Dk0gBzZF\",\"reference_info_json.md\":\"D9eqd11f\",\"reference_keymap_extras.md\":\"BPA8eDRH\",\"squeezing_avr.md\":\"DFxT-RuF\",\"support.md\":\"D8NX0D4I\",\"support_deprecation_policy.md\":\"8UJpXVyh\",\"syllabus.md\":\"CBpH006u\",\"tap_hold.md\":\"DzRo13EI\",\"understanding_qmk.md\":\"Bao9owmm\",\"unit_testing.md\":\"B81LKDEi\"}");window.__VP_SITE_DATA__=JSON.parse("{\"lang\":\"en-US\",\"dir\":\"ltr\",\"title\":\"QMK Firmware\",\"description\":\"Documentation for QMK Firmware\",\"base\":\"/\",\"head\":[],\"router\":{\"prefetchLinks\":true},\"appearance\":true,\"themeConfig\":{\"logo\":{\"light\":\"/qmk-logo-light.svg\",\"dark\":\"/qmk-logo-dark.svg\"},\"title\":\"QMK Firmware\",\"nav\":[{\"text\":\"Home\",\"link\":\"/\"}],\"search\":{\"provider\":\"local\"},\"sidebar\":[{\"text\":\"Tutorial\",\"items\":[{\"text\":\"Introduction\",\"link\":\"/newbs\"},{\"text\":\"Setup\",\"link\":\"/newbs_getting_started\"},{\"text\":\"Building Your First Firmware\",\"link\":\"/newbs_building_firmware\"},{\"text\":\"Flashing Firmware\",\"link\":\"/newbs_flashing\"},{\"text\":\"Getting Help/Support\",\"link\":\"/support\"},{\"text\":\"External Userspace\",\"link\":\"/newbs_external_userspace\"},{\"text\":\"Other Resources\",\"link\":\"/newbs_learn_more_resources\"},{\"text\":\"Syllabus\",\"link\":\"/syllabus\"}]},{\"text\":\"FAQs\",\"items\":[{\"text\":\"General FAQ\",\"link\":\"/faq_general\"},{\"text\":\"Build/Compile QMK\",\"link\":\"/faq_build\"},{\"text\":\"Troubleshooting QMK\",\"link\":\"/faq_misc\"},{\"text\":\"Debugging QMK\",\"link\":\"/faq_debug\"},{\"text\":\"Keymap FAQ\",\"link\":\"/faq_keymap\"},{\"text\":\"Squeezing Space from AVR\",\"link\":\"/squeezing_avr\"},{\"text\":\"Glossary\",\"link\":\"/reference_glossary\"}]},{\"text\":\"Configurator\",\"items\":[{\"text\":\"Overview\",\"link\":\"/newbs_building_firmware_configurator\"},{\"text\":\"Step by Step\",\"link\":\"/configurator_step_by_step\"},{\"text\":\"Troubleshooting\",\"link\":\"/configurator_troubleshooting\"},{\"text\":\"Architecture\",\"link\":\"/configurator_architecture\"},{\"text\":\"QMK API\",\"items\":[{\"text\":\"Overview\",\"link\":\"/api_overview\"},{\"text\":\"API Documentation\",\"link\":\"/api_docs\"},{\"text\":\"Keyboard Support\",\"link\":\"/reference_configurator_support\"},{\"text\":\"Adding Default Keymaps\",\"link\":\"/configurator_default_keymaps\"}]}]},{\"text\":\"CLI\",\"items\":[{\"text\":\"Overview\",\"link\":\"/cli\"},{\"text\":\"Configuration\",\"link\":\"/cli_configuration\"},{\"text\":\"Commands\",\"link\":\"/cli_commands\"},{\"text\":\"Tab Completion\",\"link\":\"/cli_tab_complete\"}]},{\"text\":\"Using QMK\",\"items\":[{\"text\":\"Guides\",\"items\":[{\"text\":\"Customizing Functionality\",\"link\":\"/custom_quantum_functions\"},{\"text\":\"Driver Installation with Zadig\",\"link\":\"/driver_installation_zadig\"},{\"text\":\"Keymap Overview\",\"link\":\"/keymap\"},{\"text\":\"Development Environments\",\"items\":[{\"text\":\"Docker Guide\",\"link\":\"/getting_started_docker\"}]},{\"text\":\"Flashing\",\"link\":\"/flashing\"},{\"text\":\"IDEs\",\"items\":[{\"text\":\"Using Eclipse with QMK\",\"link\":\"/other_eclipse\"},{\"text\":\"Using VSCode with QMK\",\"link\":\"/other_vscode\"}]},{\"text\":\"Git Best Practices\",\"items\":[{\"text\":\"Introduction\",\"link\":\"/newbs_git_best_practices\"},{\"text\":\"Your Fork\",\"link\":\"/newbs_git_using_your_master_branch\"},{\"text\":\"Merge Conflicts\",\"link\":\"/newbs_git_resolving_merge_conflicts\"},{\"text\":\"Fixing Your Branch\",\"link\":\"/newbs_git_resynchronize_a_branch\"}]}]},{\"text\":\"Simple Keycodes\",\"items\":[{\"text\":\"Full List\",\"link\":\"/keycodes\"},{\"text\":\"Basic Keycodes\",\"link\":\"/keycodes_basic\"},{\"text\":\"Language-Specific Keycodes\",\"link\":\"/reference_keymap_extras\"},{\"text\":\"Modifier Keys\",\"link\":\"/feature_advanced_keycodes\"},{\"text\":\"Quantum Keycodes\",\"link\":\"/quantum_keycodes\"},{\"text\":\"Magic Keycodes\",\"link\":\"/keycodes_magic\"}]},{\"text\":\"Advanced Keycodes\",\"items\":[{\"text\":\"Command\",\"link\":\"/features/command\"},{\"text\":\"Dynamic Macros\",\"link\":\"/features/dynamic_macros\"},{\"text\":\"Grave Escape\",\"link\":\"/features/grave_esc\"},{\"text\":\"Leader Key\",\"link\":\"/features/leader_key\"},{\"text\":\"Mod-Tap\",\"link\":\"/mod_tap\"},{\"text\":\"Macros\",\"link\":\"/feature_macros\"},{\"text\":\"Mouse Keys\",\"link\":\"/features/mouse_keys\"},{\"text\":\"Programmable Button\",\"link\":\"/features/programmable_button\"},{\"text\":\"Repeat Key\",\"link\":\"/features/repeat_key\"},{\"text\":\"Space Cadet Shift\",\"link\":\"/features/space_cadet\"},{\"text\":\"US ANSI Shifted Keys\",\"link\":\"/keycodes_us_ansi_shifted\"}]},{\"text\":\"Software Features\",\"items\":[{\"text\":\"Auto Shift\",\"link\":\"/features/auto_shift\"},{\"text\":\"Autocorrect\",\"link\":\"/features/autocorrect\"},{\"text\":\"Caps Word\",\"link\":\"/features/caps_word\"},{\"text\":\"Combos\",\"link\":\"/features/combo\"},{\"text\":\"Debounce API\",\"link\":\"/feature_debounce_type\"},{\"text\":\"Digitizer\",\"link\":\"/features/digitizer\"},{\"text\":\"EEPROM\",\"link\":\"/feature_eeprom\"},{\"text\":\"Key Lock\",\"link\":\"/features/key_lock\"},{\"text\":\"Key Overrides\",\"link\":\"/features/key_overrides\"},{\"text\":\"Layers\",\"link\":\"/feature_layers\"},{\"text\":\"One Shot Keys\",\"link\":\"/one_shot_keys\"},{\"text\":\"OS Detection\",\"link\":\"/features/os_detection\"},{\"text\":\"Raw HID\",\"link\":\"/features/rawhid\"},{\"text\":\"Secure\",\"link\":\"/features/secure\"},{\"text\":\"Send String\",\"link\":\"/features/send_string\"},{\"text\":\"Sequencer\",\"link\":\"/features/sequencer\"},{\"text\":\"Swap Hands\",\"link\":\"/features/swap_hands\"},{\"text\":\"Tap Dance\",\"link\":\"/features/tap_dance\"},{\"text\":\"Tap-Hold Configuration\",\"link\":\"/tap_hold\"},{\"text\":\"Tri Layer\",\"link\":\"/features/tri_layer\"},{\"text\":\"Unicode\",\"link\":\"/features/unicode\"},{\"text\":\"Userspace\",\"link\":\"/feature_userspace\"},{\"text\":\"WPM Calculation\",\"link\":\"/features/wpm\"}]},{\"text\":\"Hardware Features\",\"items\":[{\"text\":\"Displays\",\"items\":[{\"text\":\"Quantum Painter\",\"link\":\"quantum_painter\",\"items\":[{\"text\":\"Quantum Painter LVGL Integration\",\"link\":\"/quantum_painter_lvgl\"}]},{\"text\":\"HD44780 LCD Driver\",\"link\":\"/features/hd44780\"},{\"text\":\"ST7565 LCD Driver\",\"link\":\"/features/st7565\"},{\"text\":\"OLED Driver\",\"link\":\"/features/oled_driver\"}]},{\"text\":\"Lighting\",\"items\":[{\"text\":\"Backlight\",\"link\":\"/features/backlight\"},{\"text\":\"LED Matrix\",\"link\":\"/features/led_matrix\"},{\"text\":\"RGB Lighting\",\"link\":\"/features/rgblight\"},{\"text\":\"RGB Matrix\",\"link\":\"/features/rgb_matrix\"}]},{\"text\":\"Audio\",\"link\":\"/features/audio\"},{\"text\":\"Bluetooth\",\"link\":\"/features/bluetooth\"},{\"text\":\"Bootmagic\",\"link\":\"/features/bootmagic\"},{\"text\":\"Converters\",\"link\":\"/feature_converters\"},{\"text\":\"Custom Matrix\",\"link\":\"/custom_matrix\"},{\"text\":\"DIP Switch\",\"link\":\"/features/dip_switch\"},{\"text\":\"Encoders\",\"link\":\"/features/encoders\"},{\"text\":\"Haptic Feedback\",\"link\":\"/features/haptic_feedback\"},{\"text\":\"Joystick\",\"link\":\"/features/joystick\"},{\"text\":\"LED Indicators\",\"link\":\"/features/led_indicators\"},{\"text\":\"MIDI\",\"link\":\"/features/midi\"},{\"text\":\"Pointing Device\",\"link\":\"/features/pointing_device\"},{\"text\":\"PS/2 Mouse\",\"link\":\"/features/ps2_mouse\"},{\"text\":\"Split Keyboard\",\"link\":\"/features/split_keyboard\"},{\"text\":\"Stenography\",\"link\":\"/features/stenography\"}]},{\"text\":\"Keyboard Building\",\"items\":[{\"text\":\"Easy Maker for One Offs\",\"link\":\"/easy_maker\"},{\"text\":\"Porting Keyboards\",\"link\":\"/porting_your_keyboard_to_qmk\"},{\"text\":\"Hand Wiring Guide\",\"link\":\"/hand_wire\"},{\"text\":\"ISP Flashing Guide\",\"link\":\"/isp_flashing_guide\"}]}]},{\"text\":\"Developing QMK\",\"items\":[{\"text\":\"PR Checklist\",\"link\":\"/pr_checklist\"},{\"text\":\"Breaking Changes\",\"items\":[{\"text\":\"Overview\",\"link\":\"/breaking_changes\"},{\"text\":\"My Pull Request Was Flagged\",\"link\":\"/breaking_changes_instructions\"},{\"text\":\"Most Recent ChangeLog\",\"link\":\"/ChangeLog/20240825\"},{\"text\":\"Past Breaking Changes\",\"link\":\"/breaking_changes_history\"},{\"text\":\"Deprecation Policy\",\"link\":\"/support_deprecation_policy\"}]},{\"text\":\"C Development\",\"items\":[{\"text\":\"ARM Debugging Guide\",\"link\":\"/arm_debugging\"},{\"text\":\"Coding Conventions\",\"link\":\"/coding_conventions_c\"},{\"text\":\"Compatible Microcontrollers\",\"link\":\"/compatible_microcontrollers\"},{\"text\":\"Drivers\",\"link\":\"hardware_drivers\",\"items\":[{\"text\":\"ADC Driver\",\"link\":\"/drivers/adc\"},{\"text\":\"APA102 Driver\",\"link\":\"/drivers/apa102\"},{\"text\":\"Audio Driver\",\"link\":\"/drivers/audio\"},{\"text\":\"EEPROM Driver\",\"link\":\"/drivers/eeprom\"},{\"text\":\"Flash Driver\",\"link\":\"/drivers/flash\"},{\"text\":\"I2C Driver\",\"link\":\"/drivers/i2c\"},{\"text\":\"'serial' Driver\",\"link\":\"/drivers/serial\"},{\"text\":\"SPI Driver\",\"link\":\"/drivers/spi\"},{\"text\":\"UART Driver\",\"link\":\"/drivers/uart\"},{\"text\":\"WS2812 Driver\",\"link\":\"/drivers/ws2812\"}]},{\"text\":\"GPIO Controls\",\"link\":\"/drivers/gpio\"},{\"text\":\"Keyboard Guidelines\",\"link\":\"/hardware_keyboard_guidelines\"}]},{\"text\":\"Python Development\",\"items\":[{\"text\":\"Coding Conventions\",\"link\":\"/coding_conventions_python\"},{\"text\":\"QMK CLI Development\",\"link\":\"/cli_development\"}]},{\"text\":\"Configurator Development\",\"items\":[{\"text\":\"QMK API\",\"items\":[{\"text\":\"Development Environment\",\"link\":\"/api_development_environment\"},{\"text\":\"Architecture Overview\",\"link\":\"/api_development_overview\"}]}]},{\"text\":\"Hardware Platform Development\",\"items\":[{\"text\":\"Arm/ChibiOS\",\"items\":[{\"text\":\"Selecting an MCU\",\"link\":\"/platformdev_selecting_arm_mcu\"},{\"text\":\"Early initialization\",\"link\":\"/platformdev_chibios_earlyinit\"},{\"text\":\"Raspberry Pi RP2040\",\"link\":\"/platformdev_rp2040\"},{\"text\":\"Proton C\",\"link\":\"/platformdev_proton_c\"},{\"text\":\"WeAct Blackpill F4x1\",\"link\":\"/platformdev_blackpill_f4x1\"}]}]},{\"text\":\"QMK Reference\",\"items\":[{\"text\":\"Contributing to QMK\",\"link\":\"/contributing\"},{\"text\":\"Config Options\",\"link\":\"/config_options\"},{\"text\":\"Data Driven Configuration\",\"link\":\"/data_driven_config\"},{\"text\":\"Make Documentation\",\"link\":\"/getting_started_make_guide\"},{\"text\":\"Documentation Best Practices\",\"link\":\"/documentation_best_practices\"},{\"text\":\"Documentation Templates\",\"link\":\"/documentation_templates\"},{\"text\":\"Community Layouts\",\"link\":\"/feature_layouts\"},{\"text\":\"Unit Testing\",\"link\":\"/unit_testing\"},{\"text\":\"Useful Functions\",\"link\":\"/ref_functions\"},{\"text\":\"info.json Format\",\"link\":\"/reference_info_json\"}]},{\"text\":\"For a Deeper Understanding\",\"items\":[{\"text\":\"How Keyboards Work\",\"link\":\"/how_keyboards_work\"},{\"text\":\"How a Matrix Works\",\"link\":\"/how_a_matrix_works\"},{\"text\":\"Understanding QMK\",\"link\":\"/understanding_qmk\"}]}]}],\"socialLinks\":[{\"icon\":{\"svg\":\"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 50 50\\\" width=\\\"50px\\\" height=\\\"50px\\\"><path d=\\\"M 29 3 C 28.0625 3 27.164063 3.382813 26.5 4 C 25.835938 4.617188 25.363281 5.433594 25 6.40625 C 24.355469 8.140625 24.085938 10.394531 24.03125 13.03125 C 19.234375 13.179688 14.820313 14.421875 11.28125 16.46875 C 10.214844 15.46875 8.855469 14.96875 7.5 14.96875 C 6.089844 14.96875 4.675781 15.511719 3.59375 16.59375 C 1.425781 18.761719 1.425781 22.238281 3.59375 24.40625 L 3.84375 24.65625 C 3.3125 26.035156 3 27.488281 3 29 C 3 33.527344 5.566406 37.585938 9.5625 40.4375 C 13.558594 43.289063 19.007813 45 25 45 C 30.992188 45 36.441406 43.289063 40.4375 40.4375 C 44.433594 37.585938 47 33.527344 47 29 C 47 27.488281 46.6875 26.035156 46.15625 24.65625 L 46.40625 24.40625 C 48.574219 22.238281 48.574219 18.761719 46.40625 16.59375 C 45.324219 15.511719 43.910156 14.96875 42.5 14.96875 C 41.144531 14.96875 39.785156 15.46875 38.71875 16.46875 C 35.195313 14.433594 30.800781 13.191406 26.03125 13.03125 C 26.09375 10.546875 26.363281 8.46875 26.875 7.09375 C 27.164063 6.316406 27.527344 5.757813 27.875 5.4375 C 28.222656 5.117188 28.539063 5 29 5 C 29.460938 5 29.683594 5.125 30.03125 5.40625 C 30.378906 5.6875 30.785156 6.148438 31.3125 6.6875 C 32.253906 7.652344 33.695313 8.714844 36.09375 8.9375 C 36.539063 11.238281 38.574219 13 41 13 C 43.75 13 46 10.75 46 8 C 46 5.25 43.75 3 41 3 C 38.605469 3 36.574219 4.710938 36.09375 6.96875 C 34.3125 6.796875 33.527344 6.109375 32.75 5.3125 C 32.300781 4.851563 31.886719 4.3125 31.3125 3.84375 C 30.738281 3.375 29.9375 3 29 3 Z M 41 5 C 42.667969 5 44 6.332031 44 8 C 44 9.667969 42.667969 11 41 11 C 39.332031 11 38 9.667969 38 8 C 38 6.332031 39.332031 5 41 5 Z M 25 15 C 30.609375 15 35.675781 16.613281 39.28125 19.1875 C 42.886719 21.761719 45 25.226563 45 29 C 45 32.773438 42.886719 36.238281 39.28125 38.8125 C 35.675781 41.386719 30.609375 43 25 43 C 19.390625 43 14.324219 41.386719 10.71875 38.8125 C 7.113281 36.238281 5 32.773438 5 29 C 5 25.226563 7.113281 21.761719 10.71875 19.1875 C 14.324219 16.613281 19.390625 15 25 15 Z M 7.5 16.9375 C 8.203125 16.9375 8.914063 17.148438 9.53125 17.59375 C 7.527344 19.03125 5.886719 20.769531 4.75 22.71875 C 3.582031 21.296875 3.660156 19.339844 5 18 C 5.714844 17.285156 6.609375 16.9375 7.5 16.9375 Z M 42.5 16.9375 C 43.390625 16.9375 44.285156 17.285156 45 18 C 46.339844 19.339844 46.417969 21.296875 45.25 22.71875 C 44.113281 20.769531 42.472656 19.03125 40.46875 17.59375 C 41.085938 17.148438 41.796875 16.9375 42.5 16.9375 Z M 17 22 C 14.800781 22 13 23.800781 13 26 C 13 28.199219 14.800781 30 17 30 C 19.199219 30 21 28.199219 21 26 C 21 23.800781 19.199219 22 17 22 Z M 33 22 C 30.800781 22 29 23.800781 29 26 C 29 28.199219 30.800781 30 33 30 C 35.199219 30 37 28.199219 37 26 C 37 23.800781 35.199219 22 33 22 Z M 17 24 C 18.117188 24 19 24.882813 19 26 C 19 27.117188 18.117188 28 17 28 C 15.882813 28 15 27.117188 15 26 C 15 24.882813 15.882813 24 17 24 Z M 33 24 C 34.117188 24 35 24.882813 35 26 C 35 27.117188 34.117188 28 33 28 C 31.882813 28 31 27.117188 31 26 C 31 24.882813 31.882813 24 33 24 Z M 34.15625 33.84375 C 34.101563 33.851563 34.050781 33.859375 34 33.875 C 33.683594 33.9375 33.417969 34.144531 33.28125 34.4375 C 33.28125 34.4375 32.757813 35.164063 31.4375 36 C 30.117188 36.835938 28.058594 37.6875 25 37.6875 C 21.941406 37.6875 19.882813 36.835938 18.5625 36 C 17.242188 35.164063 16.71875 34.4375 16.71875 34.4375 C 16.492188 34.082031 16.066406 33.90625 15.65625 34 C 15.332031 34.082031 15.070313 34.316406 14.957031 34.632813 C 14.84375 34.945313 14.894531 35.292969 15.09375 35.5625 C 15.09375 35.5625 15.863281 36.671875 17.46875 37.6875 C 19.074219 38.703125 21.558594 39.6875 25 39.6875 C 28.441406 39.6875 30.925781 38.703125 32.53125 37.6875 C 34.136719 36.671875 34.90625 35.5625 34.90625 35.5625 C 35.207031 35.273438 35.296875 34.824219 35.128906 34.441406 C 34.960938 34.058594 34.574219 33.820313 34.15625 33.84375 Z\\\"/></svg>\"},\"link\":\"https://reddit.com/r/olkb\"},{\"icon\":\"discord\",\"link\":\"https://discord.gg/qmk\"},{\"icon\":\"github\",\"link\":\"https://github.com/qmk/qmk_firmware\"}]},\"locales\":{},\"scrollOffset\":134,\"cleanUrls\":true}");</script>
</body>
</html>