

Hmkb65alps
HMKB 65 Alps Compatible PCB and Plate
- Size
- 305 × 103.4 mm
- Copper layers
- 2
- Thickness
- 1.6 mm
- Parts
- 157
- Nets
- 110
- Pads
- 738
- Tracks, vias
- 689, 843
- Pours
- 1
- Routed
- Yes
- KiCad
- KiCad 9.0 (file 20241229)
- Created
- 18 May 2024
- Updated
- 6 Sep 2025
Overview
Hmkb65alps is an open-source printed circuit board by burbschat, from the burbschat/hmkb65alps repository on GitHub. It is a 2-layer board of 305 × 103.4 mm with 157 parts on 110 nets, routed with 689 tracks and 843 vias.
It is built around the ATMEGA32U4-AU and PRTR5V0U2X. Its parts include 69 diodes, 69 switches, 8 capacitors, 6 resistors and 2 connectors. It belongs with the AVR (ATmega, ATtiny) boards of this library.
Main components
2ATMEGA32U4-AU
QFP-44(10x10)-40℃~+85℃ 10bit 16MHz 1KB 2.5KB 2.7V~5.5V 26 32KB 8 Bit AVR Built-in FLASH QFP-44(10x10) Microcontrollers (MCU/MPU/SOC) ROHSMicrochip TechnologyMicrocontrollers (MCU/MPU/SOC)PRTR5V0U2X
SOT-143-55℃~+125℃ 0.3pF、0.8pF 100W 10V、15V 5V 6.5V 6A 80nA ESD IEC 61000-4-2、IEC 61000-4-5、IEC 61000-4-4 Three channels Unidirectional SOT-143 ESD and Surge Protection (TVS/ESD) ROHSTECH PUBLICESD And Surge Protection (TVS/ESD)
README
README.mdHMKB 65 Alps Compatible PCB and Plate
Case
- HMKB V1 65 AAA by Heavymetal Keyboards
Layout
Raw data for keyboard-layout-editor.com:
["~\n`","!\n1","@\n2","#\n3","$\n4","%\n5","^\n6","&\n7","*\n8","(\n9",")\n0","_\n-","+\n=",{w:2},"Backspace",{a:7},""],
[{a:4,w:1.5},"Tab","Q","W","E","R","T","Y","U","I","O","P","{\n[","}\n]",{w:1.5},"|\n\\",{a:7},""],
[{a:4,w:1.75},"Caps Lock","A","S","D","F","G","H","J","K","L",":\n;","\"\n'",{w:2.25},"Enter",{a:7},""],
[{a:4,w:2.25},"Shift","Z","X","C","V","B","N","M","<\n,",">\n.","?\n/",{w:1.75},"Shift",{a:7},"",""],
[{a:4,w:1.25},"Ctrl",{w:1.25},"Win",{w:1.25},"Alt",{a:7,w:6.25},"",{a:4},"Alt","Fn","Ctrl",{a:7},"","",""] Matrix position annotated version (also without label position information as this messes with scripts using the annotated version down the line):
["0,0","0,1","0,2","0,3","0,4","0,5","0,6","0,7","0,8","0,9","0,10","0,11","0,12",{w:2},"0,13","0,14"],
[{w:1.5},"1,0","1,1","1,2","1,3","1,4","1,5","1,6","1,7","1,8","1,9","1,10","1,11","1,12",{w:1.5},"1,13","1,14"],
[{w:1.75},"2,0","2,1","2,2","2,3","2,4","2,5","2,6","2,7","2,8","2,9","2,10","2,11",{w:2.25},"2,13","2,14"],
[{w:2.25},"3,0","3,1","3,2","3,3","3,4","3,5","3,6","3,7","3,8","3,9","3,10",{w:1.75},"3,12","3,13","3,14"],
[{w:1.25},"4,0",{w:1.25},"4,1",{w:1.25},"4,2",{w:6.25},"4,5","4,9","4,10","4,11","4,12","4,13","4,14"]Find in proper json format in hmkb65alps.json.
The corresponding annotated (i.e. which key goes where in the matrix) in
kle-serial format can be found in
hmkb65alps-annotated_kle-serial.json (converted using
this).
PCB
Footprints etc.
Included as submodules in lib/.
- ai03-2725's MX_V2 for switch footprints
- ai03-2725's Type-C.pretty for USB-C port footprints
- ai03-2725's random-keyboard-parts.pretty for USB-C port footprints The MX_V2 (which also contain ALPS footprints) are fine, the other ones are not quite to my taste.
3D Models for Key Switches
Found a ALPS switch model here.
Very kindly there is an scad file provided (and not just a mesh .stl or similar)!
Components
USB-C Connector
All of the options here are selected to be hand solderable.
Korean Hroparts Elec TYPE-C-31-M-12 Seems to be a popular choice, probably because it's dirt cheap (<20cents).
However, it's not available on DigiKey, Mouser or RS.
GCT offers a series of hand solderable connectors.
Compare them here.
Note that USB4085 is entirely through hole, which however at the same time makes accessing the pins challenging.
For this PCB the accessible D+/D- pins were in the wrong order, which is why a different connector was used.
USB4105 and USB4215 seem to be essentially the same, with USB4215 having some locating plastic pegs on the bottom.
The latter however seems not to be available at the usual vendors, so here USB4105 is choosen as an slighly less cheap
alternative to the dirt cheep HRO mentioned above.
GCT also has very well structured documentation and links to footprints and 3d models on their website.
kbplacer
Used this Kicad Plugin for helping
with schematic/layout generation.
There is also a script layout2schematic.py in the repository which was used
to generate the key matrix part of the schematic.
Technically one can also access this when the kbplacer python package is
installed with python -m layout2schematic, but in this case the dependencies
will not be automatically synchronized. The best way probably is to use a
hatch virtual environment. Clone the repo and make sure hatch is installed.
The pyproject.toml defines a hatch virtual environment for the tools. To
create it run hatch env create tools. To launch a shell with the environment
activated use hatch -e tools shell. One may also just run this right away as
this will create the environment if not present.
Btw. for some reason from the hatch environment pythom -m layout2schematic
does not seem to work, so run the script from the tools directory directly.
See also the the readme file for the tools for more information.
Note that the input json file is not directly what is obtained from the keyboard layout editor!
Use https://adamws.github.io/kle-serial
or keyboard-tools.xyz/kle-converter
(as the main README file notes).
In any case, the layout file must be one where the keys in the keyboard layout
editor are annotated using labels as row,col to designate where they will be
in the matrix.
Find annotated layout in hmkb65alps-annotated.json
TLDR:
cd kicad-kbplacer
hatch run tools:layout2schematic -in ../hmkb65alps-annotated-converted.json -out ../pcb/hmkb65alps-matrix.kicad_schCreates the base matrix schematic which I then manually edited to fit my
preferences.
I load this as a hierarchical sheet into the main kicad project.
As I prefer to not use global labels for the rows/columns, I also manually
replace the global labels with hierarchical labels.
Bad idea as this breaks the net resolving with kbplacer it seems :(.
So global labels it is (I also tried if local labels work, but they dont).
TLDR: Use the matrix as generated by layout2schematic.py, no touchy.
Generating the layout
If you do not do anything funny to the generated key matrix schematic (like trying to use hierarchical labels), assigning footprints to all parts, then importing to the pcb layout and running the plugin should just work.
I first assign 1U switches to all of the switches, have them placed and then adjust the longer ones (way easier than trying to figure out which switch was where in the matrix.)
When running the plugin point Keyboard layout file to
../hmkb65alps-annotated-converted.json (or wherever the layout in the correct
format is).
With the MX-Alps hybrid footprints the diode position must be adjusted, as
otherwise it is too close to the holes in the PCB which is not good to begin
with and also will cause the automatic routing to fail.
In Switch diodes setting set Position to Custom. I Chose Offset X =
7.5, Offset Y = -6.5, Orientation = -90 and Side = back.
Probably better use the Relative mode. This will result in the layout for the first switch being replicated to the others. For some reason this however does not seem to work for open ended tracks.
Ideas
- Consider using chips containing multiple diodes in the same package to avoid soldering pain
- Did not end up prusuing this
- Use Alps/MX hybrid footprints
- Implemented!
- Consider Alps/MX hybrid plate
- Can work but probably a bad idea as contact area of switches to plate will be very small
- Mill-Max Sockets for hot-swapping (should also work with hybrid footprints as seen in the pictures here).
- Tried this one. The pins on Alps switches do not play nice with such sockets (they are wider than MX ones requiring quite large sockets)
Plate
Design
ai03 Plate Generator seems to be a well made modern solution (repository here)! Probably prefer using this over what used to be the standard tool(?) to get plate hole locations (select no outline, as the correct one is not available there), then manually add the correct outline from the MX plate files distributed on the HMKB discord.
Holdup, on closer inspection swillkb seems to provide much more features!
In fact one can adjust the stabilizers for specific keys using special attributes in the layout definition.
This one for example overrides the spacebar stabilizer to be of Cherry + Costar type by using {a:7,w:6.25, _s:1}.
["~\n`","!\n1","@\n2","#\n3","$\n4","%\n5","^\n6","&\n7","*\n8","(\n9",")\n0","_\n-","+\n=",{w:2},"Backspace",{a:7},""],
[{a:4,w:1.5},"Tab","Q","W","E","R","T","Y","U","I","O","P","{\n[","}\n]",{w:1.5},"|\n\\",{a:7},""],
[{a:4,w:1.75},"Caps Lock","A","S","D","F","G","H","J","K","L",":\n;","\"\n'",{w:2.25},"Enter",{a:7},""],
[{a:4,w:2.25},"Shift","Z","X","C","V","B","N","M","<\n,",">\n.","?\n/",{w:1.75},"Shift",{a:7},"",""],
[{a:4,w:1.25},"Ctrl",{w:1.25},"Win",{w:1.25},"Alt",{a:7,w:6.25, _s:1},"",{a:4},"Alt","Fn","Ctrl",{a:7},"","",""]This is exactly what I need for the Tai-Hao Keycaps which have cherry type stabilizers on only the spacebar.
Seems like one can also further specify the outline.
If possible, defining the whole plate programatically would be cool.
Actually, we could get away without using the web interface alltogether by using KAD,
the library powering builder.swillkb.com.
Holdup, but swillkb does not do rounded corners as I might need for a PCB plate.
So I forked ai03 Plate Generator (aka yet-another-keyboard-builder) and
modified the code
with my essentially non existent javascript knowledge, which actually worked!
It's probably not pretty or good practice though, but good enough for what I need for now.
Here is the layout that should fit for stabiliziers for the Tai-Hao Alps keycaps:
["~\n`","!\n1","@\n2","#\n3","$\n4","%\n5","^\n6","&\n7","*\n8","(\n9",")\n0","_\n-","+\n=",{w:2},"Backspace",{a:7},""],
[{a:4,w:1.5},"Tab","Q","W","E","R","T","Y","U","I","O","P","{\n[","}\n]",{w:1.5},"|\n\\",{a:7},""],
[{a:4,w:1.75},"Caps Lock","A","S","D","F","G","H","J","K","L",":\n;","\"\n'",{w:2.25},"Enter",{a:7},""],
[{a:4,w:2.25},"Shift","Z","X","C","V","B","N","M","<\n,",">\n.","?\n/",{w:1.75},"Shift",{a:7},"",""],
[{a:4,w:1.25},"Ctrl",{w:1.25},"Win",{w:1.25},"Alt",{a:7,w:6.25, _s:"mx-basic"},"",{a:4},"Alt","Fn","Ctrl",{a:7},"","",""]I also generated the plate with flipped Alps stabilizers as
["~\n`","!\n1","@\n2","#\n3","$\n4","%\n5","^\n6","&\n7","*\n8","(\n9",")\n0","_\n-","+\n=",{w:2,_rs:180},"Backspace",{a:7},""],
[{a:4,w:1.5},"Tab","Q","W","E","R","T","Y","U","I","O","P","{\n[","}\n]",{w:1.5},"|\n\\",{a:7},""],
[{a:4,w:1.75,_rs:180},"Caps Lock","A","S","D","F","G","H","J","K","L",":\n;","\"\n'",{w:2.25,_rs:180},"Enter",{a:7},""],
[{a:4,w:2.25,_rs:180},"Shift","Z","X","C","V","B","N","M","<\n,",">\n.","?\n/",{w:1.75,_rs:180},"Shift",{a:7},"",""],
[{a:4,w:1.25},"Ctrl",{w:1.25},"Win",{w:1.25},"Alt",{a:7,w:6.25, _s:"mx-basic"},"",{a:4},"Alt","Fn","Ctrl",{a:7},"","",""]and alps-aek instead of mx-basic for the spacebar which I then all composed in KiCad, which was possible
as the cutouts do not overlap.
This means that I do not have to worry about the orientation of the stabilizers (some Tai-Hao keycaps
seem to have them inversed) and can later decide if I want alps or Cherry stabilizers on the spacebar
(Tai-Hao keycaps support those on only the spacebar but there seem to also be adapters to use Alps stabilizers).
Material
- Try lasercutting ~1.6mm plate on the lasercutter that is avaiable at my
university (even though it is not rated to cut metal this thick)?
- Have to source metal plates which might not be cheap in small quantities
- Not pursued eventually.
- Order FR4 plate (i.e. just a PCB). This seems to be very reasonably priced.
Getting FR4 stock cheaper and cutting on the lasercutter appeared difficult
(could not find very cheap FR4 stock).
- Ordering a PCB in plate size seems to cost around 3000JPY. One could also get an aluminum PCB for just a little more, but I don't know if an aluminum plate is a good idea. FR4 appeared much more sturdy to me but I did not make a direct comparison.
- This is the eventually adopted option
References
- Masterzen's blog (multiple parts)
- Artwork on the PCB is Comet from Higgs-Tan
Parts
157| Qty | Value | Footprint | References |
|---|---|---|---|
| 68 | D | Diode_SMD:D_SOD-123 | D1, D2, D10, D11, D12, D13, D14, D15, D16, D17, D18, D19, D20, D21, D22, D23 +52 |
| 57 | SW_Push | MX_Alps_Hybrid:MX-Alps-Hybrid-1U | SW1, SW2, SW10, SW11, SW12, SW13, SW15, SW17, SW18, SW19, SW20, SW21, SW22, SW23, SW24, SW25 +41 |
| 4 | 0.1uF | Capacitor_SMD:C_0805_2012Metric_Pad1.18x1.45mm_HandSolder | C2, C3, C4, C7 |
| 3 | SW_Push | MX_Alps_Hybrid:MX-Alps-Hybrid-1.25U | SW59, SW60, SW61 |
| 2 | 10k | Resistor_SMD:R_0805_2012Metric_Pad1.20x1.40mm_HandSolder | R1, R4 |
| 2 | 22 | Resistor_SMD:R_0805_2012Metric_Pad1.20x1.40mm_HandSolder | R11, R12 |
| 2 | 22pF | Capacitor_SMD:C_0805_2012Metric_Pad1.18x1.45mm_HandSolder | C5, C6 |
| 2 | 5.1k | Resistor_SMD:R_0805_2012Metric_Pad1.20x1.40mm_HandSolder | R15, R16 |
| 2 | SW_Push | MX_Alps_Hybrid:MX-Alps-Hybrid-1.75U | SW31, SW56 |
| 2 | SW_Push | MX_Alps_Hybrid:MX-Alps-Hybrid-2.25U | SW43, SW45 |
| 2 | SW_Push | MX_Alps_Hybrid:MX-Alps-Hybrid-1.5U | SW16, SW29 |
| 1 | 10uF | Capacitor_SMD:C_0805_2012Metric_Pad1.18x1.45mm_HandSolder | C1 |
| 1 | 16MHz | Crystal:Crystal_SMD_3225-4Pin_3.2x2.5mm_HandSoldering | Y1 |
| 1 | 1uF | Capacitor_SMD:C_0805_2012Metric_Pad1.18x1.45mm_HandSolder | C8 |
| 1 | 500m | Fuse:Fuse_1206_3216Metric_Pad1.42x1.75mm_HandSolder | F2 |
| 1 | ATmega32U4-A | Package_QFP:TQFP-44_10x10mm_P0.8mm | U1 |
| 1 | AVR-ISP-6 | Connector_IDC:IDC-Header_2x03_P2.54mm_Vertical | J1 |
| 1 | PRTR5V0U2X | Package_TO_SOT_SMD:SOT-143 | D71 |
| 1 | SW_Push | Button_Switch_SMD:SW_SPST_SKQG_WithStem | SW69 |
| 1 | SW_Push | MX_Alps_Hybrid:MX-Alps-Hybrid-6.25U | SW62 |
| 1 | SW_Push | MX_Alps_Hybrid:MX-Alps-Hybrid-2U | SW14 |
| 1 | USB4105GFA120 | kbd_custom:GCT_USB4105GFA120 | J2 |
More from burbschat/hmkb65alps
1- 2 layers76.4 × 103.6 mm

Similar boards
- 2 layers243.9 × 136.5 mm

Barobord
sadekbaroudi/barobord
I have spent a lot of time and money designing prototypes, testing, developing, etc. Any contributions would be greatly appreciated!
157 parts57 - 2 layers217.7 × 91.1 mm

- 2 layers298.8 × 122 mm

Ursaminor pcb
markstory/ursa-minor-keyboard
Design and schematics for the ursaminor keyboard
225 parts23 - 2 layers285.5 × 112.1 mm

- 2 layers242.3 × 75.4 mm

- 2 layers333.4 × 88.6 mm

Reverie
makenova/reverie
a mini 1800 keyboard based on the Elongate, Clarabelle, and Garbage Truck Keyboards
140 parts14 - 2 layers281.8 × 166.9 mm

Micro redox semi split
makenova/micro_redox
A family of boards inspired by the microdox and ferris
96 parts13 - 2 layers276.2 × 79.8 mm

Questions
How big is the Hmkb65alps PCB?
It measures 305 × 103.4 mm and has 2 copper layers, 1.6 mm thick.
What parts does the Hmkb65alps use?
157 parts, built around the ATMEGA32U4-AU and PRTR5V0U2X. 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 Hmkb65alps KiCad files?
From the burbschat/hmkb65alps repository on GitHub, at the commit this page was made from: the board is pcb/hmkb65alps.kicad_pcb and its schematic pcb/hmkb65alps-matrix.kicad_sch. PCBKit opens the board in the browser, with nothing to install.
Can I use the Hmkb65alps design in my own project?
Its repository states no licence, so its author keeps all rights: ask burbschat before reusing the design.