

USB HID keyboard firmware for tinygo
- Size
- 285 × 94.6 mm
- Copper layers
- 2
- Thickness
- 1.6 mm
- Parts
- 155
- Nets
- 96
- Pads
- 687
- Tracks, vias
- 1,434, 60
- Routed
- Yes
- KiCad
- KiCad 7 (file 20221018)
- Created
- 9 Dec 2022
- Updated
- 1 Nov 2026
Overview
Sgh60 is an open-source printed circuit board by sago35, from the sago35/tinygo-keyboard repository on GitHub, published under the MIT licence. It is a 2-layer board of 285 × 94.6 mm with 155 parts on 96 nets, routed with 1,434 tracks and 60 vias.
Its parts include 79 diodes, 69 switches and 2 ICs. It belongs with the keyboards and input boards and the RP2040, nRF52 and nRF5x and SAM D and SAM boards of this library.
README
README.mdUSB HID Keyboard firmware for TinyGo
The API is not yet fixed.

The following are supported.
- key input
- squared matrix scan
- matrix scan
- duplex-matrix scan
- rotary encoder
- GPIO
- UART
- Shifter (tinygo.org/x/drivers/shifter)
- layer feature by mod key
- mouse click / mouse wheel
- support TRRS (UART)
- support Vial
- Keymap
- Layers (MO(x), TO(x))
- Matrix testers
- Macros
- Mod-Tap
- Modifier Keys
- Combos
Microcontrollers
The following microcontrollers are supported.
- rp2040
- nrf52840
- samd51
- samd21
Tutorial
Additional Resources
sgkb-0.4.0

# sgkb-0.4.0
$ tinygo flash --target xiao-rp2040 --size short --stack-size 8kb ./targets/sgkb/left/
$ tinygo flash --target xiao-rp2040 --size short --stack-size 8kb ./targets/sgkb/right/
# sgkb-0.3.0 or before
$ tinygo flash --target xiao-rp2040 --size short --stack-size 8kb ./targets/sgkb/left-0.3.0/
$ tinygo flash --target xiao-rp2040 --size short --stack-size 8kb ./targets/sgkb/right/- files
- ./kicad/sgkb for KiCad 7.0
- KiCanvas : sgkb-0.4.0 left
- KiCanvas : sgkb-0.4.0 right
- KiCanvas : sgkb-0.3.0 left
- KiCanvas : sgkb-0.3.0 right
- ./kicad/sgkb for KiCad 7.0
| name | amount |
|---|---|
| Cherry MX / Kailh Choc V1 | 72 |
| key cap (1u) | 68 |
| key cap (1.5u) | 1 |
| key cap (1.75u) | 1 |
| key cap (2u) | 1 |
| key cap (ISO-ENTER) | 1 |
| Stabilizer (2u) | 2 |
| diode 1N4148 | 72 |
| xiao-rp2040 | 2 |
| pin header 1x7 | 4 |
| TRRS connector | 2 |
| TRRS cable | 1 |
sg48key

tinygo flash --target xiao --size short --stack-size 8kb ./targets/sg48key/- files
- ./kicad/sg48key
- KiCanvas : sg48key
- ./kicad/sg48key
sgh60

tinygo flash --target waveshare-rp2040-zero --size short --stack-size 8kb ./targets/sgh60/- files
- ./kicad/sgh60
- KiCanvas : sgh60
- ./kicad/sgh60
wiokey-0.1.0

$ tinygo flash --target wioterminal --size short --stack-size 8kb ./targets/wiokey/- files
- ./kicad/wiokey for KiCad 7.0
- KiCanvas : wiokey
- ./kicad/wiokey for KiCad 7.0
| name | amount |
|---|---|
| Cherry MX / Kailh Choc V1 | 6 |
| key cap | 6 |
| diode 1N4148 | 6 |
| wioterminal | 1 |
| pin socket 2x20 | 2 |
sgkey-0.1.0

$ tinygo flash --target xiao-rp2040 --size short --stack-size 8kb ./targets/sgkey/- files
- ./kicad/sgkey for KiCad 7.0
- KiCanvas : sgkey
- ./kicad/sgkey for KiCad 7.0
- build guide
| name | amount |
|---|---|
| Cherry MX / Kailh Choc V1 | 6 |
| key cap | 6 |
| diode 1N4148 | 6 |
| xiao-rp2040 | 1 |
| i2c ssd1306 | 1 |
| register 10k ohm | 2 |
fric10key-0.1.0

