Skip to the content
PCBKitNew board
2 layers139.9 × 121.4 mmEzy54, the printed circuit board in 3D

A 54-key, column-staggered, wireless split keyboard, inspired by ZSA Voyager and totem

Size
139.9 × 121.4 mm
Copper layers
2
Thickness
1.6 mm
Parts
64
Nets
60
Pads
538
Tracks, vias
1,001, 116
Pours
679
Routed
Yes
KiCad
KiCad 10.0 (file 20260206)
Created
27 Jul 2026
Updated
11 Oct 2026

Overview

Ezy54 is an open-source printed circuit board by shoedler, from the shoedler/ezy54 repository on GitHub, published under the GPL-3.0 licence. It is a 2-layer board of 139.9 × 121.4 mm with 64 parts on 60 nets, routed with 1,001 tracks and 116 vias.

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

README

README.md
keyboard-hero

Kailh Choc v1 pinks, Chosfox CFX

ezy54

A 54-key, column-staggered, ortholinear, wireless split keyboard, inspired by ZSA Voyager and totem. Designed for Choc-spacing (18mm horizontal, 17mm vertical) and 1350 Choc v1 or v2 switches.

Impressions

keyboard-left

Left

keyboard-bottom

Carry Case

keyboard-top

Bill of materials

For one complete board - e.g. two halves - you'll need:

  • 2 Promicro NRF52840
  • 2x 12-pin 0.1" (2.54mm) Pitch 3.5mm tall Pin headers, female. I just ordered 40-pin lengths and cut them to size. (optional, but highly recommended).
  • 54 1N4148W SOD-123 Diodes
  • 54 Kailh Low-profile 1350 Hotswap Sockets
  • 54 Keyswitches, Choc v1 or v2
  • 54 Choc-spaced Keycaps, Choc v1 or v2 stems
  • 2 EVQPUL02K Switches ($\to$ board reset button)
  • 2 SSSS811101 Switches ($\to$ power switch)
  • 2 701535 3.7v, 350mAh
  • 2 JST PH 2.0 THT Sockets

For the case you'll need:

  • Obviously, the printed case files. See section about printing below.
  • 8x M2x6mm flathead screws
  • 4x M2x14mm (or 12mm) flathead screws
  • 12x M2x3mm Heat set inserts
  • Optionally, some painters tape.

Build guide

PCB manufacturing

PCB related files are located in the kicad directory.

Assuming you have ordered the parts and don't want to route the PCB yourself, there's premade gerber archive located at kicad/gerber.zip which you can use. I've used JLCPCB, default settings (1.6mm two layer PCB) and with the black solder mask.

Printing the case

Case files are located in the stl directory.

I used a Babulab A1 mini and default slicer settings (Bambustudio). Everything was printed in their PLA Matte.

What do I need to print?

You'll need at least:

  • 2x ezy54_switchplate_left.stl, which is the plate that sits on the PCB and where the keyswitches are mounted into - I recommend using the provided 3mf files for that: ezy54_switchplate_left.3mf and ezy54_switchplate_right.3mf. That'll give you mirrored versions so you have the buildplate-finish texture on the same side for both halves.
  • 2x ezy54_case_left.stl, which is the case where the PCB gets mounted in - same story, use the provided 3mf files for that: ezy54_case_left.3mf and ezy54_case_right.3mf. That'll also give you mirrored versions for both halves. Theoretically, you don't need the case, but I strongly recommend it to provide a little bit of protection for the PCB. If you're working directly with the stl, then you'll have to mirror it. I suggest using the fuzzy skin setting (in Bambustudio: Others > Special mode > Fuzzy skin, use "Contour").

Optional:

  • 1x ezy54_carry_case.stl, which is a Go60-ish carry shell for the ezy54. Use ezy54_carry_case.3mf for a basic. I did manage to print it without support, but there's a bit of luck involved - the 3mf file uses supports.

Soldering

Since the PCB is reversible it can get confusing quick. All of the components except the ProMicro headers and the JST Battery connector are soldered to the backside of each half.

  1. Solder diodes, kailh hotswap sockets, reset- and powerswitches on the backside of each half. This is also the side were you bridge all of the solder-jumpers with solder (8 for the Mcu, 2 for the Battery connector).
  2. If you have ordered the female 3.5mm tall pin headers, solder them to the front. If not, direct solder the ProMicro to the frontside of the PCB. Also solder on the JST connector to the frontside.
  3. Prep the ProMicro. They are usually delivered with male pin headers. You need to solder them flush in order to ensure the MCU will fit into the case. Here's the process I have used: build-steps
  • left image: Push the pins, until they are almost flush with the plastic - a little (0.2mm) protrusion is ok. Ensure they are at the same depth.
  • middle image: Insert the pins, MCU sits on the plastic, they act as the spacer for the insertion depth into the female header on the PCB. Tack-solder the outermost pins from the top (as shown in image).
  • right image: Cut the pins flush with the MCU, then solder from the top. Do not use too much solder - we want to prevent the solder seeping through to the underside and forming a teardrop. Then, remove the plastic carefully - I have used a pair of flush cutters to gently lift it.
  1. Mount the MCU to the header. Battery can wait for now.

[!CAUTION] Before you continue it's a good idea to verify that there's no short between the JSTs +/- terminal as well as the ProMicros VCC and GND.

I suggest to load the firmware next and check that everything works before assembly.

Loading the ZMK firmware

Firmware related files consist of: config/, boards/, zephyr/ directories, as well as the build.yml file and the GitHub Actions workflow in .github/workflows.build.yml

Get the latest firmware from https://github.com/shoelder/ezy54/actions, select the latest run and scroll down to Artifacts - you'll be able to download the zip archive from there. If the last runs artifact is expired, just fork the repo and trigger a build.

[!NOTE] There'll be two .uf2 files per half in the zip archive - a de-ch and an en version. This refers to the keycode locale that's been used. I myself require a swiss locale, but, to make the default firmware more useful for more people, I've added an english version too. You can check the keymaps out in the config/boards/shields/ezy54 directory.

For each half:

  1. Plug in the half to your device using a USB cable.
  2. Press the reset button twice within 500ms - on my versions of the ProMicro, their red LED breaths gently once you've entered bootloader mode.
  3. You'll see a NICENANO appear in your device tree. Simply drag and drop the correct firmware for the half your working on onto the mcu - it should eject itself automatically once the firmware is flashed.

[!NOTE] If you run into trouble, there's also a settings_reset firmware provided in the archive. See the ZMK troubleshooting guide on how to flash it.

Assembly

  1. Mount the battery to the frontside - I suggest a thin double-sided tape to keep it in place for easier assembly. It goes just below the MCU.
  2. Mount the switchplate to the frontside - ensure it sits flush. The MCUs USB-C should be perfectly aligned to its cutout in the print.
  3. Prep the lower cases halves by installing the heat set inserts.
  4. Optional, but highly recommended for better sound: Cover the bottom sides of the PCBs with tape (I used masking tape). Apply the first layer quite firmly, such that it follows the contours of the hotswap sockets. You'll want to make sure that you extend the tape over the edges of the PCB. Apply at least 3 layers. In my experience anything beyond 5 layers of standard painters tape yields no further improvements. Also, it gets thick quick. Trace the PCB outline to the tape with a pen. Also, trace the screw holes. Remove the tape, and cut out the shape - make sure to inset the cut about 2-3mm, so the tape is not visible when everything is assembled. For the screw holes, cut a ~5x5mm square. Apply the tape. (There is a more detailed guile to the exact same process on the shoedler54 README: https://github.com/shoedler/shoedler54)
  5. Assemble both halves and mount the screws.
  6. Install the switches. Done!

Modifying the ergogen config

The whole point of using ergogen, is to easily adapt the PCB to your liking. So give it a go! Modifying the config will force you to reroute the PCB again. Though fear not - using Freerouting this literally takes a minute to do (including adding freerouting to KiCad), provided you have KiCad >=8 and JRE >= 17 for Freerouting already installed.

[!NOTE] To add the Freerouting KiCad integration, just follow this official guide.

[!TIP] There is a local toolchain in tools/ that builds the config without ergogen.xyz and then checks it: case clearances, a pre-routing DRC on the generated board, STL/cross-section/point-probe inspection of the printed parts, and layered drawings. Start with cd tools && npm run setup, then node tools/build.ts and node tools/drc-lite.ts out/pcbs/ezy54.kicad_pcb. Its README also documents the footprint rotation convention that ergogen + KiCad make easy to get backwards.

  1. Paste config.yml located in /ergogen into ergogen.xyz and download the ezy54.kicad_pcb file.
  2. Copy (and overwrite) ezy54.kicad_pcb to the kicad directory of this repository (this part is only required if you intend to keep the source of this repository up to date - e.g. if you forked this)
  3. Open the PCB in KiCad (Standalone PCB editor suffices). Press B to fill the GND pours - zones come out of ergogen empty until KiCad calculates them once - then click on Tools > External Plugins > Freerouting
  4. Let it rip. In my experience, the defaults of Freerouting suffice.

[!IMPORTANT] Back in KiCad, run the DRC in Inspect > Design Rule Checker. I usually right click > Ignore all 'Footprint not found in libraries' violations to ignore missing ceoloide footprint warnings. This might leave you with some warnings which you need to manually resolve. For example, i usually get "Track has unconnected end", which is easily resolved by deleting the stub.

  1. File > Plot... > Generate Drill Files, name the folder "gerber", then press Generate and close that popup. Press Plot back in the plot dialog. Done!

References

Parts

64
QtyValueFootprintReferences
27ceoloide:switch_choc_v1_v2S1, S2, S10, S11, S12, S13, S14, S15, S16, S17, S18, S19, S20, S21, S22, S23 +11
27ceoloide:diode_tht_sod123D1, D2, D10, D11, D12, D13, D14, D15, D16, D17, D18, D19, D20, D21, D22, D23 +11
6ceoloide:mounting_hole_npthMH1, MH2, MH3, MH4, MH5, MH6
1ceoloide:reset_switch_smd_sideRST1
1ceoloide:power_switch_smd_sidePWR1
1ceoloide:mcu_supermini_nrf52840MCU1
1ceoloide:battery_connector_jst_ph_2JST1

Questions

How big is the Ezy54 PCB?

It measures 139.9 × 121.4 mm and has 2 copper layers, 1.6 mm thick.

What parts does the Ezy54 use?

64 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 Ezy54 KiCad files?

From the shoedler/ezy54 repository on GitHub, at the commit this page was made from: the board is kicad/ezy54.kicad_pcb. PCBKit opens the board in the browser, with nothing to install.

Can I use the Ezy54 design in my own project?

Its repository publishes it under the GPL-3.0 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 layers76.5 × 120 mmNumpad project, the printed circuit board in 3D

    Numpad project

    hackclub/OnBoard

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

    64 parts915
  • 2 layers160 × 99.1 mmFlat hierarchy, the printed circuit board in 3D

    Flat hierarchy

    drandyhaas/KiCadRoutingTools

    A set of Python/Rust tools to aid routing in KiCad

    64 parts744MIT
  • 2 layers49 × 53.2 mmDB25 External, the printed circuit board in 3D

    DB25 External

    BlueSCSI/BlueSCSI-v2

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

    64 parts459GPL-3.0
  • 2 layers90 × 71 mmTd hv, the printed circuit board in 3D

    Td hv

    tdaede/td-crt

    tubes

    64 parts373
  • 2 layers28 × 30 mmOtterIron Devkit, the printed circuit board in 3D

    OtterIron Devkit

    Jana-Marie/Otter-Iron-PRO

    USB-PD soldering station for JBC C245 handles.

    64 parts321
  • 2 layers192.9 × 59.5 mmAlpha pro micro, the printed circuit board in 3D

    Alpha pro micro

    PyrooL/Alpha

    A 28-key semi-ortholinear mechanical keyboard designed by PyroL

    64 parts298MIT
  • 2 layers128 × 88 mmFireball revD, the printed circuit board in 3D

    Fireball revD

    ugcs/ddc

    Drone Show Software is software designed for drone shows, allowing flight path planning as well as control of dozens of drones simultaneously in a synchronized manner.

    64 parts223
  • 2 layers78 × 81 mmEncoder, the printed circuit board in 3D

    Encoder

    eddyem/stm32samples

    Code samples and ready projects based on bare-metal STM32

    64 parts208