Skip to the content
2 layers362.9 × 126 mmKeygen, the printed circuit board in 3D

One-off wireless split keyboard: 2 knobs, OLED, trackpad, per-key RGB, ZMK

Size
362.9 × 126 mm
Copper layers
2
Thickness
1.6 mm
Parts
240
Nets
188
Pads
1,130
Tracks, vias
3,760, 786
Pours
6
Routed
Yes
KiCad
KiCad 10.0 (file 20260206)
Created
19 Oct 2026
Updated
4 Nov 2026

Overview

Keygen is an open-source printed circuit board by milindmadhukar, from the milindmadhukar/keygen repository on GitHub. It is a 2-layer board of 362.9 × 126 mm with 240 parts on 188 nets, routed with 3,760 tracks and 786 vias.

It is built around the SK6812MINI-E, AO3401A and AO3400A. Its parts include 134 diodes, 70 switches, 6 resistors, 6 transistors and 4 capacitors. It belongs with the keyboards and input and lEDs and displays boards and the nRF52 and nRF5x boards of this library.

Main components

3

README

README.md

Keygen

A wireless split ergonomic keyboard with a custom two-layer PCB designed in KiCad 10.

KiCad 10 nRF52840 ZMK Status

Keygen, both halves in their black PETG case, the per-key LEDs lit under smoke translucent keycaps

Keygen is a one-off build: 66 keys over two column-staggered halves, a 2 × 2 thumb cluster, a rotary encoder and a 0.96-inch OLED on each half, and per-key RGB lighting. Each half has its own nRF52840 controller hidden on the PCB underside, and an optional printed wedge tents it 13°. The keyboard reaches the host over Bluetooth or USB-C, and the halves talk to each other over Bluetooth.

The schematic, placement and most of the routing are generated by the Python scripts in tools/, and so are the switch plate and the 3D-printed case. tools/regen.py keeps every generated file current with its sources. The name and the silkscreen artwork come from Martin Garrix's track Keygen (STMPD RCRDS); see Silkscreen artwork. tools/check_mechanical.py checks the plate, case and component clearances, including the battery stack at full gasket travel.

To build one, follow INSTRUCTIONS.md.

Specifications

LayoutColumn-staggered QWERTY, six columns per hand plus an extra bottom row
Keys66 (33 per half): 52 × 1u, 14 × 1.25u
Thumb cluster2 × 2 block rotated 30° (two 1u over two 1.25u) plus one 1.25u key per hand
EncodersHongYan EC11H with a 20 mm D shaft on each half, fixed to the top frame and plugged into a pin header on the PCB, with a 17 mm aluminium D-shaft knob, in the key matrix. Left: scroll wheel, press for middle click. Right: volume, press to mute
Displays0.96 in. 128 × 64 SSD1306 OLED per half (I2C), held in the top frame and plugged into the PCB, showing ZMK's status screen
SwitchesAkko V3 Lavender Purple Pro (tactile, 5-pin) in Kailh hotswap sockets (CPG151101S11)
KeycapsBlank DSA PBT, smoke translucent
Lighting33 SK6812MINI-E reverse-mount RGB backlights per half. The LEDs use a switched battery rail and ZMK's addressable RGB driver
ControllernRF52840 SuperMini (nice!nano v2 clone, Pro Micro format), one per half, socketed on the underside
ConnectivityHost: USB-C (left half) or Bluetooth, 5 profiles. Halves: Bluetooth split
PowerKP-355085 LiPo pouch per half (3.5 × 50 × 85 mm, listed 3000 mAh) with a protection board, JST-PH connector, slide switch driving a P-MOSFET battery switch. Each half charges from its own USB-C
PCB2 layers, FR-4 1.6 mm, 1 oz copper, HASL, black soldermask with white silkscreen. One half is 160.2 × 126.0 mm
Switch plateClear polycarbonate 1.5 mm, CNC-routed, with eight gasket tabs per half
Case3D-printed PETG, gasket-mounted: a bottom shell and a top frame per half, 175.4 × 143.7 × 24.5 mm. The top frame covers the plate round the keycaps and the knob, and holds the OLED and the encoder. Rubber feet, and a steel disc set flush into each floor
TentingOptional 3D-printed 13° PETG wedge per half, held by four N35 10 × 3 mm magnets to the steel disc, with the feet standing in recesses in its top face
FoamPoron ring switch pads (0.5 mm) on the PCB, EVA plate foam (2 mm) taped under the plate, EVA case foam (5 mm) on the case floor
FirmwareZMK main (Zephyr 4.1): QWERTY base with Nav, Fn and System layers, ZMK Studio

