# qmk/qmk_firmware

**Attribution required: if you use, quote, or summarise this content, you must credit and link back to [awesome-repositories.com](https://awesome-repositories.com/repository/qmk-qmk-firmware).**

20,478 stars · 44,001 forks · C · GPL-2.0

## Links

- GitHub: https://github.com/qmk/qmk_firmware
- Homepage: https://qmk.fm
- awesome-repositories: https://awesome-repositories.com/repository/qmk-qmk-firmware.md

## Topics

`atmel-avr` `c` `c-plus-plus` `clueboard` `ergodox-ez` `keyboard-firmware` `keyboard-support` `olkb` `qmk`

## Description

This project is a keyboard firmware framework and programmable keyboard ecosystem designed for Atmel AVR and ARM microcontrollers. It provides the embedded software necessary to implement the USB Human Interface Device standard, allowing hardware to communicate keystrokes and mouse movements to a host computer.

The framework distinguishes itself by offering a comprehensive toolchain for custom hardware development, including a command line interface for project scaffolding, firmware flashing, and configuration linting. It supports a variety of flexible configuration methods, allowing users to define layouts and pin mappings through structured JSON files or visual design interfaces.

The system covers a wide range of capabilities, including matrix scanning for switch detection, layer-based keymap resolution, and complex input handling such as key chords and tap-hold timing. It also includes drivers for hardware integration, such as battery level sampling, split keyboard synchronization, and the control of addressable RGB LEDs and backlighting.

The project includes a development toolchain installer to set up the compilers and utilities required to build and deploy the firmware.

## Tags

### Hardware & IoT

- [Keyboard Firmware](https://awesome-repositories.com/f/hardware-iot/microcontroller-firmware-frameworks/keyboard-firmware.md) — Provides the core firmware framework for managing keyboard scanning, debouncing, and keymap processing. ([source](https://docs.qmk.fm/api_development_overview))
- [AVR and ARM Embedded Software](https://awesome-repositories.com/f/hardware-iot/avr-and-arm-embedded-software.md) — Implements low-level software for embedded microcontrollers to manage GPIO pins and hardware peripherals.
- [Firmware Flashing](https://awesome-repositories.com/f/hardware-iot/connectivity-iot/hardware-communication/serial-device-communication/firmware-flashing.md) — Provides utilities to upload compiled binary firmware to microcontrollers via bootloaders or ISP programmers. ([source](https://docs.qmk.fm/cli_commands))
- [USB Device Descriptors](https://awesome-repositories.com/f/hardware-iot/connectivity-iot/internet-of-things/device-management/usb-device-enumerators/usb-interface-configuration/usb-device-descriptors.md) — Defines the device identity and report protocols to ensure the host OS recognizes the hardware as a keyboard.
- [Hardware Abstraction Layers](https://awesome-repositories.com/f/hardware-iot/hardware-abstraction-layers.md) — Provides a consistent software interface to support multiple microcontroller architectures like AVR and ARM.
- [Keyboard Layout Mappings](https://awesome-repositories.com/f/hardware-iot/keyboard-layout-mappings.md) — Implements a system for organizing and mapping physical keys to software functions. ([source](https://docs.qmk.fm/cli))
- [Keyboard Logic Programming](https://awesome-repositories.com/f/hardware-iot/keyboard-logic-programming.md) — Provides the core drivers and behavioral logic used to define keymaps and hardware rules for the keyboard. ([source](https://cdn.jsdelivr.net/gh/qmk/qmk_firmware@master/README.md))
- [Keyboard Matrix Scanning](https://awesome-repositories.com/f/hardware-iot/keyboard-matrix-scanning.md) — Polls rows and columns of a physical switch grid to detect key presses and debouncing events.
- [Matrix Pin Mapping](https://awesome-repositories.com/f/hardware-iot/keyboard-matrix-scanning/matrix-pin-mapping.md) — Maps keyboard matrix rows and columns to pins and defines diode direction for hardware setup. ([source](https://docs.qmk.fm/config_options))
- [Layer-Based Keymap Resolution](https://awesome-repositories.com/f/hardware-iot/layer-based-keymap-resolution.md) — Maps physical key coordinates to specific keycodes by indexing into a stack of functional layers.
- [Microcontroller Abstraction Layers](https://awesome-repositories.com/f/hardware-iot/microcontroller-abstraction-layers.md) — Provides a hardware abstraction layer allowing firmware to run across various AVR and ARM microcontrollers. ([source](https://docs.qmk.fm/compatible_microcontrollers))
- [Standard USB Device Emulations](https://awesome-repositories.com/f/hardware-iot/usb-device-communication/usb-device-stacks/standard-usb-device-emulations.md) — Implements the USB HID standard to present the microcontroller as a keyboard or mouse to the host OS.
- [Inter-Half Connectivity Configuration](https://awesome-repositories.com/f/hardware-iot/connectivity-iot/hardware-communication/serial-device-communication/inter-half-connectivity-configuration.md) — Sets the communication protocol between split keyboard halves using serial or I2C transport. ([source](https://docs.qmk.fm/config_options))
- [Custom Key Behavior Definitions](https://awesome-repositories.com/f/hardware-iot/custom-key-behavior-definitions.md) — Provides a mechanism to intercept key events to extend or replace the default action of any keycode. ([source](https://docs.qmk.fm/custom_quantum_functions))
- [Graphical Keymap Configurators](https://awesome-repositories.com/f/hardware-iot/graphical-keymap-configurators.md) — Provides a visual tool for designing keyboard layouts and exporting them as data representations. ([source](https://docs.qmk.fm/configurator_architecture))
- [Hardware Device Identification](https://awesome-repositories.com/f/hardware-iot/hardware-device-identification.md) — Includes a utility to define vendor and product IDs for hardware identification by the host OS. ([source](https://docs.qmk.fm/config_options))
- [HID Mouse Emulation](https://awesome-repositories.com/f/hardware-iot/hid-mouse-emulation.md) — Implements a system to configure speed and precision for controlling a mouse cursor via keyboard keys. ([source](https://docs.qmk.fm/config_options))
- [Inter-Controller State Synchronization](https://awesome-repositories.com/f/hardware-iot/inter-controller-state-synchronization.md) — Shares layer and modifier status between split keyboard halves using serial or I2C communication.
- [Key Combo Management](https://awesome-repositories.com/f/hardware-iot/key-combo-management.md) — Implements timing and requirements for detecting multiple keys pressed simultaneously. ([source](https://docs.qmk.fm/config_options))
- [Custom Scanning Logic](https://awesome-repositories.com/f/hardware-iot/keyboard-matrix-scanning/custom-scanning-logic.md) — Provides a low-level interface to inject custom logic into the hardware scanning loop for state detection. ([source](https://docs.qmk.fm/custom_quantum_functions))
- [Split Keyboard Synchronization](https://awesome-repositories.com/f/hardware-iot/split-keyboard-synchronization.md) — Coordinates layer state, modifier status, and screen power between separate microcontroller halves. ([source](https://docs.qmk.fm/config_options))
- [Tap-Hold Key Behaviors](https://awesome-repositories.com/f/hardware-iot/tap-hold-key-behaviors.md) — Provides utilities to adjust the duration of keys that perform different actions when tapped versus held. ([source](https://docs.qmk.fm/config_options))

### Part of an Awesome List

- [Keyboard Firmware and Tools](https://awesome-repositories.com/f/awesome-lists/devtools/keyboard-firmware-and-tools.md) — Offers a complete ecosystem of firmware platforms and tools for configuring custom mechanical keyboards.

### Development Tools & Productivity

- [Configuration-to-Binary Pipelines](https://awesome-repositories.com/f/development-tools-productivity/configuration-to-binary-pipelines.md) — Automates the conversion of JSON configuration files into downloadable binary firmware files. ([source](https://docs.qmk.fm/api_docs))
- [Keymap Binary Compilation](https://awesome-repositories.com/f/development-tools-productivity/keymap-binary-compilation.md) — Implements an asynchronous interface to generate custom keymap binaries for supported hardware. ([source](https://docs.qmk.fm/api_overview))
- [Firmware Build Environments](https://awesome-repositories.com/f/development-tools-productivity/open-source-software/firmware-build-environments.md) — Provides a comprehensive toolchain and build system for compiling custom firmware images for embedded hardware. ([source](https://docs.qmk.fm/cli))
- [Firmware Build Variants](https://awesome-repositories.com/f/development-tools-productivity/build-tooling/build-orchestration-logic/build-orchestration-configuration/build-configuration-systems/build-configurations/firmware-build-variants.md) — Implements a system for managing firmware build variants tailored to different hardware configurations. ([source](https://docs.qmk.fm/cli_configuration))
- [Configuration Linters](https://awesome-repositories.com/f/development-tools-productivity/linting-configurations/configuration-linters.md) — Includes a static analyzer to identify errors and anti-patterns in keyboard configuration files. ([source](https://docs.qmk.fm/cli_commands))
- [Project Scaffolding](https://awesome-repositories.com/f/development-tools-productivity/project-scaffolding-config-code-generation/project-scaffolding-configuration/project-scaffolding.md) — Ships a template-based generator to bootstrap new keyboard project directories with standardized structures. ([source](https://docs.qmk.fm/cli_commands))
- [Tooling Configuration Managers](https://awesome-repositories.com/f/development-tools-productivity/tooling-configuration-managers.md) — Implements a system of flags and files to manage preferences across automated development tasks. ([source](https://docs.qmk.fm/cli_development))

### Operating Systems & Systems Programming

- [Hardware Device Initializations](https://awesome-repositories.com/f/operating-systems-systems-programming/hardware-device-initializations.md) — Provides a startup sequence to configure low-level hardware components before the board becomes active. ([source](https://docs.qmk.fm/custom_quantum_functions))
- [Addressable LED Drivers](https://awesome-repositories.com/f/operating-systems-systems-programming/kernel-core-internals/system-programming-primitives/system-programming/hardware-interfaces/led-controllers/addressable-led-drivers.md) — Provides drivers for managing individual addressable LEDs on a single data line for lighting effects.

### Software Engineering & Architecture

- [JSON Configuration Schemas](https://awesome-repositories.com/f/software-engineering-architecture/application-lifecycle-management/configuration-management/configuration-formats-and-schemas/json-configuration-schemas.md) — Allows defining physical layouts and pin mappings using structured JSON configuration files. ([source](https://docs.qmk.fm/data_driven_config))
- [Event Hooks](https://awesome-repositories.com/f/software-engineering-architecture/event-hooks.md) — Allows custom logic to intercept and modify key events via predefined hooks in the main execution loop.

### DevOps & Infrastructure

- [Delayed Task Scheduling](https://awesome-repositories.com/f/devops-infrastructure/automation-orchestration/task-execution-frameworks/task-job-management/task-schedulers/delayed-task-scheduling.md) — Executes specific functions after a timer interval without blocking the primary keyboard scanning loop.

### Programming Languages & Runtimes

- [C Code Generators](https://awesome-repositories.com/f/programming-languages-runtimes/source-code-compilers/source-to-c-transpilers/inline-c-code-embeddings/c-code-generators.md) — Converts structured JSON configuration files into C source code to automate firmware builds.

### Scientific & Mathematical Computing

- [Custom Keyboard Matrix Routines](https://awesome-repositories.com/f/scientific-mathematical-computing/gpu-linear-algebra-libraries/in-kernel-execution/blas-kernel-embeddings/custom-keyboard-matrix-routines.md) — Allows replacing standard scanning or debouncing routines with custom logic for non-standard keyboard hardware. ([source](https://docs.qmk.fm/config_options))

### User Interface & Experience

- [Visual Layout Designers](https://awesome-repositories.com/f/user-interface-experience/component-utilities/keyboard-shortcuts/keyboard-layout-configurations/visual-layout-designers.md) — Provides a web-based interface for creating custom keymaps visually. ([source](https://docs.qmk.fm/configurator_step_by_step))

### Web Development

- [Deferred Action Schedulers](https://awesome-repositories.com/f/web-development/performance-optimizations/computational-parallelization/parallel-gpu-schedulers/deferred-action-schedulers.md) — Executes a specific callback function after a set time interval without manual timer management. ([source](https://docs.qmk.fm/custom_quantum_functions))
