Skip to the content
PCBKitNew board
2 layers117.1 × 83.9 mmEidolon right, the printed circuit board in 3D

Eidolon right

jonnyirwin/eidolon

A small column-staggered wireless split keyboard. 30 keys (5×3 + 2 thumb per half), Kailh Choc v1 switches, Seeed XIAO nRF52840 BLE, Totem-style clamshell case. Both halves are independent wireless units — no TRRS cable.

Size
117.1 × 83.9 mm
Copper layers
2
Thickness
1.6 mm
Parts
37
Nets
32
Pads
164
Tracks, vias
179, 20
Pours
3
Routed
Yes
KiCad
KiCad 9.0 (file 20241229)
Created
28 May 2026
Updated
28 Sep 2026

Overview

Eidolon right is an open-source printed circuit board by jonnyirwin, from the jonnyirwin/eidolon repository on GitHub, published under the MIT licence. It is a 2-layer board of 117.1 × 83.9 mm with 37 parts on 32 nets, routed with 179 tracks and 20 vias.

Its parts include 16 switches and 15 diodes. It belongs with the keyboards and input boards of this library.

README

README.md

⚠️ Work in progress — do not build this yet. The PCB, case, and firmware have not been validated against a physical build. Things will change, things may be wrong. Watch the commits if you want to follow along, but don't order boards from these files yet.

Eidolon

eidolon /aɪˈdoʊlɒn/ noun An idealized image; a phantom or spectre of a person or thing. — from Greek εἴδωλον (image, idol, phantom)


A small column-staggered wireless split keyboard. 30 keys (5×3 + 2 thumb per half), Kailh Choc v1 switches, Seeed XIAO nRF52840 BLE, Totem-style clamshell case. Both halves are independent wireless units — no TRRS cable.

Built on the shoulders of

KeyboardRole in this project
Phantom by davidphilipbarrPCB layout source — key positions reverse-engineered from lephantom.kicad_pcb; board outline traced from the original Edge.Cuts. Eidolon matches the original key centres to < 0.15 mm.
TOTEM by GEIGEIGEISTCase design reference — switch hole dimensions, keycap recess depth, clamshell geometry, and hot-swap socket pocket profiles from the Totem STEP file; the XIAO BLE SMD footprint (pcb/footprints/xiao_ble.js) is adapted from Totem's xiao-ble-smd-cutout.
Rufous by jcmkk3Diode placement — diodes sit in each Choc south LED cutout following the Rufous approach. (pcb/footprints/xiao_pogo.js, a pogo-pin XIAO mount adapted from Rufous, is kept as an unused alternative to the SMD footprint.)

PCB

Left halfRight half
Left PCBRight PCB

Case

Top — leftTop — right
Case top leftCase top right
Bottom — leftBottom — right
Case bottom leftCase bottom right

Repository layout

text
pcb/              Ergogen source + routed KiCad files + gerbers
  eidolon.yaml      Ergogen config (geometry + nets)
  footprints/       custom Ergogen footprints
  build.js          local build wrapper (injects footprints)
  eidolon_left.kicad_pcb   routed left half
  eidolon_right.kicad_pcb  routed right half
  eidolon_left_gerbers.zip
  eidolon_right_gerbers.zip

case/             OpenSCAD case design
  eidolon_case.scad        top shell (both halves via -D right=true)
  eidolon_case_bottom.scad bottom shell
  stl/                     pre-generated STL files

PCB build (Ergogen)

Custom footprints live in pcb/footprints/, so use the wrapper rather than the ergogen CLI directly:

sh
cd pcb
npm install       # once
node build.js     # -> pcb/output/

Outputs land in pcb/output/:

  • outlines/board_left.svg|dxf, board_right.svg|dxf — board perimeters
  • pcbs/eidolon_left.kicad_pcb, eidolon_right.kicad_pcb — both halves, footprints + nets placed (no routes)