Gallery

The lit pictures are Cycles renders of the Blender scene, which is rebuilt from the board and the case on request; the case layers and the PCB come from KiCad.

More renders and animations

Both OLEDs booting. A closeup of both screens playing the firmware boot sequence.

Both Keygen OLEDs playing the boot animation in a Blender closeup

Per-key lighting. The SK6812MINI-E LEDs shine up through the switches' clear tops and the smoke translucent caps. The logic audit records the current and voltage limits that still need a powered prototype test before brightness or battery life can be promised.

A rainbow wave running across Keygen's per-key LEDs

All round.

Keygen turning on a turntable

From above. The top frame's deck round the keycaps, the OLED window and the knob.

Keygen from above

From the side. The back edge of each half, with its USB-C port and power switch.

Keygen from behind at desk level, showing the case profile, the USB-C ports and the power switches

Underneath. The bottom shells, with the counterbored case screws and the reset pinhole.

Keygen turned over, showing the underside of both bottom shells

Tenting. Each half on its wedge, and the wedges' top faces: four recesses for the rubber feet, and four pockets for the magnets under the steel disc.

Both halves on their 13° wedges, from behind at desk level

The two wedges, with their foot recesses and magnet pockets

Knob and thumb cluster.

Close up on the left half's knob, OLED window and thumb cluster

Status screen. ZMK's status screen on the left OLED: Bluetooth profile, battery and layer. The Keygen screens, with their boot animation and lighting menu, are in firmware/README.md.

Close up on the left half's OLED showing ZMK's status screen, beside the knob

Case layers. Bottom shell, case foam, PCB, switch pads, plate foam, gasket strips under and over the plate tabs, plate and top frame.

Keygen case, exploded

Bare PCB. Black soldermask with white silkscreen artwork on both sides; see Silkscreen artwork.

The bare Keygen PCB at an angle, black soldermask and white silkscreen

The bare Keygen PCB from above

The bare Keygen PCB from below

PCB underside, assembled. The controllers, power switches, battery connectors and reset buttons sit on the back.

Keygen PCB underside with its parts

Renders of the case parts, the plate and the routing are in the media release.

Documentation

DocumentWhat it covers
Build guideParts list, what to order and when, what goes on which side, one section per part with close-ups, flashing, closing the case, troubleshooting
Hardware referenceElectronics, PCB rules, plate, case, foam and the silkscreen artwork
Building from sourceRequirements, the schematic and PCB pipeline, the plate and case, the Blender scene, every generated file
FirmwareZMK configuration: keymap, OLED screens, hardware support, building and flashing
Design notesThe Obsidian design notes: layout, controller, PCB, case, final design, datasheet audit
Encoder mountThe encoder boss, knob clearance, the plate and PCB openings, the cable and a printable test coupon
Build planLayout drawing, connectivity, parts, pin budget and checklist. Open it in a browser
Schematic (PDF)A top sheet with left (refs 1xx) and right (refs 2xx) sub-sheets
KiCad projectSchematic and PCB, KiCad 10. Both halves are in one board file as two separate outlines
Build filesThe PCB and plate Gerbers, case and wedge STLs and STEPs, foam cut files and plate print PDFs, as a release
Ordering notesPCB order-form settings and what to check in the DFM report
Plate ordering notesThe DXFs for routing the switch plates from polycarbonate sheet, and the Gerbers for an FR-4 plate from a PCB fab
Assembly BOMEvery part's references per half, with quantities and soldering notes
Parts and sourcesShopping list with Indian and import sources (from bom/bom.csv)
Shopping checklistWhat to buy, from which store, with links and prices, to tick off
DatasheetsEvery part's datasheet, with the page each design fact comes from

