

Keyword top
A truly modular keyboard
- Size
- 19.1 × 19 mm
- Copper layers
- 4
- Thickness
- 1.58 mm
- Parts
- 45
- Nets
- 65
- Pads
- 175
- Tracks, vias
- 210, 67
- Pours
- 8
- Routed
- Yes
- KiCad
- KiCad 10.0 (file 20260206)
- Created
- 19 Dec 2025
- Updated
- 2 Nov 2026
Overview
Keyword top is an open-source printed circuit board by notaroomba, from the notaroomba/keybytes repository on GitHub. It is a 4-layer board of 19.1 × 19 mm with 45 parts on 65 nets, routed with 210 tracks and 67 vias.
It is built around the W25Q16JVUXIQ, MLPF-WB-04D3 and NX2012SA-32.768KHZ-STD-MUB-2, with the XL-1608RGBC, YZ00615050R-08 and 2450AT18A100E among its other parts. Its parts include 18 capacitors, 6 connectors, 5 resistors, 5 ICs and 2 inductors. It belongs with the keyboards and input boards and the STM32 boards of this library.
Main components
7W25Q16JVUXIQ
USON-8-EP(2x3)-40℃~+85℃ 100,000 cycles 10uA 133MHz 16Mbit 2.7V~3.6V 20 Years 3ms SPI USON-8-EP(2x3) NOR FLASH ROHSWinbond ElecNOR FLASHMLPF-WB-04D3
CSPGBGA-6(1x1.6)2.4 GHz low pass filter matched to STM32WBA QFN and BGA seriesSTMicroelectronicsUncategorisedNX2012SA-32.768KHZ-STD-MUB-2
SMD2012-2P-40℃~+85℃ 32.768kHz Crystal Oscillator SMD2012-2P Crystals ROHSNDKCrystalsXL-1608RGBC
SMD-4P,1.6x0.8mm-30℃~+85℃ 0.6mm 0.8mm 1.6mm 120° 2000V B:470nm、R:630nm、G:530nm R:1.9V~2.3V、G:2.7V~3.3V、B:2.6V~3.2V R:20mA、G:20mA、B:20mA R:50mW、G:70mW、B:70mW R:620nm~625nm、G:520nm~535nm、B:460nm~475nm Top-mount Water Clear SMD-4P,1.6x0.8mm RGB LEDs ROHSXINGLIGHTRGB LEDsYZ00615050R-08
SMD,D=2mm-20℃~+70℃ 10000 times 12V 1A 1P 4mm 50mΩ 5mm Brass Gold Pogo Pin SMD,D=2mm Pogo Pin Spring Probe Connector ROHSXinyangzePogo Pin Spring Probe Connector2450AT18A100E
1206-40℃~+125℃ 0.5dBi 1.3mm 1.6mm 2.4GHz 2W 3.2mm 50Ω Patch Antenna SMA 1206 Antennas ROHSJohanson DielectricsAntennasNX2016SA-32MHZ-STD-CZS-5
SMD2016-4PCrystal Oscillator SMD2016-4P Crystals ROHSNDKCrystals
README
README.mdA truly modular keyboard with rearrangeable keys, magnetic cases and Bluetooth!
Key Features • Video Demo • Connecting Keybits • PCB • Case • Credits • License
Video Demo
https://github.com/user-attachments/assets/19bec26d-6e01-4ee0-906e-7e69bace2f9c
Typing over USB:
https://github.com/user-attachments/assets/b6abd347-b68b-40f1-8e2d-c50744b8104e
Key Features
- Rearrangeable layout where every key is its own 1u PCB
- CH32V003 RISC-V microcontroller on every key
- STM32WB55RGV6 main board with Bluetooth and USB
- Pogo pins on all 4 sides of every key for power and I2C
- Magnetic cases to hold the modules together
- Key programming from the main board over pogo pins
- 2MB QSPI flash (W25Q16JV) to store the key firmware
- Battery charging with the BQ25895 and solder pads for a 1S LiPo
- Buck-Boost converter (TPS631000)
- RGB status LED
- USB-C with ESD protection
- Ceramic Bluetooth antenna
Connecting Keybits
Going around a keybit, the pogo pins on the N and W sides are 3.3V, SDA, GND, SCL and on the E and S sides they are SCL, GND, SDA, 3.3V. So two keybits only work together when an N or W side touches an E or S side, which gives every joint two ways a keybit can be turned and still work: the usual way, or a quarter turn so the other matching side faces its neighbour. The left and top of the keyword take an E or S side and the right takes an N or W side.
If every keybit is the same way round any shape works, like a square with the keyword in one corner. A keybit turned the wrong way gets 3.3V on its SCL and GND on its SDA, so it gets no power and nothing behind it shows up until it's turned.
Status LED:
- White idle
- White fast blinks a keybit joined, touching the keyword or further out
- Blue flashing the keybit on the programming pins
- Green blinks then green that keybit is flashed or already up to date
- Solid red flashing it gave up
- Red blinking a keybit on the keyword is turned the wrong way
- Red double blink a keybit somewhere has a neighbour turned the wrong way
Updating keybits: the keyword carries the keybit firmware. After updating the keyword, put every keybit on the programming pins once and wait for green. Keybits on different firmware versions don't talk to each other, so do all of them.
PCB
Designed in KiCad! There are two boards, the Keybit and the Keyword, and both are 1u (19.05mm x 19.05mm).
Keybit
A single key with a Cherry MX switch and a CH32V003. Every side has pogo pins for 3.3V, GND and I2C so it can connect to the keyword or to other keybits, and the pads on the corners are for programming.
Schematic:
Layout:
Keyword
The main board that the keybits connect to. It is split into two PCBs that stack on top of each other. The top one has the STM32WB55RGV6, the antenna and the flash, and the bottom one has the USB-C, the charger and the buck-boost converter. The 3 pogo pins on the top are for programming the keybits.
Schematic:
Layout:
3D View:
Case
Custom designed cases in Onshape, the STEP files are in the cad folder.
Credits
This project uses:
- KiCad
- OnShape for case design
- Blender for 3D renders
- STM32CubeMX
- Hack Club Forge
- JLCPCB for PCB fabrication and assembly
You may also like...
- Ember - A USB-C powered reflow hotplate with Bluetooth
- Cyberboard - A Raspberry Pi Pico-sized STM32 development board with Bluetooth
- Trace - A comprehensive PCB ruler with reference footprints
- Linea - An EMR tablet
License
MIT
notaroomba.dev · GitHub @NotARoomba ·
Parts
45| Qty | Value | Footprint | References |
|---|---|---|---|
| 9 | 100nF | Capacitor_SMD:C_0402_1005Metric | C3, C25, C26, C27, C29, C30, C32, C34, C35 |
| 7 | TestPoint | TestPoint:TestPoint_Pad_D1.5mm | TP1, TP2, TP3, TP6, TP7, TP8, TP9 |
| 4 | 10pF | Capacitor_SMD:C_0402_1005Metric | C1, C2, C6, C9 |
| 3 | 100R | Resistor_SMD:R_0402_1005Metric | R12, R13, R14 |
| 3 | 4.7uF | Capacitor_SMD:C_0603_1608Metric | C24, C28, C31 |
| 3 | YZ00615050R-08 | TestPoint:TestPoint_Pad_D2.0mm | CN1, CN5, CN6 |
| 3 | YZ00615050R-08 | lcsc:TESTPOINT-SMD_BD2.0-H5.0 | CN7, CN8, CN9 |
| 2 | 1uF | Capacitor_SMD:C_0402_1005Metric | C33, C36 |
| 2 | 4.7K | Resistor_SMD:R_0402_1005Metric | R8, R11 |
| 1 | 10nH | Inductor_SMD:L_0603_1608Metric | L2 |
| 1 | 10uH | Inductor_SMD:L_0603_1608Metric | L1 |
| 1 | 2450AT18A100E | lcsc:ANT-SMD_L3.2-W1.6 | AE1 |
| 1 | MLPF-WB-04D3 | lcsc:CSPG-6_L1.6-W1.0-P0.50-TL_MLPF-WB-04D3 | U12 |
| 1 | NX2012SA-32.768KHZ-STD-MUB-2 | lcsc:CRYSTAL-SMD_L2.0-W1.2 | U3 |
| 1 | NX2016SA-32MHZ-STD-CZS-5 | lcsc:OSC-SMD_4P-L2.0-W1.6-BL | X1 |
| 1 | STM32WB55RGVx | Package_DFN_QFN:QFN-68-1EP_8x8mm_P0.4mm_EP6.4x6.4mm | U11 |
| 1 | W25Q16JVUXIQ | lcsc:USON-8_L3.0-W2.0-P0.50-BL-EP | U10 |
| 1 | XL-1608RGBC | lcsc:LED-SMD_4P-L1.6-W0.8-BL | U14 |
More from notaroomba/keybytes
3- 4 layers41.3 × 19 mm

