My Keyboard.io

Posted by Wxcafe on Fri 19 July 2019

My Keyboard.io

Over a year ago now I bought a keyboard, and I wanted to write about it then, but I figured I’d wait until I could type on it correctly and actually tell if it was a good keyboard.

Turns out, it took me about three weeks to learn how to type correctly, and it’s a really, really good keyboard… but I forgot about writing this 🤦 So here we go.

So. The keyboardio is a split, ergonomic, very expensive keyboard. It’s shipped with two “tent stands” that are basically tilted octopi that you can put the keyboard halves on to give them a tilt, two “center bars”, one flat and one tilted, that allow you to attach the two keyboard halves together, a usb-a to usb-c cable, and two rj45 cables, one very short and one longer, that are used to connect both halves of the keyboard… and of course both halves of the keyboard itself.

Personally I use both tented stands and the tilted center bar now, and basically use the keyboard like a normal single-body keyboard, except each half is tilted, but you can use it in any way you want. Each half has a camera screw mount on the bottom so you can even use it on tripods or camera arms I guess.

The layout is pretty different from what “standard” keyboards present. There’s basically three groups of keys: the fn keys, that you use with your palms, the ‘modifier’ keys ([ctrl],[backspace], [command/super], [shift]; and [shift], [alt], [space], [ctrl]), that you use with your thumbs, and finally the “character” keys that you use with the last four fingers (these also include [AltGR], [Enter], [PgUp] and [PgDn], a [num] key that switches to numpad mode, a [Prog] key that starts playing prog rock (uh, allows you to flash the firmware, more on that later), [esc], [tab], a [led] key that switches the led lighting mode, and finally the [any] key, which… outputs a random alphanumerical character). As I said previously though, it’s not too hard to get used to, and it’s actively more efficient once you’re used to it (also it reduced my wrist pains from “hurts a bit after a day of work” to “nonexistent even after 14 hours straight of typing”). The keys are shaped differently too, as in they follow the shape of fingers resting naturally on the keyboard.

So, yeah, this is a nice, comfortable, and weirdly-but-actually-pretty-well-laid-out keyboard. But there’s a few more things that make it worth the (admittedly very high) price:

  • First, the body is entirely made of wood, the keys are high-quality, and the whole thing is hand-assembled. It’s generally very well put together, and it looks really good and will last for a while.
  • Second, and most important: the firmware is open-source and entirely rewritable. The keyboard is basically an Arduino, and you can do anything you want with it.

Let’s talk about the build quality. Actually, let me show you a few pictures of the build, outside and (more interestingly) inside!

The rainbow colors are good...
The rainbow colors are good…
Look at that small rj45 cable! It's so cute!
Look at that small rj45 cable! It’s so cute!
Without the wooden enclosure...
Without the wooden enclosure…
The back of the PCBs have cute little messages! Thanks!
The back of the PCBs have cute little messages! Thanks!
The "octopi" that allow one to adjust the keyboard tilt
The “octopi” that allow one to adjust the keyboard tilt
The wooden enclosures
The wooden enclosures
Finally, the right half just opened up
Finally, the right half just opened up

Now, I said the firmware was open-source. And it is, it’s named Kaleidoscope. The repo you probably want is actually this one, though. It’s really easy to configure through the Model01-Firmware.ino file. This allows you to remap all the “useless” keys in the default layout, define new functions for these keys, create “layers” (basically alternate layout that you switch to/from through a shortcut), importing modules (libraries basically), change the LED patterns, use the expansion pins if you want… You can do anything, it’s just an arduino with a lot of inputs basically!! It’s great. My configuration is available here and is generally pretty simple to read. The only thing that might be surprising is the third keymap: [2] = KEYMAP_STACKED (). This is a keymap for Steno, as provided by GeminiPR, an implementation of Steno protocols for Kaleidoscope, which is imported by KALEIDOSCOPE_INIT_PLUGINS(GeminiPR, [...]);

Steno… Should I talk about steno? Alright, let me talk about steno quickly: Steno is an input method that allows one to type much, much faster than normal by pressing multiple keys at the same time (like one would on a piano, for example). The keys are then interpreted in the fixed order of the system to reconstruct words, or parts of words. It’s pretty involved to learn, but it’s amazing: the best touch typists can reach about 70 words per minute, while regular stenographers can write at 225 words per minute. The system is entirely customizable, so you can program on a steno keyboard (in fact the person who introduced me to the concept, @Stenoknight, writes python on their steno system). Historically, Steno was used for note taking in meetings and courtrooms, and the key presses made punches in a ribbon, which was then read back to make a readable document. Nowadays, since we have computers, we can have a program that does this translation automatically and in real time: the free and open-source software that does that is called Plover. When it comes to the KeyboardIO, it can be programmed through GeminiPR to switch to a serial communication mode, that works with plover. I’m still (very early…) in the process of learning steno, the position of the keys, the combinations and the vocabulary, but I’m very excited. It might not be very useful in everyday life (even though typing at even 150wpm would be so cool…) but it’s fun and interesting, so. There.

But yeah, the firmware allows you to switch to serial and then back to presenting a regular HID keyboard, seamlessly. It allows you to execute code on the keyboard, in fact I’m pretty sure you could reasonably implement a u2f device in the keyboard (tho you’re lacking a real secure element, I guess…) And it’s editable by someone like me, who doesn’t know shit about C or programming or anything like that. It’s great.

So… I’m not saying you should buy this keyboard, obviously. It’s really great, and it suits me really well, but it’s still very expensive, and it does take a little time getting used to. Was this post just an excuse to clean my keyboard? … maybe… But I also wanted finally make this, since it’s a tool I use a lot and I had been meaning to write about it for a while…