Firmware

Keygen runs ZMK, one build per half on the nice!nano v2 target, with the left half as the central. The configuration builds; it has not yet run on the boards. GitHub Actions builds the UF2s on every push that changes firmware/. The keymap, the build and the flashing steps are in firmware/README.md.

Keygen base layer

Repository layout

text
keygen/
├── INSTRUCTIONS.md Build guide
├── pcb/            KiCad 10 project: schematic (generated), PCB, plate, project footprints and 3D models
├── tools/          Python scripts that generate, route, check and export the design
├── fab/            Assembly BOMs and ordering notes (the Gerbers are in the build release)
├── case/           Plate ordering notes (the case, wedge, plate and foam files are in the build release)
├── bom/            Bill of materials with sources (bom.csv) and the shopping checklist
├── plan/           Build plan and parts list as HTML
├── docs/           Datasheet index (the PDFs are in the datasheets release)
├── assets/         Keymap pictures (the renders are in the media release)
├── blender/        Blender studio scene with the materials and the lit LEDs; it links the generated parts
├── notes/          Design notes, hardware reference and build pipeline (Obsidian Markdown)
├── firmware/       ZMK configuration: shield, keymap, builds
└── lib/            Git submodules: marbastlib and Keebio-Parts footprint libraries, KeyV2 keycaps

Project status

  • Layout and schematic, ERC clean
  • PCB placed, routed, DRC clean with schematic parity
  • Datasheet audit with no failures
  • Manufacturing files and assembly BOM
  • Parts sourced and priced
  • Boards ordered and assembled
  • ZMK firmware builds
  • ZMK firmware tested on the boards
  • Switch plate, gasket-mounted case and tenting wedges designed, fit-checked against the PCB
  • Case and wedges printed

Credits and licenses

Parts

