Skip to the content
PCBKitNew board
2 layers79.9 × 46.4 mmBubby, the printed circuit board in 3D

Pocket Chording Keyboard

Size
79.9 × 46.4 mm
Copper layers
2
Thickness
1.6 mm
Parts
9
Nets
29
Pads
61
Tracks, vias
0, 0
Pours
1
Routed
Not yet
KiCad
KiCad 8.0 (file 20240108)
Created
1 Sep 2024
Updated
7 Aug 2025

Overview

Bubby is an open-source printed circuit board by mikeysklar, from the mikeysklar/bubby repository on GitHub. It is a 2-layer board of 79.9 × 46.4 mm with 9 parts on 29 nets.

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

README

README.md

Screenshot

BUBBY - A Pocket Chording Keyboard

It uses seven keys with chording patterns for input. The display makes for an excellent stand-alone training experience. It can be used as a USB HID keyboard or storage drive. This a sturdy every day carry design. Some frills, mostly function.

Features:

  • Slim Form Factor
    • thinner than a deck of cards in all dimensions
  • 240x135 color LCD
    • view typed characters
  • Note Taking
    • save to flash
    • view as USB drive
  • Timer
    • chord speed practice
  • ESP32-S3 based
    • future BLE wireless HID option?
  • CircuitPython
  • Adafruit Feather Compatible
    • also works with Feather RP2040 (minus display code)
  • USB-C
    • computer/tablet/phone/pi HID interface
  • Battery
    • 350mAh battery w/charger

Screenshot

Enclosure

Screenshot

  • Designed in FreeCAD 0.21.2
  • Printed on Bambu Lab P1P
  • Dimensions (mm):
    • 80 x 46 x 12
  • Total Weight:
    • 40.6 grams

PCB design

Screenshot

  • PCB files are KiCAD 8.x

Bill of Materials

Screenshot

ItemSourcePart Number
ControllerAdafruitFeather ESP32-S3 TFT
Bat 350mAhAdafruitLiPo 3.7v ADA# 2750
ButtonsDigi-Key450-1657-ND
Pwr SwitchAliExpressMSKT-12G03
ScrewsAdafruitM2.5 Machine Screws / Stand-off

Bottom

Screenshot

  • Slim power switch on bottom.
  • Keychain hole option
    • works with smaller 150mAh battery

DIY PCB

Screenshot

  • Milled single sided on a Bantam Othermill.
    • traces PCB engraving bit 0.005 (mm)
    • drill holes 0.9 (mm)

Typing Speed

Screenshot

  • monkeytype
  • personal best :: 20 wpm
    • @ 100% acc
    • (left hand only)
  • typical is 16 - 18 wpm
  • limited by my own mental conversion of letters --> chords
  • a realistic goal is 25+ wpm, per hand

Why Bubby

Bubby is an affectionate nickname for a friend, peer or even grandmother (Yiddish). This pocket keyboard acting as a digital everyday carry device. It is the friend that accompanies you.

Why Chording

The Human <--> Machine interface has enormous potential for improvement. The most egregious issue is the keyboard. The QWERTY layout is designed to be ineffecient. Now with VR, AR and wearables it makes sense to remix the earlier chording designs into new discrete interfaces.

Just Why?

Screenshot

I hurt my knee. I had been running ultramarathons for ten years and needed surgery to clean things up. Immediately the twenty hours a week I had been putting into running were freed up. I read Bruce Schneier's book "A Hacker's Mind" which describes a student reciting Pi to one hundred decimal places by using a phone vibrating morse code patterns. I was inspried and built a BLE keyboard which used morse code communication. I slimmed it down into a Feather Rev TFT ESP32-S3 variation with vibrating motor and small built-in buttons. I realized that I like having a powered pocket keyboard / screen with some USB abilities. Also it would sure be nice to type faster.

Screenshot

I made five variations of bubby. I call the series "doug" after Douglas Engelbart who popularized chording nearly 60 years ago. The first one I wired up with a protoboard actually turned out the most functional. I went back to that layout in the end. The other versions I tried going to had irritatingly small SMT buttons that were uncomfortable and would lift off the PCB from pressing too hard. Larger keys and PCBs like the stick and ring designs which use Kailh low profile Choc keys were too bulky and made a slight rattle. Sturdy and compact won out.

Lessons Learned

