* Chordal Hold: restrict what chords settle as hold * Chordal Hold: docs and further improvements * Fix formatting. * Doc rewording and minor edit. * Support Chordal Hold of multiple tap-hold keys. * Fix formatting. * Simplification and additional test. * Fix formatting. * Tighten tests. * Add test two_mod_taps_same_hand_hold_til_timeout. * Revise handing of pairs of tap-hold keys. * Generate a default chordal_hold_layout. * Document chordal_hold_handedness(). * Add license notice to new and branched files in PR. * Add `tapping.chordal_hold` property for info.json. * Update docs/reference_info_json.md * Revise "hand" jsonschema. * Chordal Hold: Improved layout handedness heuristic. This commit improves the heuristic used in generate-keyboard-c for inferring key handedness from keyboard.json geometry data. Heuristic summary: 1. If the layout is symmetric (e.g. most split keyboards), guess the handedness based on the sign of (x - layout_x_midpoint). 2. Otherwise, if the layout has a key of >=6u width, it is probably the spacebar. Form a dividing line through the spacebar, nearly vertical but with a slight angle to follow typical row stagger. 3. Otherwise, assume handedness based on the widest horizontal separation. I have tested this strategy on a couple dozen keyboards and found it to work reliably. * Use Optional instead of `| None`. * Refactor to avoid lambdas. * Remove trailing comma in chordal_hold_layout. * Minor docs edits. * Revise to allow combining multiple same-hand mods. This commit revises Chordal Hold as described in discussion in https://github.com/qmk/qmk_firmware/pull/24560#discussion_r1894655238 1. In "RCTL_T(KC_A)↓, RSFT_T(KC_C)↓, RCTL_T(KC_A)↑" before the tapping term, RCTL_T(KC_A) is settled as tapped. 2. In "RCTL_T(KC_A)↓, RSFT_T(KC_C)↓, RSFT_T(KC_C)↑", both RCTL_T(KC_A) and RSFT_T(KC_C) are settled as tapped. 3. In "RCTL_T(KC_A)↓, RSFT_T(KC_C)↓, KC_U↓" (all keys on the same side), both RCTL_T(KC_A) and RSFT_T(KC_C) are settled as tapped. 4. In "RCTL_T(KC_A)↓, RSFT_T(KC_C)↓, LSFT_T(KC_T)↓", with the third key on the other side, we allow Permissive Hold or Hold On Other Keypress to decide how/when to settle the keys. 5. In "RCTL_T(KC_A)↓, RSFT_T(KC_C)↓" held until the tapping term, the keys are settled as held. 1–3 provide same-hand roll protection. 4–5 are for combining multiple same-hand modifiers. I've updated the unit tests and have been running it on my keyboard, for a few hours so far, and all seems good. I really like this scheme. It allows combining same-side mods, yet it also has roll protection on streaks. For me, this feels like Achordion, but clearly better streak handling and improved responsiveness. * Fix formatting. * Add a couple tests with LT keys. * Remove stale use of CHORDAL_HOLD_LAYOUT. * Fix misspelling lastest -> latest * Handling tweak for LTs and tests. * Fix formatting. * More tests with LT keys. * Fix formatting.
		
			
				
	
	
	
		
			40 KiB
		
	
	
	
	
	
	
	
			
		
		
	
	info.json Reference
The information contained in info.json is combined with the config.h and rules.mk files, dynamically generating the necessary configuration for your keyboard at compile time. It is also used by the QMK API, and contains the information QMK Configurator needs to display a representation of your keyboard. Its key/value pairs are ruled by the data/schemas/keyboard.jsonschema file. To learn more about the why and how of the schema file see the Data Driven Configuration page.
You can create info.json files at every level under qmk_firmware/keyboards/<keyboard_name>. These files are combined, with more specific files overriding keys in less specific files. This means you do not need to duplicate your metadata information. For example, qmk_firmware/keyboards/clueboard/info.json specifies information common to all Clueboard products, such as manufacturer and maintainer, while qmk_firmware/keyboards/clueboard/66/info.json contains more specific information about Clueboard 66%.
General Metadata
- keyboard_nameString Required- A free-form text string describing the keyboard. This will be used as the USB product string. Can include Unicode characters, escaped to ASCII eg. \u03A8(Ψ).
- Example: "Clueboard 66%"
 
