

Modpad
A modular macropad
- Size
- 47.7 × 20.6 mm
- Copper layers
- 2
- Thickness
- 1.6 mm
- Parts
- 5
- Nets
- 23
- Pads
- 36
- Tracks, vias
- 49, 1
- Pours
- 1
- Routed
- Yes
- KiCad
- KiCad 10.0 (file 20260206)
- Created
- 13 Sep 2026
- Updated
- 21 Oct 2026
Overview
Modpad is an open-source printed circuit board by Choccy-vr, from the Choccy-vr/Modpad repository on GitHub. It is a 2-layer board of 47.7 × 20.6 mm with 5 parts on 23 nets, routed with 49 tracks and 1 via.
It is built around the RP2040-ZERO. Its parts include 2 resistors and 2 connectors. It belongs with the keyboards and input boards and the RP2040 boards of this library.
Main components
1README
README.mdModpad
An open-source, hot-swappable modular macro pad system with live browser-based key mapping.
Modpad combines hardware and software to create an adaptable modular macropad. Rather than locking users in a fixed, rigid layout, keyboard layout, or proprietary config software, Modpad allows users to magnetically hot-swap satellite modules into a main module and reconfigure key actions and layout all in real time.
Configurator URL: https://modpad.vercel.app/ Demo Video: https://youtu.be/VHo8qCPebk0
Features
- Dynamic Module Discovery: Automatically identifies and polls attached satellite modules using i2c
- Zero-Install Configurator: Uses web serial to read active layouts, update bindings, and provide real-time input status all with a website.
- Dynamic Remapping: Keymaps are refreshed directly in the microcontroller's RAM; no need to restart every time.
- Full HID & Consumer Control Support: Emulates standard keyboard keystrokes, modifiers, and media controls (Volume, Play/Pause, Brightness).
Modules
- Macro: The standard-sized macro pad. 6 completely remappable buttons.
- Knobs: 2 Rotary Encoders. Perfect for volume and brightness.
- More in the works
Protocol
The web configurator and the main module communicate over USB serial (115200 baud) using newline-delimited JSON. Each message is a single JSON object ending in \n.
| Message | Direction | Description | Example |
|---|---|---|---|
get_layout | Web -> Board | Requests the keymap of every module | {"cmd":"get_layout"} |
layout | Board -> Web | Returns each module's keymap as a list of actions | {"status":"layout","modules":{"Macro":[{"code":4,"mod":0,"consumer":false}, ...]}} |
get_modules | Web -> Board | Requests which modules are currently connected | {"cmd":"get_modules"} |
modules | Board -> Web | Returns the connection state of each module | {"status":"modules","modules":{"Macro":true,"Knobs":false}} |
set_key | Web -> Board | Rebinds one key or knob direction in RAM | {"cmd":"set_key","module":"Macro","index":2,"code":4,"modifiers":0,"consumer":false} |
ok / error | Board -> Web | Reply to set_key | {"status":"ok"} / {"status":"error","msg":"invalid_key_or_module"} |
press | Board -> Web | Sent whenever a button or knob is used | {"status":"press","module":{"name":"Macro","index":2,"type":"button"}} |
log | Board -> Web | Debug message, so the serial stream stays pure JSON | {"status":"log","msg":"..."} |
Fields
code: HID keyboard usage ID, or a consumer usage ID whenconsumeristrue(for example0xE9for Volume +).modifiers/mod: Modifier bitmask (0x01LCtrl,0x02LShift,0x04LAlt,0x08LGui,0x10RCtrl,0x20RShift,0x40RAlt,0x80RGui).index: Position in the module's keymap. It's the same index forset_keyandpress.
Pictures
Configurator
Main Module
Schematic
PCB
PCB 3D model
CAD
Macro Module
Schematic
PCB
PCB 3D model
CAD
Knobs Module
Schematic
PCB
PCB 3D model
CAD
Built
Parts
5| Qty | Value | Footprint | References |
|---|---|---|---|
| 2 | 1.8k | Resistor_SMD:R_0805_2012Metric | R1, R2 |
| 1 | Bottom modular port | Connector_PinHeader_2.54mm:PinHeader_1x05_P2.54mm_Vertical | J2 |
| 1 | Display Socket | KiCad-SSD1306-0.91-OLED-4pin-128x32.pretty-master:SSD1306-0.91-OLED-4pin-128x32 | J4 |
| 1 | RP2040-Zero | RP2040-Zero-Kicad-main:RP2040-Zero | RZ1 |
Questions
How big is the Modpad PCB?
It measures 47.7 × 20.6 mm and has 2 copper layers, 1.6 mm thick.
What parts does the Modpad use?
5 parts, built around the RP2040-ZERO. 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 Modpad KiCad files?
From the Choccy-vr/Modpad repository on GitHub, at the commit this page was made from: the board is PCB/Main Module/modpad.kicad_pcb and its schematic PCB/Main Module/modpad.kicad_sch. PCBKit opens the board in the browser, with nothing to install.
Can I use the Modpad design in my own project?
Its repository states no licence, so its author keeps all rights: ask Choccy-vr before reusing the design.
More from Choccy-vr/Modpad
1- 2 layers80 × 80 mm

Similar boards
- 2 layers132.3 × 94.9 mm

- 2 layers321 × 92.3 mm

- 2 layers255.9 × 99.3 mm

Zerosprey42
beekeeb/zerosprey42
Zerosprey42 Keyboard is a wired, beginner friendly, choc hotswap, MonoBlockSplit (Unibody), column-staggered, DIY mechanical keyboard.
96 parts140 - 2 layers146.3 × 69.5 mm

- 2 layers54 × 64 mm

DonConIOmini
ravinrabbid/DonCon2040
RP2040 based firmware and hardware for DIY Taiko no Tatsujin Drum Controllers
96 parts66MIT - 2 layers52 × 50 mm

RP2040-TestPatternGenerator VGA
nmur/RP2040-TestPatternGenerator
A simple test pattern generator running on the RP2040 microcontroller
12 parts64GPL-3.0 - 2 layers120 × 40 mm

Buinchiez40
ChrisChrisLoLo/bunchiez40
A pocket keyboard that makes use of mouse switches to achieve a miniscule size
90 parts56GPL-3.0 - 2 layers305.2 × 76.2 mm
