Skip to the content
PCBKitNew board
2 layers317.9 × 129.1 mmKeeb, the printed circuit board in 3D

Hack Club Keeb custom keyboard

Size
317.9 × 129.1 mm
Copper layers
2
Thickness
1.6 mm
Parts
166
Nets
117
Pads
602
Tracks, vias
772, 0
Routed
Yes
KiCad
KiCad 10.0 (file 20260206)
Created
9 Jun 2026
Updated
16 Jun 2026

Overview

Keeb is an open-source printed circuit board by djarty24, from the djarty24/keeb repository on GitHub. It is a 2-layer board of 317.9 × 129.1 mm with 166 parts on 117 nets, routed with 772 tracks and 0 vias.

It belongs with the keyboards and input boards and the RP2040 boards of this library.

README

README.md

Keeb README & Journal

Table of Contents

6/8

Just found out about Hack Club Keeb! I wanted to get started with this challenge.

Planning Your Keyboard

I first read through the Planning Your Keyboard section in the docs and started brainstorming what I wanted my keyboard to look like. After doing some research, I've decided on a 75% layout for my Mac. I want it to look pretty standard, like this image:

Keyboard Inspo Image

The personalization will be through the keycaps! I'll also add fun illustrations on the PCB silkscreen. I'm thinking of designing my own Monet themed keycaps or purchasing custom ones off of Etsy like the following:

Keycaps Inspo Image Keycaps Inspo Image

As for the case, I want it to have slight borders around everything and larger borders to separate the arrow keys and function row like the first image displayed.

text
Esc   F1 F2 F3 F4   F5 F6 F7 F8   F9 F10 F11 F12   Power

