QMK API is a RESTful API that allows you to submit keymap.json
files for compilation. Upon a successful compilation the user will be able to download a file that can be flashed directly to their keyboard using a tool like QMK Toolbox.
When I started to use QMK the only option for building a custom firmware was to write C. This made it very hard to create your own custom keyboard or keymap, unless you were already familiar with programming. I wanted to make this process easier for both end users and keyboard maintainers.
I set out a few basic requirements for V1:
My prototype implementation consisted of 4 services:
Keyboard metadata (used to render the UI) was gathered by scraping rules.mk
(Makefile) and config.h
files in the qmk_firmware
repository. A webhook that ran on each commit to master
would trigger an update job that populated Redis with all the keyboard metadata.
A typical use of the API looks like this:
keymap.json
Once I had developed this API enough to be used Jack Humbert built a Single Page Application that utilitized it. Soon we launched QMK Configurator and began to promote its use. We were soon joined by Yan-Fa Li who took over development of QMK Configurator and migrated it to Vue piece by piece. Configurator also drove people to improve the metadata for keyboards in QMK, and in particular James Young stepped up to ensure that every keyboard had a full and complete set of metadata files.
As the primary developer for the QMK API I worked with everyone here, and more, to grow and evolve QMK API and increase access to advanced keyboard features.
Like any good project QMK API has both grown in capability and streamlined itself over the years. Here is a short list of the ways I have evolved it:
info.json
support for metadata not available in scraped filesqmk_compiler
repo to qmk_firmware
repo to allow for rapid evolution