- A free-form text string describing the keyboard. This will be used as the USB product string. Can include Unicode characters, escaped to ASCII eg. 
- maintainerString Required- GitHub username of the maintainer, or qmkfor community maintained boards.
- Example: "skullydazed"
 
- GitHub username of the maintainer, or 
- manufacturerString Required- A free-form text string describing the keyboard's manufacturer. This will be used as the USB manufacturer string. Can include Unicode characters, escaped to ASCII eg. \u03A8(Ψ).
- Example: "Clueboard"
 
- A free-form text string describing the keyboard's manufacturer. This will be used as the USB manufacturer string. Can include Unicode characters, escaped to ASCII eg. 
- urlString Required- A URL to the keyboard's product page, QMK Keyboards page, or other page describing information about the keyboard.
- Example: "https://clueboard.co"
 
- bootloader_instructionsString- Instructions for putting the keyboard into a mode that allows for firmware flashing.
- Example: "Press the button marked RESET on the back of the PCB"
 
- tagsArray: String- A list of tags describing the keyboard.
- Example: ["ortho", "split", "rgb"]
 
Hardware Configuration
- boardString- Override the default ChibiOS board name (ARM-based keyboards only).
- Example: "BLACKPILL_STM32_F411"
 
- bootloaderString- The bootloader in use on the keyboard. Required if development_boardis not specified.
 
- The bootloader in use on the keyboard. Required if 
- development_boardString- The microcontroller development board, if applicable.
- Example: "promicro"
 
- pin_compatibleString- The form factor of the development board, if applicable. Must be one of elite_c,promicro.
 
- The form factor of the development board, if applicable. Must be one of 
- processorString- The microcontroller in use on the keyboard. Required if development_boardis not specified.
 
- The microcontroller in use on the keyboard. Required if 
Firmware Configuration
- build- debounce_typeString- The debounce algorithm to use. Must be one of asym_eager_defer_pk,custom,sym_defer_g,sym_defer_pk,sym_defer_pr,sym_eager_pk,sym_eager_pr.
 
- The debounce algorithm to use. Must be one of 
- firmware_formatString- The format of the final output binary. Must be one of bin,hex,uf2.
 
- The format of the final output binary. Must be one of 
- ltoBoolean- Enable Link-Time Optimization.
- Default: false
 
 
- featuresObject: Boolean- A dictionary of features to enable or disable.
- Example:
 - { "rgb_matrix": true, "rgblight": false }
- qmk- locking- enabledBoolean- Enable locking switch support.
- Default: false
 
- resyncBoolean- Keep switch state consistent with keyboard LED state.
- Default: false
 
 
- tap_capslock_delayNumber- The delay between keydown and keyup for Caps Lock tap events in milliseconds.
- Default: 80(80 ms)
 
- tap_keycode_delayNumber- The delay between keydown and keyup for tap events in milliseconds.
- Default: 0(no delay)
 
 
- tapping- chordal_holdBoolean- Default: false
 
- Default: 
- hold_on_other_key_pressBoolean- Default: false
 
- Default: 
- hold_on_other_key_press_per_keyBoolean- Default: false
 
- Default: 
- permissive_holdBoolean- Default: false
 
- Default: 
- permissive_hold_per_keyBoolean- Default: false
 
- Default: 
- retroBoolean- Default: false
 
- Default: 
- retro_per_keyBoolean- Default: false
 
- Default: 
- termNumber- Default: 200(200 ms)
 
- Default: 
- term_per_keyBoolean- Default: false
 
- Default: 
- toggleNumber- Default: 5
 
- Default: 
 
APA102
Configures the APA102 driver.
- apa102- clock_pinPin Required- The GPIO pin connected to CIon the first LED in the chain.
 
- The GPIO pin connected to 
- data_pinPin Required- The GPIO pin connected to DIon the first LED in the chain.
 