`  1  2  3  4  5  6  7  8  9  0  -  =   Backspace     Home
Tab Q  W  E  R  T  Y  U  I  O  P  [  ]   \          PgUp
Caps A  S  D  F  G  H  J  K  L  ;  '   Return       PgDn
Shift Z  X  C  V  B  N  M  ,  .  /   Shift   ↑      End
Ctrl Opt Cmd        Space        Cmd Opt     ← ↓ →

Design Time: ~90 min

Designing the PCB (day 1)

Next, I moved on to the Desighing the PCB section in the docs.

I've decided on linear switches since they seem to be the quietest and best for wrist health.

Initially I was pretty confused with how to even get started. So I headed over to YouTube and watched a tutorial by Joe Scotto that explained direct vs. matrix wiring. Looking at my reference image, my keyboard needs 15 columns and 6 rows, which means my microcontroller needs at least 21 pins. This fits perfectly within the Raspberry Pi Pico's 26 GPIO pins!

Now, it was time to open up KiCAD and get started.

In the tutorial, it said I would need stabilizers for keys larger than 2u. So what I did next was identify the size of each key. Most keys were 1u, however some exceptions:

Tab: 1.5u Caps Lock: 1.75u Left Shift: 2.25u Right Shift: 1.75u Backslash: 1.5u Return: 2.25u Backspace: 2u Space: 6.25u Ctrl/Opt/Cmd/Right Cmd/1.25u

My eyes hurt really bad after squinting over the reference image but I believe this is right. So, the only keys that I need stabilizers for are Left Shift, Return, Backspace, and Space.

Then I created one row of keys.

6/9

Today, I continued working on the PCB. I finished up adding all of the key-diode units and orienting them to match my physical keyboard inspo. Although it isn't perfectly aligned it should be good enough to move on to the next step. Here's what my matrix looked like:

Schematic

Next, I added in the Pico and added labels to its GPIO pins. I also added the stabilizers and 5 mounting holes as well.

Schematic

Now, it was time to move on to the next step!

Designing the PCB (day 2)

THIS TOOK ME 8 HOURS. I don't have many screenshots since I was pretty locked in but I had to manually orient every single switch-diode unit to match the exact layout I wanted. The grid system in KiCad is pretty bad, so I calculated all of the X-Y coordinates of all 81 keys using a formula I made on Desmos and positioned them accordingly. Then, I placed the diodes and routed all of my traces. This is what it looks like now:

PCB

The orientation of stuff is a little ugly but I'm not too picky about how it will look as long as it functions. In the future I will most probably remake this with a different MCU that's more compact than the Pico. This is what the 3d view looks like:

3D View

I went to GrabCAD and downloaded some 3D models of the Cherry MX keycaps and switches that were 1u. However, I got tired of adding them all in because I couldn't find a way to globally update their footprints to link to the model, so I added enough to just get an idea of what it would look like. I also added in a 1.5u stabilizer to test how that would look.

Final step for this part was running the Design Rules Checker (DRC) to make sure everything was good. I cleaned up some connections, ran the DRC again, and the PCB was ready to go! I also committed and pushed all of this to GitHub.

6/10

I realized today that I forgot to generate the drill files and gerbers and whatnot so I did that as well.

CAD & Onshape

I then moved on to designing the case using Onshape. This was my first time using CAD ever, so I spent a bit acclimating to the program. I imported my PCB into the project with it's half-completed 3D models. There were enough for me to get a sense of how I should dimension my case, so it wasn't too bad.

Onshape PCB Import

Overall I didn't get much done today.

6/11

I continued working on the keyboard case. I built the base for the tray. I also struggled a lot first because i couldn't figure out how to bring the PCB over to the Parts Studio so after I figured that out this is what I had:

Onshape

6/15

I was traveling over the weekend so I didn't work on the project much for the past couple of days. I started by creating walls around the PCB by making a new sketch. This took me around an hour ngl because I had trouble setting up my second sketch to be on top of the base I had already created. After a bunch of debugging I figured out that in CAD sketches need to be fully defined. After I made sure my base was fully defined, creating the walls was a breeze. Here's what it looks like now:

Onshape

Next, I created the standoffs, which is basically a way to mount the PCB so that it fits nicely while protecting the soldered joints.

Onshape

I decided against having a top plate for this first keyboard just because I don't want to mess it up initially. My plan is to instead add a top bezel if I don't like the look of just the PCB later, and print that separately. Finally I added the USB cutout and the CAD model was finished. So far, this has been my least favorite part of the process just because of how slow Onshape is on my computer. Here's the finished look:

Onshape

I also went ahead and split my case into two so that it would be easier to print.

Onshape

That's all I'm going to do today, I'm traveling again tomorrow so later this week I'll figure out how to use one of the slicer programs and start writing firmware.

Parts

166
QtyValueFootprintReferences
771N4148Diode_THT:D_DO-35_SOD27_P7.62mm_HorizontalD1, D2, D10, D11, D12, D13, D14, D15, D16, D17, D18, D19, D20, D21, D22, D23 +61
77SW_PushPCM_marbastlib-mx:SW_MX_1uSW_1, SW_2, SW_3, SW_4, SW_5, SW_6, SW_7, SW_8, SW_9, SW_10, SW_A1, SW_B1, SW_BACKSLASH1, SW_BACKTICK1, SW_BKSP1, SW_C1 +61
7MountingHoleMountingHole:MountingHole_2.2mm_M2H1, H2, H3, H4, H5, H6, H7
2MX_stabPCM_marbastlib-mx:STAB_MX_P_2.25uS_LSHIFT1, S_RETURN1
1MX_stabPCM_marbastlib-mx:STAB_MX_P_6.25uS_SPACE1
1MX_stabPCM_marbastlib-mx:STAB_MX_2uS_BKSP1
1RaspberryPi_PicoModule:RaspberryPi_Pico_Common_THTA1

Questions

How big is the Keeb PCB?

It measures 317.9 × 129.1 mm and has 2 copper layers, 1.6 mm thick.

What parts does the Keeb use?

166 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 Keeb KiCad files?

From the djarty24/keeb repository on GitHub, at the commit this page was made from: the board is keeb.kicad_pcb and its schematic keeb.kicad_sch. PCBKit opens the board in the browser, with nothing to install.

Can I use the Keeb design in my own project?

Its repository states no licence, so its author keeps all rights: ask djarty24 before reusing the design.

Similar boards

  • 2 layers99.5 × 83.1 mmFrank, the printed circuit board in 3D

    Frank

    rh1tech/frank

    RP2350 Based Hardware Emulation Platform

    166 parts66GPL-3.0
  • 2 layers320.5 × 127.5 mmFernet, the printed circuit board in 3D

    Fernet

    cfbender/keyboards

    A collection of all of my keyboard projects

    166 parts64MPL-2.0
  • 2 layers200 × 100 mmQROMatch, the printed circuit board in 3D

    QROMatch

    profdc9/ModularTuner

    A Modular Antenna Tuner for a Phased Array Antenna System

    166 parts59
  • 2 layers136.8 × 199.1 mmSt225 20527, the printed circuit board in 3D

    St225 20527

    schlae/HardDriveInfo

    Repair info and schematics for mostly older MFM hard drives

    166 parts38
  • 2 layers100.8 × 108.6 mmCVMod8 V2 Main, the printed circuit board in 3D

    CVMod8 V2 Main

    Thorinair/Avalon-Harmonics

    A collection of Avalon Harmonics branded synthesizer modules.

    166 parts26CC-BY-SA-4.0
  • 2 layers296.5 × 124 mm5AhG3-18S, the printed circuit board in 3D

    5AhG3-18S

    doppelhub/Honda_Insight_LiBCM

    Replacement BCM for G1 Honda Insight Lithium Conversion

    166 parts25CC-BY-SA-4.0
  • 2 layers100 × 99.8 mmPre Ignition, the printed circuit board in 3D

    Pre Ignition

    OpenLogicEFI/Hardware

    Hardware is based off an open source project called Speeduino by Josh Stewart.

    166 parts19
  • 2 layers55.4 × 66 mmOwmBoard, the printed circuit board in 3D

    OwmBoard

    kanengomibako/EffectsPedals

    166 parts14Unlicense