- 4 layers19.1 × 19 mm

- 2 layers19 × 19 mm

Similar boards
- 4 layers51 × 44 mm

- 2 layers35.2 × 17.9 mm

- 4 layers48 × 33 mm

Stm32-bt board
OdaiJ/stm32-bt-board
My attempt at following the Phil's Lab KiCad V7 tutorial on YouTube
60 parts1 - 2 layers16 × 47 mm

- 2 layers85.8 × 53.4 mm

- 4 layers74.5 × 70.3 mm

Nest mini v2-drop in pcb
iMike78/nest-mini-drop-in-pcb
Drop-in PCB replacement for the Google Nest Mini v2 with ESP32-S3, ESP32-P4 and optional ESP32-C6. Inspired by Onju Voice and Home Assistant Voice PE.
229 parts628CERN-OHL-S-2.0 - 4 layers150 × 50 mm

- 8 layers35 × 35 mm

OpenAIO
OpenDrone-hw/OpenAIO
Open-source AIO for 2-6S toothpick quads: flight controller, 4-in-1 AM32 ESC and ExpressLRS receiver, 25.5x25.5 mm.
343 parts19CERN-OHL-S-2.0
Questions
How big is the Keyword top PCB?
It measures 19.1 × 19 mm and has 4 copper layers, 1.58 mm thick.
What parts does the Keyword top use?
45 parts, built around the W25Q16JVUXIQ, MLPF-WB-04D3, NX2012SA-32.768KHZ-STD-MUB-2 and XL-1608RGBC. 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 Keyword top KiCad files?
From the notaroomba/keybytes repository on GitHub, at the commit this page was made from: the board is hardware/keyword/keyword_top.kicad_pcb and its schematic hardware/keybit/keybit.kicad_sch. PCBKit opens the board in the browser, with nothing to install.
Can I use the Keyword top design in my own project?
Its repository states no licence, so its author keeps all rights: ask notaroomba before reusing the design.
