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

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!

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 Initial I75 Port

layout: qmk-title title: “Keyboard: Initial i75 port” date: 2018-12-05 13:57:00 -0800 category: keyboards commit: 368de26 pr: 4553 —

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: