Shoedler54
A 54-key, column-staggered, wireless split keyboard, inspired by ZSA Voyager and silakka54
Install / Use
/learn @shoedler/Shoedler54README
Kailh Choc v2 Ice Creams, Taihao THTs
shoedler54
A 54-key, column-staggered, ortholinear, wireless split keyboard, inspired by ZSA Voyager and silakka54. Designed for Mx-spacing (18mm keycaps) and 1350 Choc v1 or v2 switches.
Why?
This project came to life as I wanted to get up to speed with ergogen.xyz. The main goal of was to build a keyboard using solely the declarative ergogen paradigm - including making a case. As such, the only thing that was done outside of ergogen was to route the PCB and flip one case half in the slicer. That, as well as configuring the firmware (it'd be a nice extension to ergogen to generate the .dtsi file for ZMK automatically, but alas, that's not supported - yet).
Other things I've aimed for:
- Must be cheap, < $100 for a complete keyboard.
- Must be low profile, comparable to the ZSA Voyager.
Impressions
Carry case
With optional MCU + battery cover
Black version with Kailh Choc v2 Black Clouds, Repo-included 3D printed keycaps
Bill of materials
For one complete board - e.g. two halves - you'll need:
- 2 Promicro NRF52840
- 54 1N4148W SOD-123 Diodes
- 54 Kailh Low-profile 1350 Hotswap Sockets
- 54 Keyswitches, Choc v1 or v2
- 54 1u (18mm) Keycaps, Choc v1 or v2 stems (I suggest to print the provided ones (Mx-stem e.g. Choc v2), or - if you want legends, the Taihao THTs)
- 2 EVQPUL02K Switches ($\to$ board reset button)
- 2 SSSS811101 Switches ($\to$ power switch)
- 2 801540 3.7v, 380mAh Batteries
- or, 2 701535 3.7v, 350mAh
- or, 2 501646 3.7v, 380mAh (these are too long (46mm) and require to be soldered to the JST pads, which I do not recommend!)
- 2 JST PH 2.0 THT Sockets
For the case you'll need:
- Obviously, the printed case files. See section about printing below.
- 10x M2x5 (or 6)mm flathead screws
- 10x M2x3mm Heat set inserts
- Optionally, some painters tape.
Approximate cost
| What | Supplier | Comment | Price | | --- | --- | --- | --- | | 2 PCBs | JLCPCB | 5pcs. (min), including a hefty delivery fee to get to my location, $32 | ~$13 | | 2 MCUs | AliExpress | Promicro NRF52840 | ~$4 | | 54 Diodes | AliExpress | 1N4148W SOD-123 | ~$1 | | 54 Kailh Low 1350 Sockets | AliExpress | Hotswap | $4 | | 54 Keyswitches, Choc v1/v2 | AliExpress | pack of 70 | $25 | | 54 1u Keycaps, Choc v1/v2 | AliExpress | pack of 60 | $15 | | 2 Reset Switches | AliExpress | EVQPUL02K | ~$1 | | 2 Power Switches | AliExpress | SSSS811101 | $1 | | 2 Batteries | AliExpress | 801546, 380mAh | $8 | | 2 JST PH 2.0 Sockets | AliExpress | | ~$1 |
Prices as of january, 2026
Should result in ~$75 per completed keyboard. This does not include the case hardware and printed case files, but it's all you need to get a working keyboard. Also, the prices listed are adjusted to the amount of parts required.
[!NOTE] You'd want to buy some parts in "bulk", like a strip of 100 diodes. Since you likely also have a minimum order quantity for the PCBs, it might make sense to buy two more MCUs and maybe some old keyswitches and caps to get another full keyboard out of the rest of the parts and still have one PCB for soldering mistakes left ;)
As alluded to in the BOM, a 3d printable model for a custom cap that fits this build is provided - more on that in the build guide.
Build guide
PCB manufacturing
PCB related files are located in the
kicaddirectory.
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
stldirectory.
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
shoedler54_switchplate_right.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:shoedler54_switchplate_left.3mfandshoedler54_switchplate_right.3mf. That'll give you mirrored versions so you have the buildplate-finish texture on the same side for both halves. - 2x
shoedler54_case_left.stl, which is the case where the PCB gets mounted in - same story, use the provided 3mf files for that:shoedler54_case_left.3mfandshoedler54_case_right.3mf. That'll also give you mirrored versions for both halves with fuzzy skin. 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:
- 2x
shoedler54_case_cover_right.stl, which is a small cover for the MCU + battery. Useshoedler54_case_cover_left.3mfandshoedler54_case_cover_right.3mffor mirrored version. Same as with the case, if you're working with the stl directly you'll need to mirror this too. - 1x
shoedler54_carry_case.stl, which is a Go60-ish carry shell for the shoedler54. Useshoedler54_carry_case.3mffor a version with fuzzy skin. I did manage to print it without support, but there's a bit of luck involved.
Printing the keycaps
Keycap related files are located in the
scaddirectory.
The caps require no supports if you place them on one of the fillets - they do however require good bed adhesion. This, just like the case, was also printed on a Bambulab A1 mini with PLA Matte. Also, like the case, I've provided a 3mf file to print 26 regular + 1 indexing (F/J keys on QWERTY) keys. If you have to use the stl directly:
- Use 0.12mm layer height (including the initial layer).
- Use a brim - if your slicer doesn't automatically generate it, add it manually.
[!NOTE] The keycap was designed in OpenSCAD. It's fully parametrized, so it's easy to adapt to your liking.
Soldering
Since the PCB is reversible it can get confusing quick. All of the components except the ProMicro and the JST connector are soldered to the backside of each half.
- Solder diodes, 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).
- Direct-solder the ProMicro to the frontside of the PCB, along with the JST connector. (Pin Sockets are also an option for the mcu, if you want - it just makes the keyboard a bit thicker)
[!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/shoedler54/actions, select the latest run and scroll down to Artifacts - you'll be able to download the zip archive from there.
[!NOTE] There'll be two .uf2 files per half in the zip archive - a
de-chand anenversion. 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 theconfig/boards/shields/shoedler54directory.
For each half:
- Plug in the half to your device using a USB cable.
- Press the reset button twice within 500ms - on my versions of the ProMicro, their red LED breaths gently once you've entered bootloader mode.
- You'll see a
NICENANOappear 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_resetfirmware provided in the archive. See the ZMK troubleshooting guide on how to flash it.
Assembly
- Prep the cases by installing the heat set inserts.
- 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.
- Assemble both halves.
- Install the switches, caps and the battery. For the battery, I usually use a thin, clear double-sided tape. Done!