Screenshot

  • Memorizing Chords - Use muscle memory. Practice the patterns for single, double, triple and four digit combos. Then learn the lesser used keys with the thumb modifier. The more fingers that are pressing the less frequently the letter is typically used. Do not try to memorize with mnemonics, imagery or other memory tricks. I wasted a lot of time making elaborate charts and descriptions that were unnecessary. Getting faster with the chords has been the most rewarding part of the project.

  • Comfort - All enclosure edges need to be rounded. One straight edge becomes uncomfortable to hold and to carry in a pocket.

  • Gloves - An unexpected, but welcome finding was that typing with gloves using real buttons was quite natural.

  • Power Switch - I ended up putting it right below the Feathers USB-C port on the bottom of the PCB. It is accesible and can be flicked on and off with one hand. It is not ideal in that the board needs to be spun around to flick the switch. I ran out of convenient locations so went with easy to place.

  • Button Click Noise - I wanted silent buttons. The blue right angle ones produce a slight click noise. Experimenting with Red Kailh buttons were silent when pressed, but had too many other issues for a pocket form factor.

  • BLE / WiFi - I'm using a board that works well with WiFi and is just now getting BLE HID support (not fully there with CircuitPython 9.2.x). My preference has been to not use any wireless. A stand alone device that does not require pairing has been a pleasure. I do plug it into USB-C to read my notes, charge the battery and practice on monkeytype. An Adafruit Feather RP2040 works well here with pin changes and display code commented out. I really like the display though.

  • On the Go - Running or walking it is easy to take notes with this form factor. I do most of my practice going through the alphabet and chord patterns while walking the dog.

  • Fidget Toy - Another realization after a month of every day carry is that I have been using bubby as a fidget toy. It provides a calming flow state practicing the chords and letters.

Chords

Screenshot

  • Tested with CircuitPython 9.1.3

    • libraries:
      • adafruit_hid
      • adafruit_bitmap_font
      • adafruit_display_text
      • adafruit_ticks
    • code: cp bubby.py CIRCUITPY/code.py
  • Chording ascii table, digits, punctuation, symbols and modifiers are all built-in. Firmware includes five additional custom modifiers shown in the table below.

KeyCode
Backspace124
Space134
ClearB-124
USBB-134
SaveG-124
xxxG-134
TimerY-124
xxxY-134
SymbolButton ColorDescription
BBlue (inner/left thumb)White space / punctuation
GGreen (center thumb)Alpha characters
YYellow (outer/right thumb)Numerics
KeyPinkyRingMiddleIndexThumb
ax
bxg
cxx
dxxx
ex
fxxg
gxg
hxg
ix
jxxxg
kxxg
lxx
mxg
nxx
oxx
pxxx
qxxxxg
rxx
sx
txx
uxxxx
vxxg
wxxg
xxxg
yxxg
zxxxg
Space.b
Tab.b
Shiftg
Altb
Controly
Enter..b
ONE.y
TWO.y
THREE.y
FOUR.y
FIVE..y
SIX..y
SEVEN..y
EIGHT..y
NINE..y
ZERO...y
period.b
comma..b
forward_slash..b
grave_accent....b
minus.b
equals..b
left_bracket..b
right_bracket..b
backslash..b
semicolon...b
quote...b
backspace..b
right_arrow...y
left_arrow...y
up_arrow.y
down_arrow..y
escape..y
Home...
End...
Windows...g
Delete...g

Schematic

Screenshot

Parts

9
QtyValueFootprintReferences
71825027-8Button_Switch_THT:SW2_1825027-C_TECSW1, SW2, SW3, SW4, SW5, SW6, SW7
1Adafruit_Feather_GenericModule:Adafruit_FeatherA1
1SW_SPSTButton_Switch_SMD:slide-switch-rt-angle-msk-12c03SW8

Questions

How big is the Bubby PCB?

It measures 79.9 × 46.4 mm and has 2 copper layers, 1.6 mm thick.

What parts does the Bubby use?

9 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 Bubby KiCad files?

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

Can I use the Bubby design in my own project?

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

Similar boards

  • 2 layers103 × 30.5 mmTS Back Endcap, the printed circuit board in 3D

    TS Back Endcap

    EEVengers/ThunderScope

    ThunderScope GitHub Repo

    9 parts1.3kMIT
  • 2 layers31.8 × 47.6 mmNGC 38 connector, the printed circuit board in 3D

    NGC 38 connector

    rusefi/rusefi

    rusefi - GPL internal combustion engine control unit

    9 parts1.2k
  • 2 layers24 × 27.3 mmExpansion Card Retrofit, the printed circuit board in 3D

    Expansion Card Retrofit

    FrameworkComputer/ExpansionCards

    Reference designs and documentation to create Expansion Cards for the Framework Laptop

    9 parts1.1kCC-BY-4.0
  • 2 layers15.6 × 17.3 mmSKR Mini TFT Thermistor Board, the printed circuit board in 3D

    SKR Mini TFT Thermistor Board

    VoronDesign/Voron-Hardware

    Cool Hardware designed by the Voron Design group

    9 parts1.1kGPL-3.0
  • 2 layers39.1 × 49.5 mmLearnoliver, the printed circuit board in 3D

    Learnoliver

    hackclub/OnBoard

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

    9 parts915
  • 2 layers17.4 × 16.9 mmToolhead, the printed circuit board in 3D

    Toolhead

    tanaes/whopping_Voron_mods

    9 parts787GPL-3.0
  • 2 layers9.8 × 108 mmExpander, the printed circuit board in 3D

    Expander

    wntrblm/Castor_and_Pollux

    A Juno-inspired dual oscillator

    9 parts587
  • 2 layersKeyboard after, the printed circuit board in 3D

    Keyboard after

    adamws/kicad-kbplacer

    KiCad plugin for automatic keyboard's key placement and routing

    9 parts547GPL-3.0