240
QtyValueFootprintReferences
681N4148Diode_THT:D_DO-35_SOD27_P7.62mm_HorizontalD101, D102, D103, D104, D105, D106, D107, D108, D109, D110, D111, D112, D113, D114, D115, D116 +52
66SK6812MINI-ELED_SMD:LED_SK6812MINI-E_3.2x2.8mm_P1.5mm_ReverseMountLED101, LED102, LED103, LED104, LED105, LED106, LED107, LED108, LED109, LED110, LED111, LED112, LED113, LED114, LED115, LED116 +50
10M2MountingHole:MountingHole_2.2mm_M2H101, H102, H103, H104, H105, H201, H202, H203, H204, H205
4100kResistor_SMD:R_1206_3216Metric_Pad1.30x1.75mm_HandSolderR102, R103, R202, R203
4AO3401APackage_TO_SOT_SMD:SOT-23Q101, Q102, Q201, Q202
2100nFCapacitor_SMD:C_1206_3216Metric_Pad1.33x1.80mm_HandSolderC102, C202
210uFCapacitor_SMD:C_1206_3216Metric_Pad1.33x1.80mm_HandSolderC101, C201
21MResistor_SMD:R_1206_3216Metric_Pad1.30x1.75mm_HandSolderR101, R201
2AO3400APackage_TO_SOT_SMD:SOT-23Q103, Q203
2Altkeygen:SW_MX_HS_CPG151101S11_1uSW120, SW220
2Ctrlkeygen:SW_MX_HS_CPG151101S11_1uSW127, SW227
2EC11keygen:EC11_Case_MountENC101, ENC201
2Encoder lead, 1x5 right angleConnector_PinHeader_2.54mm:PinHeader_1x05_P2.54mm_HorizontalJ102, J202
2LiPo 3.7V 3000mAhConnector_JST:JST_PH_S2B-PH-K_1x02_P2.00mm_HorizontalBT101, BT201
2OLED 0.96in I2CConnector_PinHeader_2.54mm:PinHeader_1x04_P2.54mm_VerticalJ101, J201
2ResetButton_Switch_THT:SW_PUSH_6mm_H5mmSW191, SW291
2SK12D07VG5 powerkeygen:SW_SK12D07VG5SW190, SW290
2Shiftkeygen:SW_MX_HS_CPG151101S11_1.25uSW121, SW221
2nRF52840 Pro Microkeygen:nice_nano_H_USBupU101, U201
1'keygen:SW_MX_HS_CPG151101S11_1.25uSW214
1,keygen:SW_MX_HS_CPG151101S11_1uSW224
1-keygen:SW_MX_HS_CPG151101S11_1.25uSW201
1.keygen:SW_MX_HS_CPG151101S11_1uSW223
1/keygen:SW_MX_HS_CPG151101S11_1uSW222
10keygen:SW_MX_HS_CPG151101S11_1uSW202
11keygen:SW_MX_HS_CPG151101S11_1uSW102
12keygen:SW_MX_HS_CPG151101S11_1uSW103
13keygen:SW_MX_HS_CPG151101S11_1uSW104
14keygen:SW_MX_HS_CPG151101S11_1uSW105
15keygen:SW_MX_HS_CPG151101S11_1uSW106
16keygen:SW_MX_HS_CPG151101S11_1uSW206
17keygen:SW_MX_HS_CPG151101S11_1uSW205
18keygen:SW_MX_HS_CPG151101S11_1uSW204
19keygen:SW_MX_HS_CPG151101S11_1uSW203
1;keygen:SW_MX_HS_CPG151101S11_1uSW215
1=keygen:SW_MX_HS_CPG151101S11_1.25uSW101
1Akeygen:SW_MX_HS_CPG151101S11_1uSW115
1Bkeygen:SW_MX_HS_CPG151101S11_1uSW126
1Bkspkeygen:SW_MX_HS_CPG151101S11_1.25uSW133
1Ckeygen:SW_MX_HS_CPG151101S11_1uSW124
1Capskeygen:SW_MX_HS_CPG151101S11_1uSW129
1Dkeygen:SW_MX_HS_CPG151101S11_1uSW117
1Delkeygen:SW_MX_HS_CPG151101S11_1.25uSW134
1Downkeygen:SW_MX_HS_CPG151101S11_1uSW230
1Ekeygen:SW_MX_HS_CPG151101S11_1uSW111
1Enterkeygen:SW_MX_HS_CPG151101S11_1.25uSW234
1Esckeygen:SW_MX_HS_CPG151101S11_1.25uSW114
1Fkeygen:SW_MX_HS_CPG151101S11_1uSW118
1Fnkeygen:SW_MX_HS_CPG151101S11_1.25uSW232
1Gkeygen:SW_MX_HS_CPG151101S11_1uSW119
1Hkeygen:SW_MX_HS_CPG151101S11_1uSW219
1Ikeygen:SW_MX_HS_CPG151101S11_1uSW211
1Jkeygen:SW_MX_HS_CPG151101S11_1uSW218
1Kkeygen:SW_MX_HS_CPG151101S11_1uSW217
1Lkeygen:SW_MX_HS_CPG151101S11_1uSW216
1Leftkeygen:SW_MX_HS_CPG151101S11_1uSW130
1Mkeygen:SW_MX_HS_CPG151101S11_1uSW225
1Nkeygen:SW_MX_HS_CPG151101S11_1uSW226
1Okeygen:SW_MX_HS_CPG151101S11_1uSW210
1Pkeygen:SW_MX_HS_CPG151101S11_1uSW209
1Qkeygen:SW_MX_HS_CPG151101S11_1uSW109
1Rkeygen:SW_MX_HS_CPG151101S11_1uSW112
1Rightkeygen:SW_MX_HS_CPG151101S11_1uSW131
1Skeygen:SW_MX_HS_CPG151101S11_1uSW116
1Spacekeygen:SW_MX_HS_CPG151101S11_1.25uSW233
1Superkeygen:SW_MX_HS_CPG151101S11_1.25uSW132
1Tkeygen:SW_MX_HS_CPG151101S11_1uSW113
1Tabkeygen:SW_MX_HS_CPG151101S11_1.25uSW108
1Ukeygen:SW_MX_HS_CPG151101S11_1uSW212
1Upkeygen:SW_MX_HS_CPG151101S11_1uSW231
1Vkeygen:SW_MX_HS_CPG151101S11_1uSW125
1Wkeygen:SW_MX_HS_CPG151101S11_1uSW110
1Xkeygen:SW_MX_HS_CPG151101S11_1uSW123
1Ykeygen:SW_MX_HS_CPG151101S11_1uSW213
1Zkeygen:SW_MX_HS_CPG151101S11_1uSW122
1[keygen:SW_MX_HS_CPG151101S11_1uSW229
1\keygen:SW_MX_HS_CPG151101S11_1.25uSW208
1]keygen:SW_MX_HS_CPG151101S11_1uSW228
1`keygen:SW_MX_HS_CPG151101S11_1uSW128

Similar boards

  • 2 layers133.9 × 19.4 mmGuilty pad gay, the printed circuit board in 3D

    Guilty pad gay

    askiiart/guilty-pad-gay

    a macropad thingy that can magnetically attach to a keyboard and interface with it over serial

    40 parts1
  • 4 layers353.7 × 129.8 mmTokenBoard, the printed circuit board in 3D

    TokenBoard

    h3ll5ur7er/TokenBoard

    You wouldn't vibe code a keyboard.. or would you? uses konnect to interact with KiCad and CADence to model the case

    422 parts
  • 4 layers65 × 100 mmMacropad, the printed circuit board in 3D

    Macropad

    mcskny/wireless-he-macropad

    A wireless, 12-key Hall-effect macropad built around a custom PCB, an ESP32-C6 sender, an ESP32-S3 USB receiver, and a native macOS companion app.

    165 partsGPL-3.0
  • 2 layers165.8 × 130.8 mmYAEMK, the printed circuit board in 3D

    YAEMK

    KarlK90/yaemk-split-kb

    5x8 Split keyboard with thumb-clusters, rotary encoders and oleds.

    218 parts128GPL-3.0
  • 4 layers68 × 68 mmBackbone, the printed circuit board in 3D

    Backbone

    andreapiccini/spaghettilab-community

    SpaghettiLab is an open modular hardware and software ecosystem for rapid prototyping, embedded systems development, and product innovation.

    212 parts10
  • 2 layers161.9 × 120.5 mmDodo keyboard, the printed circuit board in 3D

    Dodo keyboard

    gorbit99/dodo-keyboard

    60% split wireless keyboard

    116 parts9
  • 2 layers139.1 × 107.7 mmLotus-58-BLE, the printed circuit board in 3D

    Lotus-58-BLE

    TweetyDaBird/Lotus-58-BLE

    165 parts7
  • 2 layers316.4 × 95.2 mmLuna65, the printed circuit board in 3D

    Luna65

    NeilKhera/Luna65

    (WIP) A 65% keyboard PCB!

    327 parts6

Questions

How big is the Keygen PCB?

It measures 362.9 × 126 mm and has 2 copper layers, 1.6 mm thick.

What parts does the Keygen use?

240 parts, built around the SK6812MINI-E, AO3401A and AO3400A. The full list of its parts is on this page, with links to each part's symbol and footprint where PCBKit's library has them.

Where can I download the Keygen KiCad files?

From the milindmadhukar/keygen repository on GitHub, at the commit this page was made from: the board is pcb/keygen.kicad_pcb and its schematic pcb/keygen.kicad_sch. PCBKit opens the board in the browser, with nothing to install.

Can I use the Keygen design in my own project?

Its repository states no licence, so its author keeps all rights: ask milindmadhukar before reusing the design.