On ergogen.xyz, paste each file in pcb/footprints/ into the web app's Footprints section under its filename (e.g. reset_button); eidolon.yaml then works as-is.

Layout

text
 pinky  ring  middle index inner
   ·    top    top   top   ·       (pinky has no top row; inner has no bottom)
 home  home   home  home  upper
 bot   bot    bot   bot   lower
                  thumbL thumbR    (-8°)

Pinky splayed 5°, ring splayed 3°; other columns straight. Choc spacing: 18 mm columns, 17 mm rows.

Wiring — COL2ROW diode matrix (XIAO BLE)

Each half is a fully independent wireless unit (own XIAO + battery, no TRRS), so the two halves carry independent pin maps. The columns are identical; the rows are assigned per half to keep each MCU's fan-out clean.

MatrixNetXIAO pin (left)XIAO pin (right)
pinky colC0D0D0
ring colC1D1D1
middle colC2D2D2
index colC3D3D3
inner colC4D4D4
top rowR0D5D10
home rowR1D6D9
bottom rowR2D8D8
thumb rowR3D7D7

On the right half all four rows sit on the matrix-facing D7–D10 edge (D5/D6 spare), so only the five columns cross the MCU — the physical minimum. The two halves therefore need different MATRIX_ROW_PINS in firmware.

Power: battery + → RAW_BATT → slide switch → BATT → XIAO B+; battery − → GND.

Verify before fab: the XIAO pad→pin mapping lives in pcb/footprints/xiao_ble.js (surface-mount, mounted face-up over the PCB). It was corrected and checked against the XIAO datasheet and the TOTEM xiao-ble-smd-cutout footprint — re-confirm before ordering.

Mirrored halves, not reversible

The original Phantom is a single reversible PCB flipped for both hands. Eidolon generates a true left and right board. Because each half is an independent wireless unit with its own firmware, the halves do not share a pin map — the right half's MATRIX_ROW_PINS differ from the left's (see the per-half table above).


Case (OpenSCAD)

case/eidolon_case.scad is the top shell for both halves. The right half is the left mirrored (-D right=true).

sh
openscad -o case/stl/eidolon_case_top_left.stl  case/eidolon_case.scad
openscad -D right=true -o case/stl/eidolon_case_top_right.stl  case/eidolon_case.scad
openscad -o case/stl/eidolon_case_bottom_left.stl  case/eidolon_case_bottom.scad
openscad -D right=true -o case/stl/eidolon_case_bottom_right.stl  case/eidolon_case_bottom.scad

Pre-generated STLs are in case/stl/.

Top shell features: keycap recess field, stepped 13.8 mm Choc plate holes, XIAO pocket with acrylic window rebate + USB-C cutout, battery pocket, power-switch wall slot, M2 bolt pockets.

Bottom shell

case/eidolon_case_bottom.scad nests inside the top from below. Geometry:

  • z ∈ [−2.0, 0]: exterior plate (floor_t = 2.0 mm) matching the top case outer footprint
  • z ∈ [0, 2.1]: nesting lip; PCB rests on the lip top at z = 2.1
  • Per-switch hot-swap socket pockets cut into the lip — traced from the Kailh PG1350 socket silkscreen (plastic body plus both SMD pad rectangles), inflated by socket_clr = 0.6 mm
  • Choc plastic-pin, power-switch-leg, and XIAO underside-joint clearance pockets in the lip
  • M2 hex nut pockets (4.0 mm AF × 1.8 mm) at the four bolt positions
  • Four Ø8.4 × 1.8 mm bumpon pockets in the underside (≥7.5 mm clear of the nut pockets)

Mounting hardware

PartSpecCount
Socket cap boltM2 × 12 mm4 per half
Hex nutM2 (4.0 mm AF)4 per half

MCU acrylic window

Cut a piece of 1.5 mm clear acrylic to drop into the XIAO rebate:

DimensionSize
Width20.3 mm
Length22.8 mm
Thickness1.5 mm