- The GPIO pin connected to 
- default_brightnessNumber- The initial global brightness level (independent of the RGB data), from 0 to 31.
- Default: 31
 
 
Audio
Configures the Audio feature.
- audio- default- onBoolean- The default audio enabled state.
- Default: true
 
- clickyBoolean- The default audio clicky enabled state.
- Default: true
 
 
- driverString- The driver to use. Must be one of dac_additive,dac_basic,pwm_software,pwm_hardware.
 
- The driver to use. Must be one of 
- macro_beepBoolean- Play a short beep for \a(ASCIIBEL) characters in Send String macros.
- Default: false
 
- Play a short beep for 
- pinsArray: Pin Required- The GPIO pin(s) connected to the speaker(s).
 
- power_control- on_state0|1- The logical GPIO state required to turn the speaker on.
- Default: 1(on = high)
 
- pinPin- The GPIO pin connected to speaker power circuit.
 
 
- voicesBoolean- Use multiple audio voices.
- Default: false
 
 
Backlight
Configures the Backlight feature.
- backlight- as_caps_lockBoolean- Use the backlight as a Caps Lock indicator.
- Default: false
 
- breathingBoolean- Whether backlight breathing is enabled.
- Default: false
 
- breathing_periodNumber- The length of one backlight breathing cycle in seconds.
- Default: 6(6 seconds)
 
- default- onBoolean- The default backlight enabled state.
- Default: true
 
- breathingBoolean- The default backlight breathing state.
- Default: false
 
- brightnessNumber- The default brightness level.
- Default: max_brightness
 
 
- driverString- The driver to use. Must be one of custom,pwm,software,timer.
- Default: "pwm"
 
- The driver to use. Must be one of 
- levelsNumber- The number of brightness levels (excluding off), from 1 to 31.
- Default: 3
 
- max_brightnessNumber- The maximum PWM value which brightness is scaled to, from 0 to 255.
- Default: 255
 
- on_state0|1- The logical GPIO state required to turn the LEDs on.
- Default: 1(on = high)
 
- pinPin- The GPIO pin connected to the backlight circuit.
 
- pinsArray: Pin- A list of GPIO pins connected to the backlight LEDs (softwareandtimerdrivers only).
 
