QMK Logo QMK Firmware

The goal of the QMK software project is to develop a completely customizable, powerful, and enjoyable firmware experience for any project - keyboard or otherwise - and to provide helpful, encouraging, and kind support and feedback for people with any software development experience.

View on GitHub

Download Zip Download Tar

Current Version Build Status Discord Docs Status GitHub contributors GitHub forks


This project is maintained by QMK collaborators and contributors like you!

Hosted on GitHub Pages — Theme by orderedlist

All recent changes in QMK

[Keyboard] Alf X1.1 QMK Support

We’ve added support for the Alf X1.1 Keyboard!

[Keyboard] Winkeyless Directory

We’ve added a folder for Winkeyless keyboards! Now, they can be grouped in the QMK Configurator.

Added APA102 support

We’ve added support for APA102 RGB LED’s!

Fix ARM Audio issues and its EEPROM persistence

Added EEPROM support for Audio on ARM!

Debounce refactor / API

We’ve refactored the Debounce code that allows for different debouncing methods.

Add kb and user level keyboard initialization functions

We’ve added new hooks for keyboard initialization!

[Keyboard] New Keyboard: Doro67 Regular PCB

We’ve added support for the Doro67 Keyboard!

Add Satisfaction75 to QMK, Enable EEPROM on stm32f072

We’ve added EEPROM support for the STM32F072 MCU!

Add Satisfaction75 to QMK, Enable EEPROM on stm32f072

We’ve added support for the Satisfaction75 keyboard!

[Keyboard] Move Keebio boards to own folder

We’ve added a folder for Keebio keyboards! Now, they can be grouped in the QMK Configurator.

[Keyboard] Added aeboards/aegis

We’ve added support for the aeboards AEGIS keyboard!

Added WT75-A, refactor wilba.tech PCBs