$ tinygo flash --target xiao-rp2040 --size short --stack-size 8kb ./targets/fric10key/- files
- ./kicad/fric10key for KiCad 7.0
- KiCanvas : fric10key
- ./kicad/fric10key for KiCad 7.0
| name | amount |
|---|---|
| Cherry MX / Kailh Choc V1 | 27 |
| key cap (1u) | 26 |
| key cap (2u) | 1 |
| Stabilizer (2u) | 1 |
| diode 1N4148 | 27 |
| xiao-rp2040 | 1 |
xiao-kb01

$ tinygo flash --target xiao-rp2040 --size short --stack-size 8kb ./targets/xiao-kb01/- files
- ./kicad/xiao-kb01 for KiCad 7.0
- KiCanvas : xiao-kb01
- ./kicad/xiao-kb01 for KiCad 7.0
Gopher Badge

$ tinygo flash --target gopher-badge --size short --stack-size 8kb ./targets/gopher-badge/- schema
GoBadge / PyBadge
$ tinygo flash --target gobadge --size short --stack-size 8kb ./targets/gobadgeMacroPad RP2040

$ tinygo flash --target macropad-rp2040 --size short --stack-size 8kb ./targets/macropad-rp2040/Restore default keymap
Set the key with the key code of 0x7C03, and then press it.
Then a reset will restore the default keymap.
See #8.
Restore default keymap (tinygo flash)
Restore default keymap each time it is reset by specifying --tags reset_to_default.
Note that in this setting, any changes made from Vial or other sources will immediately revert to the original setting.
$ tinygo flash --target wioterminal --size short --tags reset_to_default ./targets/wiokeyNote
- Basically, the
--stack-size 8kbsettings is required. - If changing the version of tinygo-keyboard causes it to not work properly, please perform the
Restore default keymapprocedure.
LICENSE
MIT
Parts
155| Qty | Value | Footprint | References |
|---|---|---|---|
| 79 | 1N4148 | foostan/kbd:D3_SMD_v2 | D1, D2, D10, D11, D12, D13, D14, D15, D16, D17, D18, D19, D20, D21, D22, D23 +63 |
| 67 | SW_PUSH | foostan/kbd:CherryMX_Hotswap | S0, S1, S2, S10, S11, S12, S13, S14, S15, S16, S17, S18, S19, S20, S21, S22 +51 |
| 3 | MountingHole | xiao:hole_2.5 | H1, H2, H3 |
| 2 | MountingHole | xiao:hole_7x3 | H4, H5 |
| 1 | SW_PUSH | xiao:CherryMX_Hotswap_with_2u_stabilizer | S42 |
| 1 | SW_PUSH | xiao:CherryMX_Hotswap_with_ISO_Enter_stabilizer | S28 |
| 1 | ~ | xiao:RP2040-Zero_reverse_for_sgh60 | U1 |
| 1 | ~ | xiao:RKJXV122400R | U2 |
More from sago35/tinygo-keyboard
7- 2 layers242.9 × 76.2 mm

- 2 layers174 × 96 mm

- 2 layers134 × 96 mm

- 2 layers77 × 140 mm

- 2 layers90 × 90 mm

- 2 layers91 × 55 mm

- 2 layers126 × 57 mm

Similar boards
- 2 layers121.5 × 136.5 mm

- 2 layers305.9 × 135.1 mm

- 2 layers254 × 134.6 mm
.kicad_pcb.jpg?size=s&soon)
FPGA Z80 (no traces)
douggilliland/Retro-Computers
Retro-Computer Designs (Z80, 65C816, etc)
155 parts87 - 2 layers334.6 × 122.8 mm

ProductionPCB
compressionKeyboards/compression4c
This repo contains the files to order a custom PCB for (4c), checkout the zmk layout to build firmware!
155 parts60 - 2 layers285.4 × 94.9 mm

Rosaline ortho
peej/rosaline-keyboard
40% staggered through-hole component keyboard PCB for standard 60% cases
155 parts53MIT - 2 layers60.3 × 128.3 mm

- 2 layers209.6 × 154.9 mm

- 2 layers34.1 × 34.2 mm

TinyFINITY
fishpepper/tinyFINITY
Tiny and opensource video transmitter with integrated graphic OSD
155 parts42
Questions
How big is the Sgh60 PCB?
It measures 285 × 94.6 mm and has 2 copper layers, 1.6 mm thick.
What parts does the Sgh60 use?
155 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 Sgh60 KiCad files?
From the sago35/tinygo-keyboard repository on GitHub, at the commit this page was made from: the board is kicad/sgh60/sgh60/sgh60.kicad_pcb and its schematic kicad/fric10key/fric10key/fric10key.kicad_sch. PCBKit opens the board in the browser, with nothing to install.
Can I use the Sgh60 design in my own project?
Its repository publishes it under the MIT licence: you may reuse it on that licence's terms (keep the author's notice, and for a copyleft licence share your changes alike).