
Desktop 50 Pin TopConn
BlueSCSI/BlueSCSI-v2
BlueSCSI v2/Ultra - an open source, open hardware, SCSI emulator using the Pi Pico PR2040 and Pico 2 RP2350

Programmable keyboard controller system with host software, configuration UI, and embedded firmware.
Keypad AIO is an open-source printed circuit board by acrankyturtle, from the acrankyturtle/Cardboard repository on GitHub. It is a 2-layer board of 119.3 × 153.9 mm with 108 parts on 73 nets, routed with 345 tracks and 8 vias.
Its parts include 31 switches, 30 diodes, 2 connectors and 1 IC. It belongs with the keyboards and input boards and the RP2040 boards of this library.
Programmable keyboard controller system with host software, configuration UI, and embedded firmware.
Cardboard is a three-tier system: a React frontend for configuration, a .NET backend for device management and API serving, and Rust firmware running on RP2040-based keyboard controllers. The backend discovers devices over USB serial, while the frontend communicates with the backend over HTTP (REST + SSE).
Frontend (React/Vite) → Backend (.NET/Kestrel) → Device (Rust/Embassy)thumbv6m-none-eabi targetelf2uf2-rs or probe-rs (for flashing firmware)dotnet run --project Cardboard.ControllerStarts the API server at http://localhost:7000. In Development mode, Swagger is available at /swagger.
cd react-frontend
npm install
npm run devStarts the Vite dev server at http://localhost:5173. The appsettings.Development.json in Cardboard.Controller/ points ReactHostUrl to :5173 so the backend knows where the frontend is running.
cd firmware
cargo build --release
cargo run --releaseFlashes the firmware to a connected RP2040 device. The default runner uses elf2uf2-rs (device must be in bootloader mode). To use probe-rs, edit .cargo/config.toml.
dotnet publish Cardboard.Controller -c ReleaseThis automatically builds the React frontend (npm install && npm run build) and bundles it into the output under wwwroot/.
installer\build-installer.ps1Requires Inno Setup 6.2+ installed.
cd firmware
cargo build --release| Project | Purpose |
|---|---|
Cardboard.Controller/ | ASP.NET Core host, DI composition root, entry point |
Cardboard.HttpApi/ | REST API endpoint definitions (Devices, Tags, Logs, InputDevices, Controller) |
Cardboard.Api/ | Shared API setup, such as JSON serialization configuration |
Cardboard.FrontendHost/ | SPA hosting, origin validation, route mounting |
Cardboard.Services/ | Business logic: tag association management, virtual key dispatch |
Cardboard.Repositories/ | Data access: device repository, association persistence |
Cardboard.Events/ | Cross-platform event abstractions |
Cardboard.Device/ | Device abstractions: commands, profiles, settings, binary serialization |
Cardboard.Serial/ | Serial port abstractions |
Cardboard.Windows/ | Windows: serial discovery (WMI), input monitoring, tray icon |
Cardboard.Metadata/ | Device metadata interfaces (icons, model info) |
Cardboard.Utilities/ | Shared utilities: AsyncDispatchSubject, Result types, file watcher |
Cardboard.Update/ | Firmware update orchestration |
Cardboard.Update.Api/ | Update server API client |
Cardboard.Update.Api.Abstractions/ | Shared types for update client/server |
Cardboard.UpdateServer/ | Firmware, metadata, and update distribution server (separate deployment) |
| Directory | Purpose |
|---|---|
firmware/ | CK1-30 firmware entry point and RP2040-specific code |
cardboard-lib/ | Platform-agnostic core: commands, profiles, state machine, HID, serial |
| Directory | Purpose |
|---|---|
react-frontend/ | Vite + React + Tailwind SPA for device configuration |
| Directory | Purpose |
|---|---|
DeviceTool/ | CLI tool for building and testing device profiles |
installer/ | Inno Setup installer scripts and build script |
Cardboard.Controller/appsettings.json — Production configuration:
Kestrel:Endpoints:Http:Url — Backend listen address (default http://127.0.0.1:7000)Paths:Associations — Association storage path (default %APPDATA%/Cardboard/associations.json)Paths:MetadataCache / IconCache — Cache directories under %APPDATA%/Cardboard/cache/Frontend:ReactHostUrl — URL where the frontend is served fromUpdate:Url / Update:Channel — Firmware update server and release channelappsettings.Development.json — Development overrides:
Frontend:ReactHostUrl to http://localhost:5173 for the Vite dev serverUpdate:Channel to preview| Language | Tool | Config |
|---|---|---|
| C# | CSharpier | .csharpierrc.json (tabs, 110 width) |
| TypeScript | Prettier + ESLint | .prettierrc, eslint.config.js |
| Rust | rustfmt | Default settings |
| Qty | Value | Footprint | References |
|---|---|---|---|
| 44 | MountingHole_2.2mm_M2_Pad_Via | MountingHole:MountingHole_2.2mm_M2_Pad_Via | , , , , , , , , , , , , , , , +28 |
| 30 | D | Diode_THT:D_DO-35_SOD27_P7.62mm_Horizontal | D1, D2, D10, D11, D12, D13, D14, D15, D16, D17, D18, D19, D20, D21, D22, D23 +14 |
| 29 | CherryMX | PCM_Switch_Keyboard_Hotswap_Kailh:SW_Hotswap_Kailh_MX_1.00u | SW1, SW2, SW10, SW11, SW12, SW13, SW14, SW15, SW16, SW17, SW18, SW19, SW20, SW21, SW22, SW23 +13 |
| 1 | CherryMX | PCM_Switch_Keyboard_Hotswap_Kailh:SW_Hotswap_Kailh_MX_2.00u_90deg | SW30 |
| 1 | Debug | Connector_JST:JST_XH_B5B-XH-A_1x05_P2.50mm_Vertical | J2 |
| 1 | Pico | MCU_RaspberryPi_and_Boards:RPi_Pico_SMD_TH | U1 |
| 1 | Power | Connector_JST:JST_XH_S2B-XH-A_1x02_P2.50mm_Horizontal | J1 |
| 1 | Stabilizer_Cherry_MX_2.00u | PCM_Mounting_Keyboard_Stabilizer:Stabilizer_Cherry_MX_2.00u | SW30_Stabilizer |
It measures 119.3 × 153.9 mm and has 2 copper layers, 1.6 mm thick.
108 parts. 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.
From the acrankyturtle/Cardboard repository on GitHub, at the commit this page was made from: the board is KiCad/Keypad AIO.kicad_pcb and its schematic KiCad/Keypad AIO.kicad_sch. PCBKit opens the board in the browser, with nothing to install.
Its repository states no licence, so its author keeps all rights: ask acrankyturtle before reusing the design.

BlueSCSI/BlueSCSI-v2
BlueSCSI v2/Ultra - an open source, open hardware, SCSI emulator using the Pi Pico PR2040 and Pico 2 RP2350


sadekbaroudi/bgkeeb
This is a reversible 100mm x 100mm pcb with support for mx or choc switches (no hotswap), per key led, rotary encoders, and exposes the SDA/SCL/GND/VCC lines in the form of the pimoroni trackball pins (meaning you can…


Nuclear-Squid/Quacken
Libre, ergonomic, polymorphic: a single PCB for many possible layouts.

aroum/cn_tester
c!n tester is a hardware and software system designed for testing ProMicro-like microcontrollers.

FizzyApple12/Waccon
A repository for all of the files in my design for an open-source touch ring controller.

sebastian-stumpf/narfkb
rp2040 powered split keyboard with rotary encoders and 6mm tactile buttons