We’ve added support for the WT75-A keyboard from [Wilba.tech](https://wilba.tech/!

LED Matrix Support

We’ve added support for LED Matrices. These are non-RGB (single color), per key addressable backlighting.

Keyboard Initial Support For Tkc M0lly

layout: qmk-title title: “[Keyboard] Initial support for TKC M0LLY” date: 2019-02-10 00:00:00 -0500 category: keyboards commit: 6ba3968 pr: 5087

Regroup all Exclusive keyboard in one directory

We’ve added a folder for Exclusive keyboards! Now, they can be grouped in the QMK Configurator.

[Keyboard] Initial commit of Laptreus Keyboard

We’ve added support for the Laptreus Keyboard!

[Keyboard] Add support for jj4x4 numpad/macropad by Kprepublic

We’ve added support for KPRepublic’s JJ4x4 macropad!

Add Scarlet Bandana Version IV mark.2

Add support for the Scarlet Bandana from WoodKeys.click!

Add One Shot Key callbacks

Add support for hooks for the One Shot Key feature!

Add distclean target instead

We’ve added the distclean command, so you can clear the build folder and compiled firmware! Just run make distclean to do so.

[Keyboard] New Macropad: 1upkeyboards super16

We’ve added support for the 1UP Keyboards Super 16 Macropad!

[Keyboard] Create KBDFans directory

We’ve added a folder for KBDFans keyboards! Now, they can be grouped in the QMK Configurator.

New Keyboard: Sentraq Number Pad RGB DIY Kit

We’ve added support for the Sentraq Nunber Pad RGB Kit!

[Keyboard] Add 1upkeyboards 1up80hte (Tsangan style PCB)

We’ve added support for the 1UP Keyboards’s 1up80hte keyboard!

[Keyboard] Gray Studio Space 65 Support

We’ve added support for the Gray Studio’s Space 65 keyboard!

[Keyboard] UniGo66 keyboard added

We’ve added support for the UniGo66 keyboard!

[Keyboard] Add Southpole keyboard

We’ve added support for the Southpole Keyboard!

Add Lunar Keyboard

We’ve added support for the Lunar keyboard from Switchplate Peripherals!

Fix Command feature: use get_mods() instead of keyboard_report->mods

This replaces keyboard_report->mods with get_mods() instead, for the IS_COMMAND call, since it was broken due to issues with the Endpoint Consolidation commit.

Update Preonic’s MCU configuration to use the built-ins

This updates the Preonic keyboard configuration to use the built ARM MCU code.

Adds a default value for IS_COMMAND for COMMAND feature

This adds a default value for IS_COMMAND to the core code. This is so that each keyboard doesn’t have to define it locally. It only has to define it, if it is not the default.

[Keyboard] Add bthlabs/geekpad

We’ve added support for the BTHLabs GeekPad macropad!

[Keyboard] Add support for THE50

We’ve added support for the THE50 keyboard!

[Keyboard] Adding support for Gergo

We’ve added support for the Gergo keyboard from [g Heavy Industries](http://gboards.ca}!


This fixxes the RGBLIGHT_SLEEP option, so that the lights properly maintain the previous setting in all cases.

Fix OSM(mod) problem

This fixes an issue with One Shot Mods not properly respecting the Magic ALT-GUI Swap setting.

Add MOD_MASK_* macros to core code

This adds the Mod MASK ans pre-existing defines in the core code, so you can easily reference them without having to manually define them.

[Keyboard] Add KBD67 Hotswap Support

We’ve added support for the

[Keyboard] Add BDN9

We’ve added support for the Keebio BDN9 macropad!

[Keyboard] Added TGR Alice keyboard support

We’ve added support for the TGR Alice keyboard!

[Keyboard] Tmo50 initial commit

We’ve added support for the TMO50 keyboad!

[Keyboard] Initial support for TKC Candybar

We’ve added support for the TKC Candybar keyboard!

Simplify split_common significantly

Split_common no longer has a separate main loop for the slave, it reuses the keyboard_task main loop like ergodox infinity. This eliminates a lot of the code and makes it a bit easier to reason about. It also means that the slave will behave slightly differently depending on what flags are enabled - many of the options lie outside the is_keyboard_master gate in keyboard_task, and I expect that will have to change as they’re tested.

Fix Caps Lock LEDs once and for all

The status LEDs don’t light up/light up incorrectly on Linux in certain circumstances. This is because, if NKRO is enabled it will send two LED states, one for the 6KRO interface, and one for the NKRO interface. QMK interprets the NKRO report ID as the LED state and turn on the num lock and scroll lock LEDs.

Adds Proton C Conversion

If a board currently supported in QMK uses a Pro Micro (or compatible board) and you want to use the Proton C, you can generate the firmware by appending CONVERT_TO_PROTON_C=yes (or CTPC=yes) to your make argument, like this:

Update to arm_atsam wait and timer routines

This update is to get the arm_atsam branch timer and wait functions aligned with common QMK functions. It also includes a much simpler, rewritten method to microsecond delays to tighten timings. This update affects Massdrop’s CTRL and ALT keyboards, and they have both been thoroughly tested.

Improve consistency in UNICODEMAP code and docs, update docs/understanding_qmk

Rename some constants and functions pertaining to UNICODEMAP so they’re consistent with the rest of the system. Also update the documentation accordingly. See below for details.

Remove redundant, language-specific aliases for KC_ALGR

Removes redundant, language-specific aliases for KC_ALGR, since that keycode is standard now.

Convert split_common to use generic GPIO api

This is a small but important step to converting the Split Keyboard code to be ARM compatible, by using hardware agnostic functions (instead of the AVR specific addresses).

Change rgblight_get_mode & rgb_matrix_get_mode’s return type to uint8_t

rgblight_get_mode()’s return type right now is uint32_t, but upon inspection of its implementation, it’s actually returning rgblight_config_t.mode, which is an uint8_t. The return type should match rgblight_config_t.mode’s.

Keep pressed keys on layer state change

This allows pressed keys to stay pressed when a layer change occurs.

Replace serial.c of quantum/split_common/

This PR marks the finishing of updating of the Split Keyboard (aka “Split Common”) serial code, to bring it in line with all of the awesome improvements that mtei has made for the Helix split keyboard.

Overhaul Unicode Common functionality

This is a significant overhaul to the core (“common”) Unicode code.

Per Key Leader Timing Option

This adds a “per key” timing option to the Leader Key function.

Refactor quantum/split_common/i2c.c, quantum/split_common/serial.c

This PR allows for both i2c and serial support for Split Keyboards (aka Split Common code) to be enabled at the same time, without causing any overlap/issues.

Make quantum/split_common/serial.[ch] configurable

This changees the Split Keyboard (aka Split Common) code to allow a configurable pin for Serial communication, that can be defined per board.

Add support for PR and Issue templates to QMK_firmware GitHub

We’ve added templates for both PRs and Issues for the QMK Firmware repo, to help streamline things.

Keyboard: Palm serial keyboard USB converter

We’ve added support for the Palm serial keyboard converter!

Keyboard: Initial i75 port

We’ve added support for the 40percent.club’s i75 keyboard!

Only try to read the report ID from SetReport when the keyboard is part of the shared EP

If the keyboard has media keys or NKRO on, SHARED_EP_ENABLE is automatically enabled to merge them into a single endpoint (see #3951). The different interfaces are then identified by a unique report ID. However, the keyboard interface is by default not part of that shared endpoint unless KEYBOARD_SHARED_EP = yes in your rules.mk, and so it does not need a report ID.

Keyboard: Initial nori port

We’ve added support for 40percentclub’s Nori keyboard!

Keyboard: Add new keyboard Sol from RGBKB

We’ve added support for the Sol keyboard from RGBKB!

adding Hadron v3 keyboard, QWIIC devices support, haptic feedback support

This commit adds support for DDRV2605L haptic motor, support for the QWIIC powered “Joystiic” and Micro OLED, as well as support for the Hadron revision 2, that uses all of these features.

Increasing square wave buffer to max volume

This changes the ARM Audio code so that the volume is much louder (more closely matching the AVR Audio).

Make ARM Audio max volume configurable

This allows you to set the max volume used by the ARM Audio feature. This is useful if you (shock!) find the audio to be way too loud.

Fix up RGB Matrix code

This commit fixes up some of the code, and expands the functionality of the RGB Matrix code. Including adding support for running RGB Light and RGB Matrix at the same time.

Add support for S7 Elephant

We’ve added support for the S7 Elephant keyboard!

New Keyboard: Cyclops

We’ve added support for the Cyclops keyboard, a 66% Alps keyboard!

Keyboard: add newgame40

We’ve added support for the NEWGAME40 keyboard!

Added Rick Roll to song lists

We’ve added the Rich Ashley Never Gonna Give You Up song to our song list!

Update MSYS’ AVR-GCC to use the 5.4.0 toolchain

We’ve updated the MSYS install script to grab the newer toolchain version AVR-GCC for Windows (version 5.4.0).

Puck Macropad

We’ve added support for OkKeebs.com’s Puck Macropad!

fixed misplaced paranthesis in arm usb mouse send function

This fixes the send mouse function in ChibiOS and should no longer drop mouse events.

Fix diffutils Arch Linux package name

Uses the correct name for diffutils for Archlinux. Now everything should install and compile properly.

Fix UCIS code

Reverts move declaration of “i” variable in the proces_ucis function that was moved previously.

Use a single endpoint for HID reports

Unify multiple HID interfaces into a single Endpoint.

Keyboard: Initial 25 port

We’ve added support for 40percent.club’s 25 keyboard!

KBDFans KBD67 Support

We’ve added support for KBDFans’ KBD67 keyboard!

IDOBO Keyboard Support (75Keys Aluminum Keyboard)

We’ve added support for Massdrop’s 75Key Keyboard keyboard!

Add EEPROM_RESET keycode to core code

Adds a keycode to reset the EEPROM on the keyboard (to reset persistant settings back to their default settings).

Keyboard: adding Espectro

We’ve added support for MECHKEYS’s Espectro keyboard!

Keyboard: add ep40 qmk support

We’ve added support for the ep40 keyboard!

Keyboard: add support for kbd19x

We’ve added support for KBDFans’ KBD19x keyboard!

Add Bootmagic Lite to QMK

Adds a lightweight implementation of Bootmagic that only resets the keyboard, so that users are not prone to accidentally activating unwanted features.

Keyboard: Add HS60 V2

We’ve added support for the HS60 v2 keyboard, using the STM32F303CC ARM controller!

Add Function level EECONFIG code for EEPROM

This adds support for keyboard and keymaps to be able to use EEPROM, as well as resetting those settings.

RGB Matrix refactoring to open up for new drivers

Refactors the RGB matrix code to generalize it more, to make it easier to add new drivers.


This changes the default behavior of QMK to use the PREVENT_STUCK_MODIFIERS behavior by default. This way, modifiers are remembered correctly.

Keyboard: add Keyboardio Model 01

We’ve added support for the Keyboardio Model01 keyboard!

STM32 EEPROM Emulation

We’ve added support for STM32 EEPROM Emulation! Mostly supports STM32F3xx MCUs. More support can be added later.

ISSI31FL3733 driver

We’ve added support for Massdrop’s CTRL and ALT keyboards. Additionally support for ATSAM ARM has been added, as well.

ISSI31FL3733 driver

Adds the ISSI31FL3733 comtoller support for RGB Matrix. Only supports 1 driver, at this time.

Rgb matrix arm

We’ve added ARM support for the RGB Matrix.

Split Common

This adds the split keyboard code to the core code, and adds it as a feature. This way, all of the code can be maintained in one place, rather than individually, per board.

Add and fix _noeeprom functions to many of the RGB Underglow functions

And and fix _noeeprom functions to many of the RGB Underglow functions

Adds IS31FL3731 RGB Matrix Implementation

Adds initial support for per key RGB lighting (RGB Matrix) powered by the IS31FL3731 controller. See the RGB Matrix Feature Page for details about this feature.

Add Faux Clicking as subset of Audio feature

Add Faux Clicky to the Audio feature

Remap msys2 usb, fix USB port detection

Adds better support for Pro Micro (Caterina Bootloader) flashing.

added ep/96 as a supported keyboard

We’ve added support for EP 96 keyboard!

Keyboard: 5291 firmware to replace the existing soarers controller firmware

We’ve added support for the IBM 5291 (aka “Bigfoot”) converter!

add support for encoders to core

Adds support for rotary encoders to core code.

Fix EE HANDS on splits losing handedness if RGB is enabled

Fixes EE HANDS on splits losing handedness if RGB is enabled

Add the ability to disable Music Mode completely

We’ve added the option to disable Music Mode when Audio is enabled. This saves a great deal of space for the firmware.

Update ChibiOS to 17.6.3

Updates ChibiOS to 17.6.3

Fix up the ARM audio support

Updates bootloader settings, adds file size check

We’ve improved the Bootloader handling. Not only does it handling jumping to bootloader better, but makes configuration of the settings handled by the compiler, rather than having to set everything.

Allow multiple process_record() calls per scan

This is particularly relevant for, e.g., the ergodox EZ and other keyboards with slow scan rates. Without changing the API or behavior of individual process_record() calls, we allow a configuration flag to make multiple calls in a single scan.

QMK DFU bootloader generation

THe QMK DFU bootloader is a fork of the LUFA DFU bootloader that allows for some additional functionality, such as LED and Audio indication.


Holding and releasing a dual function key without pressing another key will result in nothing happening. With retro tapping enabled, releasing the key without pressing another will send the original keycode even if it is outside the tapping term.

Creates a userspace for keymaps

Added Userspace so you can share common code between different keyboards.

Add Iris Keyboard

We’ve added support for the Iris from Keebio!

Make arguments redo, subprojects eliminated

Make arguments

Support for Viterbi added

We’ve added support for the Viterbi!

Support for DZ60 added

With the merging of #1734, we’ve added support for the DZ60 PCB! This is used in a couple different keyboards - if you know of one that isn’t in the readme, please consider adding it!

Support for Levinson added

With #1723 merged, support for Levinson has been added - a split ortho board similar to the Let’s Split.

Making from root and no more Makefiles

After merging in the implementation of #1659, the only way to compile QMK is in the root directory, with the full command:

Layouts: Sharing keymaps between keyboards

With the merging of #1609, we’ve added the layouts/ folder - it contains collections of keymaps sorted by physical key layouts that different keyboards can use, and is organised like this: