Skip to content

Identity & hardware โ€‹

The Identity panel holds everything about the board that is not its layout or bindings โ€” name, USB identity, firmware targets, controller, matrix, lighting and firmware config. These fields turn a keymap into a flashable project. Sections appear/disappear based on the firmware targets you select.

๐Ÿ“ท Screenshot slot โ€” docs/public/images/builder/identity.png

The Identity panel scrolled to show Identity, USB identifiers, Firmware targets and Controller.

Every field below is labelled exactly as it appears in the panel, with the config key it writes.

Identity โ€‹

FieldWritesNotes
Keyboard namemeta.nameDisplay name; seeds the export project/shield name.
Author / maintainermeta.author

USB identifiers โ€‹

FieldWritesPlaceholder
Vendor IDmeta.vendorId0xFEED
Product IDmeta.productId0x0001

Required for the QMK family.

Firmware targets โ€‹

Cards for each target (QMK, VIA, Vial, ZMK) with a one-line blurb; selecting them fills keyboard.firmware[]. An info line summarises the choice โ€” "Keyboard type ยท Wired (USB)" or "Wireless (BLE)", and "Keycodes & behaviours follow {firmware}". VIA and Vial compile through QMK. See Firmware targets.

Controller โ€‹

Writes keyboard.controller. Fields shown depend on the targets:

FieldWritesPlaceholderFor
Boardcontroller.boardnice_nano_v2ZMK / QMK
Shield (opt.)controller.shieldcorne_leftZMK
Processor (QMK)controller.processoratmega32u4QMK
Bootloader (QMK)controller.bootloaderatmel-dfuQMK
Dev board (QMK)controller.developmentBoardpromicroQMK
Device versioncontroller.deviceVersion1.0.0QMK

"ZMK uses board + optional shield. QMK uses processor + bootloader (or a dev-board shortcut) + USB device version."

Matrix โ€‹

The board-level matrix descriptor (keyboard.matrix) plus pin labels (keyboard.pins):

ControlWritesOptions
Diode directionmatrix.diodeDirectionCOL2ROW / ROW2COL
Scan modematrix.modeMatrix (row ร— col) / Direct (1 GPIO/key)
Pin mappingpins.rows / pins.colsrow pins / col pins
Autoper-key matrix"Auto assigns each key's row/column from its position."

The display reads e.g. 4 ร— 12 ยท 36 keys (ยท wired when keys have matrix positions). Per-key wiring is in the inspector.

Capabilities โ€‹

ToggleWrites
Split / two-piecekeyboard.split

Lighting โ€‹

Writes keyboard.lighting; "Configured for every firmware target โ€” the exporter maps it to each platform."

ControlWrites
RGB underglowlighting.underglow (on)
โ€” Effectunderglow.effect โ€” solid / breathe / rainbow / swirl / gradient
โ€” Colorunderglow.hue (or Rainbow)
โ€” Brightnessunderglow.brightness
Per-key backlightlighting.backlight (on)
โ€” Backlight brightnessbacklight.brightness
โ€” Breathingbacklight.breathing

See Lighting for the full picture (actions vs config).

Firmware config (.conf) โ€” ZMK โ€‹

Toggles that derive the ZMK .conf, writing keyboard.firmwareConfig. A live Generated .conf preview updates as you flip them. Extra Kconfig (e.g. CONFIG_ZMK_SLEEP=y) is appended verbatim.

ToggleDerives
USBCONFIG_ZMK_USB
Bluetooth (BLE)CONFIG_ZMK_BLE
ZMK StudioCONFIG_ZMK_STUDIO
Studio over USB (CDC)Studio CDC block
Studio unlock requiredCONFIG_ZMK_STUDIO_LOCKING
Soft-offCONFIG_ZMK_PM_SOFT_OFF
External powerCONFIG_ZMK_EXT_POWER
Pointing (mouse)CONFIG_ZMK_POINTING
USB loggingCONFIG_ZMK_USB_LOGGING

Each is tri-state โ€” left alone it auto-derives from used behaviors/hardware; toggling sets an explicit override. See Firmware config.

Hardware pins โ€” ZMK โ€‹

Appears when a feature needs a pin. Friendly nRF labels like P0.13 emit psels; "verify against your board wiring." Writes keyboard.hardware.

SectionFieldsWrites
Ext-power control GPIOpin (P0.14), Active lowhardware.extPowerCtrl
Backlight PWMpin (P0.13), instance (pwm0), Invertedhardware.backlightPwm
WS2812 underglowdata pin (P1.13), LEDs, color order (GRBโ€ฆ), SPI (spi3)hardware.ws2812

Firmware config (config.h / rules.mk) โ€” QMK โ€‹

For the QMK family: Extra config.h (#define TAPPING_TERM 180) and Extra rules.mk (MOUSEKEY_ENABLE = yes), each with a live Generated preview. Writes firmwareConfig.configH / firmwareConfig.rulesMk.

Vial security โ€‹

Shown when Vial is a target. Writes keyboard.vial:

ControlWrites
Keyboard UID (8 bytes) + Generatevial.uid
Unlock combo (row,col โ€ฆ) + Add selectedvial.unlockKeys
Insecure (no unlock required)vial.insecure

"Vial ties a flashed board to its definition by UID and locks the keymap until the unlock keys are held. Select keys on the board, then 'Add selected'."

Layout options โ€‹

Shown for VIA/Vial. Writes keyboard.layoutOptions; keys tag in via the inspector's Layout variant.

  • Option label + Choices, comma-separated (blank = toggle) โ†’ Add option. "A blank choices field is an on/off toggle; two or more choices make a dropdown."
  • Per-option Tag โ†’ {choice} and Untag selected tag the current selection.

Readiness โ€‹

A live Readiness strip shows a button per target โ€” green/"Ready to build" when there are no blocking errors, otherwise a tooltip lists what is missing. This is the same check the export modal runs.

A filled-in example โ€‹

json
"meta": { "name": "My Split", "vendorId": "0xFEED", "productId": "0x0001", "target": null },
"keyboard": {
  "id": "my_split",
  "name": "My Split",
  "firmware": ["zmk"],
  "controller": { "board": "nice_nano_v2", "shield": "my_split_left" },
  "matrix": { "rows": 4, "cols": 6, "diodeDirection": "col2row", "mode": "matrix" },
  "split": true,
  "firmwareConfig": { "ble": true, "studio": true }
}

Next โ€‹

Lighting โ†’

Apache-2.0. Originally forked from ZMK Studio; application layer fully rewritten.