Angle the acrylic, slip the +y edge under the square lip (lip A), press the −y edge down past the chamfered lip (lip B). Remove the bottom shell to access the MCU.


Firmware

ZMK firmware for the Eidolon is available at jonnyirwin/zmk-keyboard-eidolon.


Deviations from the original Phantom

  • Mirrored L/R instead of a single reversible board.
  • BLE only — XIAO nRF52840, COL2ROW diode matrix, battery + slide switch; Pro Micro and TRRS removed.
  • Diodes top-side, in each Choc south LED gap — hotswap sockets are the only underside component.
  • Trackball omitted.
  • Board outline is the original Edge.Cuts polygon with 1.5 mm corner fillets.

Parts

37
QtyValueFootprintReferences
15diode_sod123D1, D2, D3, D4, D5, D6, D7, D8, D9, D10, D11, D12, D13, D14, D15
15PG1350S1, S2, S3, S4, S5, S6, S7, S8, S9, S10, S11, S12, S13, S14, S15
4mounting_hole_m2MH1, MH2, MH3, MH4
1xiao_bleMCU1
1battery_padsBT1
1power_switch_spdtSW1

Questions

How big is the Eidolon right PCB?

It measures 117.1 × 83.9 mm and has 2 copper layers, 1.6 mm thick.

What parts does the Eidolon right use?

37 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.

Where can I download the Eidolon right KiCad files?

From the jonnyirwin/eidolon repository on GitHub, at the commit this page was made from: the board is pcb/eidolon_right.kicad_pcb. PCBKit opens the board in the browser, with nothing to install.

Can I use the Eidolon right design in my own project?

Its repository publishes it under the MIT licence: you may reuse it on that licence's terms (keep the author's notice, and for a copyleft licence share your changes alike).

Similar boards

  • 2 layers40 × 34 mmDD HIP9011, the printed circuit board in 3D

    DD HIP9011

    rusefi/rusefi

    rusefi - GPL internal combustion engine control unit

    37 parts1.2k
  • 2 layers53.9 × 23.2 mmAnalog, the printed circuit board in 3D

    Analog

    hoglet67/RGBtoHDMI

    Bare-metal Raspberry Pi project that provides pixel-perfect sampling of Retro Computer RGB/YUV video and conversion to HDMI

    37 parts1kGPL-3.0
  • 2 layers52 × 51.8 mmEsp32-homeassistant rf bridge, the printed circuit board in 3D

    Esp32-homeassistant rf bridge

    hackclub/OnBoard

    💡 Join 1,000 teenagers and make your first PCB with a $100 grant!

    37 parts915
  • 2 layers87.8 × 59.8 mmFreeDeck SMD 2020-02, the printed circuit board in 3D

    FreeDeck SMD 2020-02

    FreeYourStream/freedeck-hardware

    all the stuff you need to build your own FreeDeck

    37 parts772
  • 2 layers65 × 28 mmBMS Cell Module, the printed circuit board in 3D

    BMS Cell Module

    stuartpittaway/diyBMS

    Do it yourself battery management system for Lithium ion battery packs/cells

    37 parts676GPL-3.0
  • 2 layers48 × 32 mmFlatSat, the printed circuit board in 3D

    FlatSat

    Pwnsat/FlatSat

    Flatsat v1.0 is a hardware based platform for aerospace cybersecurity research

    37 parts575GPL-2.0
  • 2 layers38.1 × 153.7 mmDEFOG PANEL, the printed circuit board in 3D

    DEFOG PANEL

    jrsteensen/OpenHornet

    OpenHornet 1:1 F/A-18C Simulator Repository

    37 parts431
  • 2 layers47.8 × 27.4 mmVsf stm32h7b0, the printed circuit board in 3D

    Vsf stm32h7b0

    vsfteam/vsf

    Versaloon Software Framework -- a tiny preemptive-capable event-driven incremental software framework for embedded systems

    37 parts341Apache-2.0