- A list of GPIO pins connected to the backlight LEDs (
 
Wireless/Bluetooth
Configures the Wireless feature.
- bluetooth- driverString- The driver to use. Must be one of custom,bluefruit_le,rn42.
 
- The driver to use. Must be one of 
 
Bootmagic
Configures the Bootmagic feature.
- bootmagic- enabledBoolean- Enables the Bootmagic feature.
- Default: false
 
- matrixMatrix- The matrix position of the key to check during startup. This should generally be set to the (physically) top left key.
- Default: [0, 0]
 
 
Caps Word
Configures the Caps Word feature.
- caps_word- both_shifts_turns_onBoolean- Activate Caps Word by pressing both Shift keys.
- Default: false
 
- double_tap_shift_turns_onBoolean- Activate Caps Word by pressing Left Shift twice.
- Default: false
 
- enabledBoolean- Enables the Caps Word feature.
- Default: false
 
- idle_timeoutNumber- The amount of time before Caps Word automatically deactivates in milliseconds.
- Default: 5000(5 seconds)
 
- invert_on_shiftBoolean- Invert shift state instead of deactivating Caps Word when Shift is pressed.
- Default: false
 
 
Combo
Configures the Combo feature.
- combo- termNumber- The amount of time to recognize a combo in milliseconds.
- Default: 50(50 ms)
 
 
DIP Switches
Configures the DIP Switches feature.
- dip_switch- enabledBoolean- Enable the DIP Switches feature.
- Default: false
 
- pinsArray: Pin- A list of GPIO pins connected to the MCU.
 
- matrix_gridArray: Matrix- A list of matrix locations in the key matrix.
- Example: [ [0,6], [1,6], [2,6] ]
 
 
EEPROM
Configures the EEPROM driver.
- eeprom- driverString- The EEPROM backend to use. Must be one of custom,i2c,legacy_stm32_flash,spi,transient,vendor,wear_leveling.
- Default: "vendor"
 
- The EEPROM backend to use. Must be one of 
- wear_leveling- driverString- The driver to use. Must be one of embedded_flash,legacy,rp2040_flash,spi_flash,custom.
 
- The driver to use. Must be one of 
- backing_sizeNumber- Number of bytes used by the wear-leveling algorithm for its underlying storage, and needs to be a multiple of the logical size.
 
- logical_sizeNumber- Number of bytes “exposed” to the rest of QMK and denotes the size of the usable EEPROM.
 
 
 
Encoder
Configures the Encoder feature.
- encoder- rotaryArray: Object- A list of encoder objects.
- pin_aPin Required- The GPIO pin connected to the encoder's Apin.
 
- The GPIO pin connected to the encoder's 
- pin_bPin Required- The GPIO pin connected to the encoder's Bpin.
 
- The GPIO pin connected to the encoder's 
- resolutionNumber- The number of edge transitions on both pins required to register an input.
- Default: 4
 
 
 
- A list of encoder objects.
 
Indicators
Configures the LED Indicators feature.
- indicators- caps_lockPin- The GPIO pin connected to the Caps Lock LED.
 
- composePin- The GPIO pin connected to the Compose LED.
 
- kanaPin- The GPIO pin connected to the Kana LED.
 
- num_lockPin- The GPIO pin connected to the Num Lock LED.
 
- on_state0|1- The logical GPIO state required to turn the LEDs on.
- Default: 1(on = high)
 
- scroll_lockPin- The GPIO pin connected to the Scroll Lock LED.
 
 
Layouts
The layouts portion of the dictionary contains several nested dictionaries. The outer layer consists of QMK layout names, for example LAYOUT_60_ansi or LAYOUT_60_iso.
Each key dictionary in a layout describes the physical properties of a key. If you are familiar with the Raw Data format for Keyboard Layout Editor, you will find many of the concepts the same. Key names and layout choices are reused wherever possible, but unlike KLE each key is stateless, inheriting no properties from the keys that came before it.
All key positions and rotations are specified in relation to the top-left corner of the keyboard, and the top-left corner of each key.
The ISO enter key is represented by a 1.25u×2uh key. Renderers which utilize info.json layout data (such as qmk info -l and the QMK Configurator) should display this key as expected.
- community_layoutsArray: String- A list of community layouts supported by the keyboard.
- Example: ["60_ansi", "60_iso"]
 
- layout_aliasesObject: String- A mapping of layout aliases to layout definitions.
- Example:
 - { "LAYOUT_ansi": "LAYOUT_60_ansi", "LAYOUT_iso": "LAYOUT_60_iso" }
- layoutsObject- A dictionary of layouts supported by the keyboard.
- LAYOUT_<layout_name>Object- layoutArray: Object- A list of key dictionaries comprising the layout. Each key dictionary contains:
- matrixMatrix Required- The matrix position for the key.
- Example: [0, 4](row 0, column 4)
 
- xKeyUnit Required- The absolute position of the key in the horizontal axis, in key units.
 
- yKeyUnit Required- The absolute position of the key in the vertical axis, in key units.
 
- hKeyUnit- The height of the key, in key units.
- Default: 1(1u)
 
- handString- The handedness of the key for Chordal Hold, either "L"(left hand),"R"(right hand), or"*"(either or exempted handedness).
 
- The handedness of the key for Chordal Hold, either 
- labelString- What to name the key. This is not a key assignment as in the keymap, but should usually correspond to the keycode for the first layer of the default keymap.
- Example: "Escape"
 
- rNumber- The rotation angle in degrees. Currently not implemented.
 
- rxNumber- The absolute X position of the rotation axis. Currently not implemented.
 
- ryNumber- The absolute Y position of the rotation axis. Currently not implemented.
 
- wKeyUnit- The width of the key, in key units.
- Default: 1(1u)
 
- encoderNumber- The index of an encoder this key should be linked to
 
- Example: {"label": "Shift", "matrix": [4, 0], "x": 0, "y": 4.25, "w": 2.25}
 
 
- A list of key dictionaries comprising the layout. Each key dictionary contains:
 
 
Leader Key
Configures the Leader Key feature.
- leader_key- timingBoolean- Reset the timeouton each keypress.
- Default: false
 
- Reset the 
- strict_processingBoolean- Do not extract the tap keycodes from Layer-Tap and Mod-Tap key events.
- Default: false
 
- timeoutNumber- The amount of time to complete a leader sequence in milliseconds.
- Default: 300(300 ms)
 
 
LED Matrix
Configures the LED Matrix feature.
- led_matrix- animationsObject: Boolean- A dictionary of effects to enable or disable. Effects which are absent default to false.
- Example:
 - { "alphas_mods": true, "breathing": true, "cycle_left_right": false }
- A dictionary of effects to enable or disable. Effects which are absent default to 
- center_pointArray: Number- The centroid (geometric center) of the LEDs. Used for certain effects.
- Default: [112, 32]
 
- default- animationString- The default effect. Must be one of led_matrix.animations
- Default: "solid"
 
- The default effect. Must be one of 
- onBoolean- The default enabled state.
- Default: true
 
- valNumber- The default brightness level.
- Default: max_brightness
 
- speedNumber- The default animation speed.
- Default: 128
 
 
- driverString Required- The driver to use. Must be one of custom,is31fl3218,is31fl3731,is31fl3733,is31fl3736,is31fl3737,is31fl3741,is31fl3742a,is31fl3743a,is31fl3745,is31fl3746a,snled27351.
 
- The driver to use. Must be one of 
- layoutArray: Object Required- List of LED configuration dictionaries. Each dictionary contains:
- flagsNumber Required- A bitfield of flags describing the type of LED.
 
- xNumber Required- The position of the LED in the horizontal axis, from 0 to 224.
 
- yNumber Required- The position of the LED in the vertical axis, from 0 to 64.
 
- matrixMatrix- The key matrix position associated with the LED.
- Example: [0, 2]
 
- Example: {"matrix": [2, 1], "x": 20, "y": 48, "flags": 2}
 
 
- List of LED configuration dictionaries. Each dictionary contains:
- led_flush_limitNumber- Limits in milliseconds how frequently an animation will update the LEDs.
- Default: 16
 
- led_process_limitNumber- Limits the number of LEDs to process in an animation per task run (increases keyboard responsiveness).
- Default: led_count / 5
 
- max_brightnessNumber- The maximum value which brightness is scaled to, from 0 to 255.
- Default: 255
 
- react_on_keyupBoolean- Animations react to keyup instead of keydown.
- Default: false
 
- sleepBoolean- Turn off the LEDs when the host goes to sleep.
- Default: false
 
- speed_stepsNumber- The number of speed adjustment steps.
- Default: 16
 
- split_countArray: Number- For split keyboards, the number of LEDs on each half.
- Example: [16, 16]
 
- timeoutNumber- The LED activity timeout in milliseconds.
- Default: 0(no timeout)
 
- val_stepsNumber- The number of brightness adjustment steps.
- Default: 8
 
 
Matrix
- debounceNumber- The debounce time in milliseconds.
- Default: 5(5 ms)
 
- diode_directionString- Which way the diodes are "pointing". Unused for matrix_pins.direct. Must be one ofCOL2ROW,ROW2COL.
 
- Which way the diodes are "pointing". Unused for 
- matrix_pins- colsArray: Pin- A list of GPIO pins connected to the matrix columns.
- Example: ["A0", "A1", "A2"]
 
- customBoolean- Whether to use a custom matrix scanning implementation.
- Default: false
 
- custom_liteBoolean- Whether to use a "lite" custom matrix scanning implementation.
- Default: false
 
- directArray: Array: Pin- A 2-dimensional list of GPIO pins connected to each keyswitch, forming the "matrix" rows and columns.
- Example:
 - [ ["A0", "A1", "A2"], ["B0", "B1", "B2"], ["C0", "C1", "C2"] ]
- ghostBoolean- Whether the matrix has no anti-ghosting diodes.
- Default: false
 
- input_pressed_state0|1- The logical GPIO state of the input pins when a key is pressed.
- Default: 0(pressed = low)
 
- io_delayNumber- The amount of time to wait between row/col selection and col/row pin reading, in microseconds.
- Default: 30(30 µs)
 
- rowsArray: Pin- A list of GPIO pins connected to the matrix rows.
- Example: ["B0", "B1", "B2"]
 
 
Mouse Keys
Configures the Mouse Keys feature.
- mouse_key- delayNumber
- enabledBoolean- Enables the Mouse Keys feature.
- Default: false
 
- intervalNumber
- max_speedNumber
- time_to_maxNumber
- wheel_delayNumber
 
One Shot
Configures One Shot keys.
- oneshot- tap_toggleNumber- The number of times to tap the key in order to hold it.
 
- timeoutNumber- The amount of time before the key is released in milliseconds.
 
 
PS/2
Configures the PS/2 feature.
- ps2- clock_pinPin- The GPIO pin connected to CLKon the PS/2 device.
 
- The GPIO pin connected to 
- data_pinPin- The GPIO pin connected to DATAon the PS/2 device.
 
- The GPIO pin connected to 
- driverString- The PS/2 driver to use. Must be one of busywait,interrupt,usart,vendor.
- Default: "busywait"
 
- The PS/2 driver to use. Must be one of 
- enabledBoolean- Enable the PS/2 feature.
- Default: false
 
- mouse_enabledBoolean- Enable the PS/2 mouse handling.
- Default: false
 
 
QMK LUFA Bootloader
- qmk_lufa_bootloader- esc_inputPin Required- The GPIO pin connected to the designated "exit bootloader" key's row (if COL2ROW).
 
- The GPIO pin connected to the designated "exit bootloader" key's row (if 
- esc_outputPin Required- The GPIO pin connected to the designated "exit bootloader" key's column (if COL2ROW).
 
- The GPIO pin connected to the designated "exit bootloader" key's column (if 
- ledPin- The GPIO pin connected to an LED to flash.
 
- speakerPin- The GPIO pin connected to a speaker to click (can also be used for a second LED).
 
 
RGBLight
Configures the RGB Lighting feature.
- rgblight- led_countNumber Required- The number of LEDs in the chain.
 
- animationsObject: Boolean- A dictionary of effects to enable or disable. Effects which are absent default to false.
- Example:
 - { "breathing": true, "rainbow_mood": true, "snake": false }
- A dictionary of effects to enable or disable. Effects which are absent default to 
- brightness_stepsNumber- The number of brightness adjustment steps.
- Default: 17
 
- default- animationString- The default effect. Must be one of rgblight.animations
- Default: "static_light"
 
- The default effect. Must be one of 
- onBoolean- The default enabled state.
- Default: true
 
- hueNumber- The default hue value.
- Default: 0
 
- satNumber- The default saturation value.
- Default: 255
 
- valNumber- The default brightness level.
- Default: max_brightness
 
- speedNumber- The default animation speed.
- Default: 0
 
 
- driverString- The driver to use. Must be one of apa102,custom,ws2812.
- Default: "ws2812"
 
- The driver to use. Must be one of 
- hue_stepsNumber- The number of hue adjustment steps.
- Default: 8
 
- layers- blinkBoolean- Enable layer blinking API.
- Default: false
 
- enabledBoolean- Enable RGB Lighting Layers.
- Default: false
 
- maxNumber- The maximum layer count, from 1 to 32.
- Default: 8
 
 
- led_mapArray: Number- Remap LED indices.
- Example: [4, 3, 2, 1, 0]
 
- max_brightnessNumber- The maximum value which the HSV "V" component is scaled to, from 0 to 255.
- Default: 255
 
- saturation_stepsNumber- The number of saturation adjustment steps.
- Default: 17
 
- sleepBoolean- Turn off the LEDs when the host goes to sleep.
- Default: false
 
- splitBoolean- Enable synchronization between split halves.
- Default: false
 
- split_countArray: Number- When rgblight.splitis enabled, the number of LEDs on each half.
- Example: [10, 10]
 
- When 
 
RGB Matrix
Configures the RGB Matrix feature.
- rgb_matrix- animationsObject: Boolean- A dictionary of effects to enable or disable. Effects which are absent default to false.
- Example:
 - { "alphas_mods": true, "breathing": true, "cycle_left_right": false }
- A dictionary of effects to enable or disable. Effects which are absent default to 
- center_pointArray: Number- The centroid (geometric center) of the LEDs. Used for certain effects.
- Default: [112, 32]
 
- default- animationString- The default effect. Must be one of rgb_matrix.animations
- Default: "solid_color"
 
- The default effect. Must be one of 
- onBoolean- The default enabled state.
- Default: true
 
- hueNumber- The default hue value.
- Default: 0
 
- satNumber- The default saturation value.
- Default: 255
 
- valNumber- The default brightness level.
- Default: max_brightness
 
- speedNumber- The default animation speed.
- Default: 128
 
 
- driverString Required- The driver to use. Must be one of aw20216s,custom,is31fl3218,is31fl3236,is31fl3729,is31fl3731,is31fl3733,is31fl3736,is31fl3737,is31fl3741,is31fl3742a,is31fl3743a,is31fl3745,is31fl3746a,snled27351,ws2812.
 
- The driver to use. Must be one of 
- hue_stepsNumber- The number of hue adjustment steps.
- Default: 8
 
- layoutArray: Object Required- List of LED configuration dictionaries. Each dictionary contains:
- flagsNumber Required- A bitfield of flags describing the type of LED.
 
- xNumber Required- The position of the LED in the horizontal axis, from 0 to 224.
 
- yNumber Required- The position of the LED in the vertical axis, from 0 to 64.
 
- matrixMatrix- The key matrix position associated with the LED.
- Example: [0, 2]
 
- Example: {"matrix": [2, 1], "x": 20, "y": 48, "flags": 2}
 
 
- List of LED configuration dictionaries. Each dictionary contains:
- led_flush_limitNumber- Limits in milliseconds how frequently an animation will update the LEDs.
- Default: 16
 
- led_process_limitNumber- Limits the number of LEDs to process in an animation per task run (increases keyboard responsiveness).
- Default: led_count / 5
 
- max_brightnessNumber- The maximum value which the HSV "V" component is scaled to, from 0 to 255.
- Default: 255
 
- react_on_keyupBoolean- Animations react to keyup instead of keydown.
- Default: false
 
- sat_stepsNumber- The number of saturation adjustment steps.
- Default: 16
 
- sleepBoolean- Turn off the LEDs when the host goes to sleep.
- Default: false
 
- speed_stepsNumber- The number of speed adjustment steps.
- Default: 16
 
- split_countArray: Number- For split keyboards, the number of LEDs on each half.
- Example: [16, 16]
 
- timeoutNumber- The LED activity timeout in milliseconds.
- Default: 0(no timeout)
 
- val_stepsNumber- The number of brightness adjustment steps.
- Default: 16
 
 
Secure
Configures the Secure feature.
- secure- enabledBoolean- Enable the Secure feature.
- Default: false
 
- idle_timeoutNumber- Timeout while unlocked before returning to the locked state. Set to 0to disable.
- Default: 60000(1 minute)
 
- Timeout while unlocked before returning to the locked state. Set to 
- unlock_sequenceArray: Matrix- A list of up to five matrix locations comprising the "unlock sequence".
- Example: [[0, 0], [0, 1], [4, 3]]
 
- unlock_timeoutNumber- Timeout for the user to perform the unlock sequence. Set to 0to disable.
- Default: 5000(5 seconds)
 
- Timeout for the user to perform the unlock sequence. Set to 
 
Split Keyboard
Configures the Split Keyboard feature.
- split- bootmagic- matrix- See Bootmagic config.
 
 
- dip_switch- right- pins- See DIP Switches config.
 
 
 
- enabledBoolean- Enable the Split Keyboard feature.
- Default: false
 
- encoder- right- rotary- See Encoder config.
 
 
 
- handedness- pinPin- The GPIO pin connected to determine handedness.
 
- matrix_gridArray: Pin- The GPIO pins of the matrix position which determines the handedness.
- Example: ["A1", "B5"]
 
 
- matrix_pins- right- See Matrix config.
 
 
- serial- driverString- The driver to use. Must be one of bitbang,usart,vendor.
- Default: "bitbang"
 
- The driver to use. Must be one of 
- pinPin- The GPIO pin to use for transmit and receive.
 
 
- soft_serial_speedNumber- The protocol speed, from 0to5(serialtransport protocol only).
- Default: 1
 
- The protocol speed, from 
- transport- protocolString- The split transport protocol to use. Must be one of custom,i2c,serial.
 
- The split transport protocol to use. Must be one of 
- sync- activityBoolean- Mirror the activity timestamps to the secondary half.
- Default: false
 
- detected_osBoolean- Mirror the detected OS to the secondary half.
- Default: false
 
- hapticBoolean- Mirror the haptic state and process haptic feedback to the secondary half.
- Default: false
 
- layer_stateBoolean- Mirror the layer state to the secondary half.
- Default: false
 
- indicatorsBoolean- Mirror the indicator state to the secondary half.
- Default: false
 
- matrix_stateBoolean- Mirror the main/primary half's matrix state to the secondary half.
- Default: false
 
- modifiersBoolean- Mirror the modifier state to the secondary half.
- Default: false
 
- oledBoolean- Mirror the OLED on/off status to the secondary half.
- Default: false
 
- st7565Boolean- Mirror the ST7565 on/off status to the secondary half.
- Default: false
 
- wpmBoolean- Mirror the current WPM value to the secondary half.
- Default: false
 
 
- watchdogBoolean- Reboot the secondary half if it loses connection.
- Default: false
 
- watchdog_timeoutNumber- The amount of time to wait for communication from the primary half in milliseconds.
 
 
- usb_detect- enabledBoolean- Detect USB connection when determining split half roles.
 
- polling_intervalNumber- The polling frequency in milliseconds.
- Default: 10(10 ms)
 
- timeoutNumber- The amount of time to wait for a USB connection in milliseconds.
- Default: 2000(2 seconds)
 
 
 
Stenography
Configures the Stenography feature.
- stenography- enabledBoolean- Enable the Stenography feature.
- Default: false
 
- protocolString- The Steno protocol to use. Must be one of all,geminipr,txbolt.
- Default: "all"
 
- The Steno protocol to use. Must be one of 
 
USB
- usb- device_versionString Required- A BCD version number in the format MM.m.r(up to99.9.9).
- Example: "1.0.0"
 
- A BCD version number in the format 
- pidString Required- The USB product ID as a four-digit hexadecimal number.
- Example: "0x23B0"
 
- vidString Required- The USB vendor ID as a four-digit hexadecimal number.
- Example: "0xC1ED"
 
- force_nkroBoolean- Force NKRO to be active.
- Default: false
 
- max_powerNumber- The maximum current draw the host should expect from the device. This does not control the actual current usage.
- Default: 500(500 mA)
 
- no_startup_checkBoolean- Disable USB suspend check after keyboard startup.
- Default: false
 
- polling_intervalNumber- The frequency at which the host should poll the keyboard for reports.
- Default: 1(1 ms/1000 Hz)
 
- shared_endpoint- keyboardBoolean- Send keyboard reports through the "shared" USB endpoint.
- Default: false
 
- mouseBoolean- Send mouse reports through the "shared" USB endpoint.
- Default: true
 
 
- suspend_wakeup_delayNumber- The amount of time to wait after sending a wakeup packet, in milliseconds.
- Default: 0(disabled)
 
- wait_for_enumerationBoolean- Force the keyboard to wait for USB enumeration before starting up.
- Default: false
 
 
WS2812
Configures the WS2812 driver.
- ws2812- driverString- The driver to use. Must be one of bitbang,custom,i2c,pwm,spi,vendor.
- Default: "bitbang"
 
- The driver to use. Must be one of 
- pinPin Required- The GPIO pin connected to DIon the first LED in the chain (bitbang,pwm,spiandvendordrivers only).
 
- The GPIO pin connected to 
- i2c_addressString- The I²C address of the WS2812 controller (i2cdriver only).
- Default: "0xB0"
 
- The I²C address of the WS2812 controller (
- i2c_timeoutNumber- The I²C timeout in milliseconds (i2cdriver only).
- Default: 100(100 ms)
 
- The I²C timeout in milliseconds (
- rgbwBoolean- Enable RGBW LEDs.
- Default: false