Modular Design
Each input module is independent. Mix and match buttons, joysticks, and D-pads.
Made how you play.
OpenArcade is a modular game controller designed for accessibility. Build your own layout from separate modules or snap them together—play from your lap, a table, or wherever works for you.
Standard controllers assume one-size-fits-all. OpenArcade doesn’t.
OpenArcade breaks a controller into pieces:
Wire the modules together or use them independently. Arrange them however’s comfortable for you—spread out on a table, held in different hands, mounted wherever works.
┌─────────────┐ BLE ┌──────────────┐ USB HID ┌──────────┐│ Child │ ◄──────────► │ Parent Hub │ ◄─────────────► │ Gaming ││ Module(s) │ (ESP32) │ (RPi Zero) │ │ Device │└─────────────┘ └──────────────┘ └──────────┘Modular Design
Each input module is independent. Mix and match buttons, joysticks, and D-pads.
Accessibility First
Position modules wherever is comfortable. No fixed layout required.
3D Configurator
Visual layout designer with real-time 3D preview.
Open Source
Full firmware, server, and hardware designs available.
| Layer | Technology |
|---|---|
| Child firmware | ESP-IDF, NimBLE, C |
| Parent hub | Python, asyncio, bleak |
| Config app | Three.js, React |
| PCB design | KiCad |
| CAD | Autodesk Inventor |
| 3D printing | Bambu Studio / PrusaSlicer |
openarcade/├── firmware/esp32/ # Child module firmware (NimBLE GATT server)├── server/ # Parent hub BLE client (Python + bleak)├── config_app/ # 3D controller layout designer└── docs/ # System design documentationReady to get started? Head to the Quick Start guide to set up your first OpenArcade controller.