Tuesday, 27 January 2026

Small girth 8 graphs for keyboard wiring

This post is a less interesting follow up to my recent catalogue of girth 6 graphs for keyboard wiring, which give 4-key roll over (4KRO). As explained in my first keyboard and Graph Theory blog post, the idea here is applying these graphs to the design of diode-free computer keyboards where the bipartite matrix becomes a sparse scanning matrix. Using a graph with girth 8 gives 6-key rollover (6KRO), high enough not to be a practical limitation, unless perhaps for stenography? Sadly from a mathematical point of view these are mostly subgraphs of the Tutte Coxetter Graph (aka the Tutte 8 Cage), the unique smallest trivalent graph of girth 8.

Nodes, GPIO Edges, Keys Example Girth 8 graph(s) Example Keyboard(s)
11 12 Theta graph θ_{4,4,4}
12 13 Trivial addition to the above
13 14 Theta graph θ_{2,6,6}
14 16 Ring with two crossings, or this other Unnamed Graph. 32-key split
15 18 Unnamed Graph 36-key split Corne, Sweep, etc
16 19 Partial Tutte-Coxeter, or this Partial Tutte-Coxeter 38-key split Totem
17 20 Unnamed Graph, or this Unnamed Graph 20-key ChouChou
18 22 Partial Tutte-Coxeter UT22
19 23 Not in DB, but another partial TC
20 25 Pretty Partial Tutte-Coxeter
21 26 Not in DB, but another partial TC 26-key ʻākohekohe, 26-key smallcat
22 28 Partial Tutte-Coxeter 28-key Zilpzalp, 28-key Grumpy
23 30 Not in DB, partial version of next 30 key Hummingbird
24 32 Pretty Unnamed Graph, or a another partial TC 32-key Visorbearer
25 34 Not in DB, but another partial TC 34-key Le Chiffre
26 36 Partial Tutte-Coxetter Graph Gamma Omega TC36K
27 38 Not in DB, but another partial TC
28 40 Partial Tutte-Coxetter Graph 39-key Reviung39
29 42 Not in DB, but another partial TC 42-key Osprey
30 45 Tutte-Coxetter Graph 45-key Splaynck44-key Masonry
33 49 Unnamed graph (extended TC)
34 51 Unnamed Graph
36 54 Unnamed cubic graph My Slump52 has 52 keys
38 57 Unnamed Graph
40 60 F040A in the Foster Census
44 66 Unnamed graph Lots of 60% keyboards
48 72 Unnamed graph Lots of 70% keyboards
52 78 Unnamed graph
55 90 Unnamed graph
... ...

80 160 Unnamed graph

The rows above without a DB entry are trivial changes of the entry above/below, mostly partial Tutte-Coxetter Graphs. There are probably many other graphs just as good (like the entry with 24 nodes and 32 edges, and subgraphs of that), but I am reasonable sure the above edge counts are upper bounds.

The very small graphs are unlikely to be attractive unless size rules out a larger controller with more GPIO pins, as otherwise direct wiring is possible (one GPIO per key-switch) as in the 20-key ChouChou example listed above using an RP2040-Zero.

Currently the only 6KRO keyboard built using Graph Theory that I know of is my 36-key Gamma Omega TC36K. Monobody keyboards around that size are a good fit to many of the readily available Raspberry Pi RP2040 controllers which offer up to 30 GPIOs.

Other than partial Tutte-Coxeter graphs (as in my TC36K design), the following seem most interesting:

  • The 15 nodes with 18 edges graph would be good for a Bluetooth split 36-key keyboard using something like the ESP32-H2-Zero controller (with 15 GPIOs - not currently suppored in ZMK).
  • This 17 nodes for 20 edges graph includes two nodes of degree 5 so you could use it as-is to have a 5-way navigation button (see previous blog post) and 15 keys with 6KRO. That would work in a split wired keyboard using the RP2040-Zero controller or similar with 20 GPIOs, and with one or two pins spare so you could even have 16 keys per half or a combined ANO Directional Navigation and Scroll Wheel Rotary Encoder.
  • This 24 node and 32 edges graph would be be good for a Visorbearer-like monobody 32-key keyboard, using the PR2040 Pro Micro or Pico controller. Again with a few pins spare you would be able to add a 5-way navigation button (or two) by extending the graph (but only 4KRO with the navigation buttons used). 
  • Going larger, controllers like the Solder Party RP2350 Stamp XL have 48 GPIOs. At this scale there are multiple options with 1.5 keys per GPIO like F048A (40 nodes and 60 egdes), up to the 48 node 72 edge graph.  So you could make a 6KRO diode-free 60% or even 70% keyboard (if you had the patience to do the wiring).

Going even larger is possible, with 80 GPIOs you'd reach two keys per GPIO for a 160 key monster. However I'm not aware of any controller chips with enough GPIOs. You could use IO extenders, but at that point there's no reason not to just use diodes.

No comments:

Post a Comment