← Commit history
65-keyboard-datasheet.pdf
⋯ 1 unchanged line ⋯
65-keyboard.glb
⋯ 1 unchanged line ⋯
README.md+32−29
@@ -1,59 +1,62 @@-# 65% MX Hotswap Keyboard+# 65% MX Keyboard (soldered) -A 65% ANSI keyboard main board (68 keys) for a gasket-mount case. Kailh hotswap sockets, an STM32F072 under the spacebar running QMK, and USB through a separate USB-C daughterboard on a 4-pin Molex Pico-EZmate cable. The copper is laid out on a strict grid: one straight line per row, one vertical line per column.+A 65% ANSI keyboard main board (68 keys) for a gasket-mount case. The MX switches solder straight into the board, an STM32F072 under the spacebar runs QMK, and USB comes in through a separate USB-C daughterboard on a 4-pin Molex Pico-EZmate cable. The copper is laid out on a strict grid: one straight line per row, one vertical line per column. Made by PCBWay as a bare board and soldered by hand. -**Status: revision A (layout v4), designed and checked, not yet built.** The schematic and board match pin for pin, KiCad DRC and ERC are clean (0 errors, 0 warnings, 0 unconnected), and the current and heat screen passes. Nothing on this page has been measured on a real board yet.+**Status: revision B, designed and checked, not yet built.** The schematic and board match pin for pin (353 of 353), KiCad DRC and ERC are clean (0 errors, 0 unconnected), and the current and heat screen passes. Nothing on this page has been measured on a real board yet. -![Back of the board in 3D: 68 hotswap sockets with a diode beside each, the STM32 controller, regulator and USB header under the spacebar](screenshots/hero.png)-*The back of the board (KiCad render, matte black mask, ENIG). Every part is on this side; switches plug in from the front.*+**What changed from rev A:** soldered MX switches instead of Kailh hotswap sockets, PCBWay bare board for hand assembly instead of JLCPCB assembly, green mask with lead-free HASL instead of matte black with ENIG. The layout, controller, USB daughterboard and pin map are unchanged.++![Back of the green board in 3D: the soldered switch pins, a diode below each switch, the STM32 controller, regulator and USB header under the spacebar](screenshots/hero.png)+*The back of the board (KiCad render, green mask, lead-free HASL). Every small part is on this side; the switches go in from the front and are soldered here.*  ## At a glance  | | | |---|---| | Layout | 65% ANSI, 68 keys, 16u x 5u at 19.05 mm pitch |-| Board | 304.8 x 96.75 mm, 2 layers, 1.6 mm, matte black mask, ENIG, white silkscreen |-| Switches | MX-style 3- or 5-pin, hotswap (Kailh CPG151101S11) |+| Board | 304.8 x 96.75 mm, 2 layers, 1.6 mm, green mask, white silkscreen, lead-free HASL |+| Switches | MX-style, soldered: 5-pin (PCB-mount) or 3-pin (plate-mount), your choice | | Stabilizers | PCB screw-in (Durock V2): 6.25u Space, 2u Backspace, 2.25u Enter, 2.25u Left Shift |-| Matrix | 5 rows x 15 columns, 1N4148WS per key, COL2ROW |+| Matrix | 5 rows x 15 columns, 1N4148WS (SOD-323) per key, COL2ROW | | Controller | STM32F072CBT6, crystal-less USB, built-in DFU bootloader | | Firmware | QMK + VIA/Vial (`stm32-dfu`) | | USB | Unified Daughterboard (UDB-C, **EZM** type) on a 1:1 Pico-EZmate cable into J2 |-| Fab | JLCPCB, bottom-side assembly, 152 placements, 12 BOM lines |+| Fab | PCBWay, bare board (no assembly); 0.25 mm tracks, 0.2 mm gaps, well above PCBWay's limits | | Mounting | 8 x M2 holes kept for now; a gasket case may use none |  ## Pictures -![Back of the board seen flat: five straight row lines and the controller block under the spacebar](screenshots/back-flat.png)-*Back, flat. Each row is one straight line under its diodes.*+![Back of the board seen flat: a diode below every switch, five straight row lines and the controller block under the spacebar](screenshots/back-flat.png)+*Back, flat. Each diode sits below its switch, all facing the same way; each row is one straight line.* -![Front of the board seen flat: switch holes and the faint column traces under the black mask](screenshots/front-flat.png)-*Front, flat (the switch side). No silkscreen boxes; the column traces show faintly under the mask.*+![Front of the board seen flat with 68 MX switches seated](screenshots/front-flat.png)+*Front, flat, with the switch 3D models seated. No silkscreen boxes on this side; the column traces show faintly under the mask.*  ![Close-up of the controller area: J2 header, AP2112K regulator, STM32F072, BOOT and RESET buttons and the labelled test pads](screenshots/controller-closeup.png)-*The controller block under the spacebar: J2 (USB cable header), the 3.3 V regulator, the STM32, the BOOT (SW69) and RESET (SW70) buttons, and the gold test pads, each labelled with its net.*+*The controller block under the spacebar: J2 (USB cable header), the 3.3 V regulator, the STM32, the BOOT (SW69) and RESET (SW70) buttons, and the test pads, each labelled with its net.* -![The two copper layers drawn separately: back copper in blue with straight rows and two column bundles, front copper in red with vertical columns](screenshots/copper-front-back.png)-*The copper, layer by layer. Back (blue): straight rows, and the 15 columns arriving at the chip as two neat bundles in the gap between rows 3 and 4. Front (red): one vertical column per key column, with 45-degree jogs.*+![The two copper layers drawn separately: back copper in blue with straight rows and short hooks from each switch to its diode, front copper in red with vertical columns into each switch pin](screenshots/copper-front-back.png)+*The copper, layer by layer. Back (blue): straight rows, a short hook from each switch pin to its diode, and the 15 columns arriving at the chip as two bundles. Front (red): one vertical column per key column, straight into each switch pin (the pins are plated, so no vias are needed per key).* -![Adom Fields current and heat solve of the board, with VBUS 0.5 A at 40 A/mm2 and the issues list](screenshots/fields-current.png)-*Adom Fields current and heat screen (simulation, 0.5 A on VBUS and GND): peak 40 A/mm², under 1 °C rise. The "no TVS" tag on J2 is expected: ESD protection lives on the daughterboard. The three low notes left open are listed in the [design review](design-review/README.md).*+![Adom Fields current and heat solve of the rev B board, with VBUS 0.5 A at 40 A/mm2 and the issues list](screenshots/fields-current.png)+*Adom Fields current and heat screen (simulation, 0.5 A on VBUS and GND): peak 40 A/mm², under 1 °C rise, 0.9 mV ground offset. The "no TVS" tag on J2 is expected: ESD protection lives on the daughterboard. The three low notes left open are listed in the [design review](design-review/README.md).*  ![Plan drawing comparing two controller spots: A by the Enter key and B under the spacebar](screenshots/controller-options.png)-*How the controller spot was chosen: A (by Enter) left no room for the column bundles, so B (under the spacebar) was built.*+*How the controller spot was chosen (rev A, unchanged): A (by Enter) left no room for the column bundles, so B (under the spacebar) was built.* -## Using the board+## Building it -- **Daughterboard.** Use a Unified Daughterboard of the EZM (Pico-EZmate) type with its 1:1 cable: pin 1 VBUS, 2 D-, 3 D+, 4 GND. The main board has no ESD or fuse of its own; the daughterboard carries them. A JST-SH (JSH) daughterboard needs a Molex-to-JST cable.-- **QMK pins.** `MATRIX_ROW_PINS { PB9, PB6, PB4, PA15, PB3 }`, `MATRIX_COL_PINS { PA0, PA1, PA2, PA3, PA4, PA5, PA6, PA7, PB0, PB1, PB2, PB10, PB11, PB12, PB13 }`, `DIODE_DIRECTION COL2ROW`.-- **Flashing.** Hold BOOT (SW69) and tap RESET (SW70); the STM32 DFU bootloader appears and QMK Toolbox or `dfu-util` can flash it.-- **Debug.** SWD on the test pads: 3V3, SWDIO, SWCLK, NRST, GND (plus VBUS and BOOT0).-- **Ordering.** The STM32F072CBT6 had only 32 in stock at JLCPCB on 2026-11-09; check before ordering.+- **Order:** upload the Gerber zip (made from the KiCad project; not published here) to PCBWay: 2 layers, 1.6 mm, green mask, white silkscreen, lead-free HASL, 1 oz copper, no assembly. PCBWay prints an order number on the board unless you pick a location or pay to leave it off.+- **Parts:** the [shopping list](build/65-keyboard-revB-parts.csv) has every part with quantities and spares; the [order notes](build/ORDER-NOTES.txt) list the PCBWay settings. The STM32F072CBT6 had only 32 in stock at JLCPCB/LCSC on 2026-11-09; check stock and buy a spare.+- **Solder in this order:** the STM32 first (pin 1 dot to the marked corner, drag-solder with lots of flux, check every pin for bridges), then the regulator, capacitors and resistor, the 68 diodes (stripe to the printed bar, all the same way), J2 and the two buttons. Test with the daughterboard (hold BOOT, tap RESET: the PC should see 0483:DF11), then stabilizers, plate and switches last.+- **Daughterboard:** a Unified Daughterboard of the EZM (Pico-EZmate) type with its 1:1 cable: pin 1 VBUS, 2 D-, 3 D+, 4 GND. The main board has no ESD or fuse of its own; the daughterboard carries them.+- **QMK pins:** `MATRIX_ROW_PINS { PB9, PB6, PB4, PA15, PB3 }`, `MATRIX_COL_PINS { PA0, PA1, PA2, PA3, PA4, PA5, PA6, PA7, PB0, PB1, PB2, PB10, PB11, PB12, PB13 }`, `DIODE_DIRECTION COL2ROW`.+- **Debug:** SWD on the test pads: 3V3, SWDIO, SWCLK, NRST, GND (plus VBUS and BOOT0).  ## Design review and datasheet -- [Design review](design-review/README.md): the current and heat tables, the screens' verdicts, and the parts table with prices.-- [Datasheet (PDF)](65-keyboard-datasheet.pdf): operating envelope, pinout, power, mechanical and fab details, and the qualification limits. It is at the bottom of this page too.+- [Design review](design-review/README.md): the current and heat tables, the screens' verdicts and the parts table.+- [Datasheet (PDF)](65-keyboard-datasheet.pdf): operating envelope, pinout, power, mechanical and fab details, hand assembly and the qualification limits. It is at the bottom of this page too.  ## Components @@ -68,12 +71,12 @@ A 65% ANSI keyboard main board (68 keys) for a gasket-mount case. Kailh hotswap | C9 | 1 | 10nF | 0603B103K500NT | FH (Guangdong Fenghua) | project library (no public page yet) | | R3 | 1 | 10k | 0603WAF1002T5E | UNI-ROYAL | [adom/0603waf1002t5e](https://wiki.adom.inc/adom/0603waf1002t5e) | | SW69, SW70 | 2 | BOOT | TS-1187A-B-A-B | XKB Connection | [adom/ts-1187a-b-a-b](https://wiki.adom.inc/adom/ts-1187a-b-a-b) |-| SW1, SW2, SW3, SW4, SW5, SW6, SW7, SW8, SW9, SW10, SW11, SW12, SW13, SW14, SW15, SW16, SW17, SW18, SW19, SW20, SW21, SW22, SW23, SW24, SW25, SW26, SW27, SW28, SW29, SW30, SW31, SW32, SW33, SW34, SW35, SW36, SW37, SW38, SW39, SW40, SW41, SW42, SW43, SW44, SW45, SW46, SW47, SW48, SW49, SW50, SW51, SW52, SW53, SW54, SW55, SW56, SW57, SW58, SW59, SW60, SW61, SW62, SW63, SW64, SW65, SW66, SW67, SW68 | 68 | CPG151101S11-16 | CPG151101S11-16 | Kailh | project library (no public page yet) |+| SW1, SW2, SW3, SW4, SW5, SW6, SW7, SW8, SW9, SW10, SW11, SW12, SW13, SW14, SW15, SW16, SW17, SW18, SW19, SW20, SW21, SW22, SW23, SW24, SW25, SW26, SW27, SW28, SW29, SW30, SW31, SW32, SW33, SW34, SW35, SW36, SW37, SW38, SW39, SW40, SW41, SW42, SW43, SW44, SW45, SW46, SW47, SW48, SW49, SW50, SW51, SW52, SW53, SW54, SW55, SW56, SW57, SW58, SW59, SW60, SW61, SW62, SW63, SW64, SW65, SW66, SW67, SW68 | 68 | MX_SWITCH | MX switch, 5-pin or 3-pin (user-supplied) | any MX-compatible (your choice) | not on the wiki yet | | D1, D2, D3, D4, D5, D6, D7, D8, D9, D10, D11, D12, D13, D14, D15, D16, D17, D18, D19, D20, D21, D22, D23, D24, D25, D26, D27, D28, D29, D30, D31, D32, D33, D34, D35, D36, D37, D38, D39, D40, D41, D42, D43, D44, D45, D46, D47, D48, D49, D50, D51, D52, D53, D54, D55, D56, D57, D58, D59, D60, D61, D62, D63, D64, D65, D66, D67, D68 | 68 | 1N4148WS | 1N4148WS | onsemi | project library (no public page yet) |  ## Install every part in KiCad -This page is a KiCad Plugin and Content Manager repository. In KiCad, open **Plugin and Content Manager**, **Manage...**, add this URL, then install **65% MX hotswap keyboard** from the Libraries tab:+This page is a KiCad Plugin and Content Manager repository. In KiCad, open **Plugin and Content Manager**, **Manage...**, add this URL, then install **65% MX keyboard (soldered), rev B** from the Libraries tab:  ``` https://wiki.adom.inc/api/pages/gzc/65-keyboard/files/pcm/repository.json
build/65-keyboard-revB-parts.csvadded+14
@@ -0,0 +1,14 @@+What,Part number,Maker,Qty on board,Suggested to buy,References,LCSC part (one place to buy),Footprint,Notes
+Pico-EZmate 4P,78171-0004,Molex,1,2,J2,C588524,Molex_Pico-EZmate_78171-0004_1x04-1MP_P1.20mm_Vertical,
+AP2112K-3.3,AP2112K-3.3TRG1,Diodes Incorporated,1,2,U3,C23380830,SOT-23-5,
+1uF,CL10A105KB8NNNC,Samsung Electro-Mechanics,3,8,C1 C2 C8,C15849,C_0603_1608Metric,
+STM32F072CBT6,STM32F072CBT6,STMicroelectronics,1,2,U1,C81720,LQFP-48_7x7mm_P0.5mm,Pin 1 dot to the marked corner; drag-solder with lots of flux
+100nF,CC0603KRX7R9BB104,YAGEO,5,10,C3 C4 C5 C6 C10,C14663,C_0603_1608Metric,
+4.7uF,CL10A475KO8NNNC,Samsung Electro-Mechanics,1,6,C7,C19666,CL10A475KO8NNNC,
+10nF,0603B103K500NT,FH (Guangdong Fenghua),1,6,C9,C57112,C_0603_1608Metric,
+10k,0603WAF1002T5E,UNI-ROYAL,1,6,R3,C25804,R_0603_1608Metric,
+"Tact button (BOOT, RESET)",TS-1187A-B-A-B,XKB Connection,2,3,SW69 SW70,C318884,XKB_Connection_TS-1187A_8a347a,
+MX switches,"MX switch, 5-pin or 3-pin (user-supplied)",any MX-compatible (your choice),68,75,SW1 SW2 SW3 SW4 SW5 SW6 SW7 SW8 SW9 SW10 SW11 SW12 SW13 SW14 SW15 SW16 SW17 SW18 SW19 SW20 SW21 SW22 SW23 SW24 SW25 SW26 SW27 SW28 SW29 SW30 SW31 SW32 SW33 SW34 SW35 SW36 SW37 SW38 SW39 SW40 SW41 SW42 SW43 SW44 SW45 SW46 SW47 SW48 SW49 SW50 SW51 SW52 SW53 SW54 SW55 SW56 SW57 SW58 SW59 SW60 SW61 SW62 SW63 SW64 SW65 SW66 SW67 SW68,,"SW_Cherry_MX_PCB_<width>u (1.00u to 6.25u by key width, soldered)","Any MX-compatible switch, 5-pin or 3-pin; your choice"
+1N4148WS,1N4148WS,onsemi,68,75,D1 D2 D3 D4 D5 D6 D7 D8 D9 D10 D11 D12 D13 D14 D15 D16 D17 D18 D19 D20 D21 D22 D23 D24 D25 D26 D27 D28 D29 D30 D31 D32 D33 D34 D35 D36 D37 D38 D39 D40 D41 D42 D43 D44 D45 D46 D47 D48 D49 D50 D51 D52 D53 D54 D55 D56 D57 D58 D59 D60 D61 D62 D63 D64 D65 D66 D67 D68,C2128,D_SOD-323,Stripe (cathode) goes to the marked end on the board
+PCB screw-in stabilizers,Durock V2 or Cherry-style,,4,4,ST1 ST2 ST3 ST4,,,"Three 2u sets (Backspace, Enter, Left Shift: 2.25u keys use 2u stabilizers) and one 6.25u set (Space)"
+USB-C daughterboard + cable,"Unified Daughterboard C3 or newer, EZM (Pico-EZmate)",,1,1,J2,,,Use its 1:1 Pico-EZmate cable
build/ORDER-NOTES.txtadded+15
@@ -0,0 +1,15 @@+65% MX keyboard PCB, rev B: PCBWay order settings (bare board, no assembly)++Upload: 65-keyboard-revB-gerbers.zip+Board type: single pieces          Size: 304.8 x 96.75 mm (the quote page reads it from the Gerbers)+Layers: 2                          Material: FR-4, TG 130-140+Thickness: 1.6 mm                  Min track/spacing: 6/6 mil or larger (this board uses 0.25 mm tracks, 0.2 mm gaps)+Min hole size: 0.3 mm              Solder mask: Green          Silkscreen: White+Edge connector: No                 Surface finish: HASL lead free+Via process: tenting vias          Finished copper: 1 oz Cu+Quantity: 5 (PCBWay's minimum)++Notes+- All parts go on the back (the side with the white labels); switches go in from the front.+- PCBWay prints its order number on the board unless you choose 'Specify a location' or pay to leave it off.+- Assembly: none. See 65-keyboard-revB-parts.csv for the shopping list.
design-review/01-artifact-dc3b6e806ff2fc34700e48932093bfb741c96b30b9cebc385992780b329e5512.pngadded
⋯ 1 unchanged line ⋯
design-review/README.md+8−8
@@ -1,8 +1,8 @@ # Design review -Written by [adom-aiflow](https://wiki.adom.inc/adom/adom-aiflow) on 2026-11-09T22:43:26Z for `board-37.kicad_pcb` (sha256 `e8a0321b1b09`). The run's own report, step by step: [docs/runs/65-keyboard-claude-opus-5-5-20261109-0022/](docs/runs/65-keyboard-claude-opus-5-5-20261109-0022/).+Written by [adom-aiflow](https://wiki.adom.inc/adom/adom-aiflow) on 2026-11-10T05:40:51Z for `board-39.kicad_pcb` (sha256 `8320888acaee`). The run's own report, step by step: [docs/runs/65-keyboard-claude-opus-5-5-20261109-0022/](docs/runs/65-keyboard-claude-opus-5-5-20261109-0022/). -**Status:** finish ran with 4 open item(s); not cleared for fabrication.+**Status:** finish ran with 2 open item(s); not cleared for fabrication.  ## Simulation @@ -11,7 +11,7 @@ Written by [adom-aiflow](https://wiki.adom.inc/adom/adom-aiflow) on 2026-11-09T2 | Net | Current (A) | Peak density (A/mm²) | Layers | |---|---|---|---| | VBUS | 0.50 | 40.5 | F.Cu, B.Cu |-| GND | 0.50 | 8.2 | F.Cu, B.Cu |+| GND | 0.50 | 9.0 | F.Cu, B.Cu | | +3V3 | 0.10 | 12.3 | F.Cu, B.Cu |  ### Screens@@ -24,14 +24,14 @@ The screens and the Fields solve are engineering screens with stated assumptions ### Open Fields issues  - 3 decoupling-far findings, grouped (+3V3); the first: U1 pin 1 (+3V3): the nearest small capacitor, C4, is 3.7 mm away (loop 3.7 mm²)-- GND: its pour on F.Cu is in 3 pieces (2 joined through vias, 0 isolated); the nearest one (27.3 mm², joined only through the net's vias on other layers) is 0.4 mm from the main piece-- GND: its pour on B.Cu is in 5 pieces (4 joined through vias, 0 isolated); the nearest one (37.0 mm², joined only through the net's vias on other layers) is 0.4 mm from the main piece+- GND: its pour on F.Cu is in 4 pieces (3 joined through vias, 0 isolated); the nearest one (45.6 mm², joined only through the net's vias on other layers) is 0.6 mm from the main piece+- GND: its pour on B.Cu is in 5 pieces (4 joined through vias, 0 isolated); the nearest one (11.3 mm², joined only through the net's vias on other layers) is 0.7 mm from the main piece  ### Figures -![Adom Fields current and heat screen on the final board: VBUS and GND at 0.5 A peak 40 A/mm2, +3V3 at 0.1 A 12 A/mm2, under 1 C rise in still air. The 'no TVS' tag on J2 is expected: ESD protection is on the USB daughterboard.](design-review/01-artifact-6e94679a2764f9554cd5aa74bf5f7830cd88799cd51e4d508937ed69b65e05ea.png)+![Adom Fields current and heat screen on the rev B board: VBUS and GND at 0.5 A peak 40 A/mm2, +3V3 at 0.1 A 12 A/mm2, under 1 C rise in still air. The 'no TVS' tag on J2 is expected: ESD protection is on the USB daughterboard.](design-review/01-artifact-dc3b6e806ff2fc34700e48932093bfb741c96b30b9cebc385992780b329e5512.png) -*Adom Fields current and heat screen on the final board: VBUS and GND at 0.5 A peak 40 A/mm2, +3V3 at 0.1 A 12 A/mm2, under 1 C rise in still air. The 'no TVS' tag on J2 is expected: ESD protection is on the USB daughterboard.*+*Adom Fields current and heat screen on the rev B board: VBUS and GND at 0.5 A peak 40 A/mm2, +3V3 at 0.1 A 12 A/mm2, under 1 C rise in still air. The 'no TVS' tag on J2 is expected: ESD protection is on the USB daughterboard.*  ## Components @@ -47,6 +47,6 @@ The screens and the Fields solve are engineering screens with stated assumptions | 0603WAF1002T5E | UNI-ROYAL | 10k | 1 | R3 | - | - | [wiki](https://wiki.adom.inc/adom/0603waf1002t5e) | | TS-1187A-B-A-B | XKB Connection | BOOT | 1 | SW69 | - | - | [wiki](https://wiki.adom.inc/adom/ts-1187a-b-a-b) | | TS-1187A-B-A-B | XKB Connection | RESET | 1 | SW70 | - | - | [wiki](https://wiki.adom.inc/adom/ts-1187a-b-a-b) |-| CPG151101S11-16 | Kailh | CPG151101S11-16 | 68 | SW1, SW2, SW3, SW4, SW5, SW6, SW7, SW8, SW9, SW10, SW11, SW12, SW13, SW14, SW15, SW16, SW17, SW18, SW19, SW20, SW21, SW22, SW23, SW24, SW25, SW26, SW27, SW28, SW29, SW30, SW31, SW32, SW33, SW34, SW35, SW36, SW37, SW38, SW39, SW40, SW41, SW42, SW43, SW44, SW45, SW46, SW47, SW48, SW49, SW50, SW51, SW52, SW53, SW54, SW55, SW56, SW57, SW58, SW59, SW60, SW61, SW62, SW63, SW64, SW65, SW66, SW67, SW68 | - | - |  |+| MX switch, 5-pin or 3-pin (user-supplied) | any MX-compatible (your choice) | MX_SWITCH | 68 | SW1, SW2, SW3, SW4, SW5, SW6, SW7, SW8, SW9, SW10, SW11, SW12, SW13, SW14, SW15, SW16, SW17, SW18, SW19, SW20, SW21, SW22, SW23, SW24, SW25, SW26, SW27, SW28, SW29, SW30, SW31, SW32, SW33, SW34, SW35, SW36, SW37, SW38, SW39, SW40, SW41, SW42, SW43, SW44, SW45, SW46, SW47, SW48, SW49, SW50, SW51, SW52, SW53, SW54, SW55, SW56, SW57, SW58, SW59, SW60, SW61, SW62, SW63, SW64, SW65, SW66, SW67, SW68 | - | - |  | | 1N4148WS | onsemi | 1N4148WS | 68 | D1, D2, D3, D4, D5, D6, D7, D8, D9, D10, D11, D12, D13, D14, D15, D16, D17, D18, D19, D20, D21, D22, D23, D24, D25, D26, D27, D28, D29, D30, D31, D32, D33, D34, D35, D36, D37, D38, D39, D40, D41, D42, D43, D44, D45, D46, D47, D48, D49, D50, D51, D52, D53, D54, D55, D56, D57, D58, D59, D60, D61, D62, D63, D64, D65, D66, D67, D68 | - | - |  | 
page.json+7−6
@@ -2,9 +2,9 @@   "schema_version": 1,   "slug": "65-keyboard",   "type": "component",-  "title": "65% MX Hotswap Keyboard",-  "brief": "65% ANSI hotswap keyboard PCB (68 keys) for a gasket-mount case: STM32F072 under the spacebar running QMK, USB through a Unified Daughterboard on a Pico-EZmate cable, strict-grid copper, matte black with ENIG.",-  "version": "0.2.0",+  "title": "65% MX Keyboard (soldered)",+  "brief": "65% ANSI keyboard PCB (68 soldered MX switches) for a gasket-mount case, rev B: STM32F072 under the spacebar running QMK, USB through a Unified Daughterboard on a Pico-EZmate cable, strict-grid copper, green with lead-free HASL, PCBWay bare board for hand assembly.",+  "version": "0.3.0",   "visibility": {     "public": true   },@@ -21,11 +21,12 @@   "tags": [     "keyboard",     "65-percent",-    "hotswap",+    "soldered",     "stm32",     "qmk",     "kicad",-    "gasket-mount"+    "gasket-mount",+    "pcbway"   ],   "license": "proprietary",   "sample_prompts": [],@@ -33,7 +34,7 @@   "discovery_pitch": null,   "metadata": {},   "created_at": "2026-11-09T00:49:05.859Z",-  "updated_at": "2026-11-09T22:45:52.373Z",+  "updated_at": "2026-11-09T00:49:05.859Z",   "component": {     "mpn": "65-KEYBOARD",     "manufacturer": "",
pcm/65-keyboard-pcm-1.0.4.zipadded
⋯ 1 unchanged line ⋯
pcm/build.json+4−4
@@ -1,7 +1,7 @@ {- "version": "1.0.3",- "contentSha256": "8110dbd3f9b8c00b5db8650dc27113a36d9188da12f63e803604c2d124c9b11b",- "why": "content changed since 1.0.2",+ "version": "1.0.4",+ "contentSha256": "9d415282b3a218cd74eb4892f49021293d3ee128020cdd77994a317e7d515b01",+ "why": "content changed since 1.0.3",  "identifier": "inc.adom.wiki.gzc.65-keyboard",- "zip": "65-keyboard-pcm-1.0.3.zip"+ "zip": "65-keyboard-pcm-1.0.4.zip" }\ No newline at end of file
pcm/packages.json+8−8
@@ -3,9 +3,9 @@  "packages": [   {    "$schema": "https://go.kicad.org/pcm/schemas/v1",-   "name": "65% MX hotswap keyboard",-   "description": "A 65% ANSI keyboard main board (68 keys) for a gasket-mount case, with the USB-C port on a separate Unified Daughterboard and a scripted, strict-grid ",-   "description_full": "# 65% MX hotswap keyboard PCB\n\nA 65% ANSI keyboard main board (68 keys) for a gasket-mount case, with the USB-C port on a separate Unified Daughterboard and a scripted, strict-grid copper layout.\n\n- Layout: 65% ANSI, 68 keys, 16u x 5u at 19.05 mm pitch. Board 304.8 x 96.75 mm, 2 layers, all parts on the back.\n- Switches: plain hotswap, Kailh CPG151101S11 sockets for MX-style 3- and 5-pin switches. PCB screw-in stabilizers (Durock V2): Backspace 2u, Enter 2.25u, Left Shift 2.25u, Space 6.25u.\n- Matrix: 5 rows x 15 columns, one 1N4148WS (SOD-323) per key, COL2ROW (cathode toward the row).\n- Controller: STM32F072CBT6 (LQFP-48) under the spacebar, crystal-less USB with CRS, built-in DFU. QMK + VIA/Vial (stm32-dfu bootloader).\n- Pin map (v4): rows PB9 PB6 PB4 PA15 PB3; columns PA0-PA7 PB0 PB1 PB2 PB10 PB11 PB12 PB13. USB D- PA11, D+ PA12, SWDIO PA13, SWCLK PA14.\n- USB: a Unified Daughterboard (UDB-C EZM) carries the USB-C receptacle, CC pull-downs, ESD and over-current protection. The main board has a Molex Pico-EZmate 78171-0004 cable header (J2), 1:1 cable: 1 VBUS, 2 D-, 3 D+, 4 GND.\n- Power: AP2112K-3.3 LDO with 1 uF in/out, 100 nF per VDD and VDDIO2, 4.7 uF bulk, VDDA 1 uF + 10 nF.\n- BOOT0: 10k pull-down + button to 3.3 V. NRST: 100 nF to GND + button to GND. Test pads: 3V3, SWDIO, SWCLK, NRST, GND, VBUS, BOOT0.\n- Copper: rows as one straight line per row on the back under the diodes; columns vertical on the front with 45-degree jogs and the same via spot on every key; the columns reach the chip as two parallel bundles in the gap between rows 3 and 4; rows drop to the chip on the front. GND pour on both layers.\n- Fab: JLCPCB, 2 layers, matte black solder mask, ENIG, bottom-side assembly.\n\nEvery part of this board (from the Adom wiki and the board's project library): symbol, footprint and STEP model. Project page: https://wiki.adom.inc/gzc/65-keyboard",+   "name": "65% MX keyboard (soldered), rev B",+   "description": "A 65% ANSI keyboard main board (68 soldered MX switches) for a gasket-mount case, made by PCBWay as a bare board and hand-assembled, with the USB-C po",+   "description_full": "# 65% MX keyboard PCB (soldered), rev B\n\nA 65% ANSI keyboard main board (68 soldered MX switches) for a gasket-mount case, made by PCBWay as a bare board and hand-assembled, with the USB-C port on a separate Unified Daughterboard and a scripted, strict-grid copper layout.\n\n- Layout: 65% ANSI, 68 keys, 16u x 5u at 19.05 mm pitch. Board 304.8 x 96.75 mm, 2 layers, all parts on the back.\n- Switches: soldered MX switches (5-pin PCB-mount footprint, 3-pin switches fit too). Rev A used Kailh hotswap sockets. PCB screw-in stabilizers (Durock V2): Backspace 2u, Enter 2.25u, Left Shift 2.25u, Space 6.25u.\n- Matrix: 5 rows x 15 columns, one 1N4148WS (SOD-323) per key, COL2ROW (cathode toward the row).\n- Controller: STM32F072CBT6 (LQFP-48) under the spacebar, crystal-less USB with CRS, built-in DFU. QMK + VIA/Vial (stm32-dfu bootloader).\n- Pin map (v4): rows PB9 PB6 PB4 PA15 PB3; columns PA0-PA7 PB0 PB1 PB2 PB10 PB11 PB12 PB13. USB D- PA11, D+ PA12, SWDIO PA13, SWCLK PA14.\n- USB: a Unified Daughterboard (UDB-C EZM) carries the USB-C receptacle, CC pull-downs, ESD and over-current protection. The main board has a Molex Pico-EZmate 78171-0004 cable header (J2), 1:1 cable: 1 VBUS, 2 D-, 3 D+, 4 GND.\n- Power: AP2112K-3.3 LDO with 1 uF in/out, 100 nF per VDD and VDDIO2, 4.7 uF bulk, VDDA 1 uF + 10 nF.\n- BOOT0: 10k pull-down + button to 3.3 V. NRST: 100 nF to GND + button to GND. Test pads: 3V3, SWDIO, SWCLK, NRST, GND, VBUS, BOOT0.\n- Copper: rows as one straight line per row on the back under the diodes; columns vertical on the front with 45-degree jogs and straight into each switch pin (no per-key vias); the columns reach the chip as two parallel bundles in the gap between rows 3 and 4; rows drop to the chip on the front. GND pour on both layers.\n- Fab: PCBWay, 2 layers, 1.6 mm, green solder mask, white silkscreen, lead-free HASL; bare board, hand-soldered.\n\nEvery part of this board (from the Adom wiki and the board's project library): symbol, footprint and STEP model. Project page: https://wiki.adom.inc/gzc/65-keyboard",    "identifier": "inc.adom.wiki.gzc.65-keyboard",    "type": "library",    "author": {@@ -20,13 +20,13 @@    },    "versions": [     {-     "version": "1.0.3",+     "version": "1.0.4",      "status": "stable",      "kicad_version": "9.0",-     "download_url": "https://wiki.adom.inc/api/pages/gzc/65-keyboard/files/pcm/65-keyboard-pcm-1.0.3.zip",-     "download_sha256": "24e46666a384a4a39b066036a23258c1fadf4dce0b7c0a2134a837320293bda0",-     "download_size": 1189365,-     "install_size": 6380591+     "download_url": "https://wiki.adom.inc/api/pages/gzc/65-keyboard/files/pcm/65-keyboard-pcm-1.0.4.zip",+     "download_sha256": "e207bd057fb99a819984b1b5a0add15a8902f9ce75df094fa09b8f858975e5bc",+     "download_size": 631932,+     "install_size": 3722968     }    ]   }
pcm/repository.json+4−4
@@ -1,6 +1,6 @@ {  "$schema": "https://go.kicad.org/pcm/schemas/v1#/definitions/Repository",- "name": "65% MX hotswap keyboard (Adom wiki)",+ "name": "65% MX keyboard (soldered), rev B (Adom wiki)",  "maintainer": {   "name": "gzc",   "contact": {@@ -9,8 +9,8 @@  },  "packages": {   "url": "https://wiki.adom.inc/api/pages/gzc/65-keyboard/files/pcm/packages.json",-  "sha256": "7603ee80960c26c78f5b392f236a9e34db8d31bc15314b433f407fdf037bb516",-  "update_timestamp": 1794261615,-  "update_time_utc": "2026-11-09 22:00:15"+  "sha256": "e9c67d33a676a68cf08c6efef1641120444c88348c0c1fcb44801ebe30b2fb81",+  "update_timestamp": 1794289228,+  "update_time_utc": "2026-11-10 05:40:28"  } }\ No newline at end of file
screenshots/back-flat.png
⋯ 1 unchanged line ⋯
screenshots/controller-closeup.png
⋯ 1 unchanged line ⋯
screenshots/copper-front-back.png
⋯ 1 unchanged line ⋯
screenshots/fields-current.png
⋯ 1 unchanged line ⋯
screenshots/front-flat.png
⋯ 1 unchanged line ⋯
screenshots/hero.png
⋯ 1 unchanged line ⋯