I built a column staggered keyboard with firmware written in Rust!

This page summarizes the projects mentioned and recommended in the original post on /r/rust

Our great sponsors
  • WorkOS - The modern identity platform for B2B SaaS
  • InfluxDB - Power Real-Time Data Analytics at Scale
  • SaaSHub - Software Alternatives and Reviews
  • egboard

    Ergonomic Keyboard with custom firmware in Rust.

  • I'm quite happy with the result and have been daily driving the board for almost two months. The typing experience is greatly improved as the placing of the keys is based around my hand shape. Additional information including the hardware files and the pre-built firmware are available on GitHub. Thank you all for joining me on this adventure and to all the crate maintainers for allowing people like me to build things we never thought we could.

  • qmk_firmware

    Open-source keyboard firmware for Atmel AVR and Arm USB families

  • I had been using an ortholinear keyboard based around the Planck EZ running the QMK firmware for a year. I was quite happy with the design and loved the ergonomics of not having to move my hand between the keyboard and the mouse as QMK allows for mouse control via the keyboard. But one thing that bugged me was the toggling behavior of one-shot-modifier keys, basically when you double tapped on a modifier, QMK locks the modifier until you double tap again to unlock it. This meant that if somehow any modifier was locked and I tried using the board as usual it wouldn't work as expected until I realize which modifier was toggled and double-tap it. QMK is quite extensible but I couldn't find any way to toggle off this feature.

  • WorkOS

    The modern identity platform for B2B SaaS. The APIs are flexible and easy-to-use, supporting authentication, user identity, and complex enterprise features like SSO and SCIM provisioning.

    WorkOS logo
  • rp-hal

    A Rust Embedded-HAL for the rp series microcontrollers

  • About the same time, I was learning Rust and discovered how it could be used on embedded targets from Low Level Learning on YouTube, the video introduced me to the amazing rp-hal crate that provides abstractions to talk to the Raspberry Pi Pico microcontroller. Getting used to the no_std mode took some time, the most challenging was not being able to collect an iterator to a container.

  • defmt

    Efficient, deferred formatting for logging on embedded systems

  • As someone who had only done embedded programming in the Arduino IDE, utilizing the defmt crate for logging with OpenOCD and GDB was an amazing experience. Although I still had no idea on to implement USB-HID for actually sending the key reports, until I discovered the usbd-human-interface-device crate and everything became so much easier. I just needed to create an iterator over Keyboard events and the crate would handle the rest as an added benefit the crate also supports multiple devices, so adding mouse support was as easy as creating a separate iterator over WheelMouseReport.

  • usbd-human-interface-device

    Batteries included rust USB HID library for usb-device

  • As someone who had only done embedded programming in the Arduino IDE, utilizing the defmt crate for logging with OpenOCD and GDB was an amazing experience. Although I still had no idea on to implement USB-HID for actually sending the key reports, until I discovered the usbd-human-interface-device crate and everything became so much easier. I just needed to create an iterator over Keyboard events and the crate would handle the rest as an added benefit the crate also supports multiple devices, so adding mouse support was as easy as creating a separate iterator over WheelMouseReport.

  • InfluxDB

    Power Real-Time Data Analytics at Scale. Get real-time insights from all types of time series data with InfluxDB. Ingest, query, and analyze billions of data points in real-time with unbounded cardinality.

    InfluxDB logo
NOTE: The number of mentions on this list indicates mentions on common posts plus user suggested alternatives. Hence, a higher number means a more popular project.

Suggest a related project

Related posts