A couple of months ago, we released a firmware update that included fully reworked Superkeys, a feature that had been in beta for over four years.
Now, they "simply work", but many of you have requested a development story on how we were able to fix the Superkeys, so here we are.
What are Superkeys?
For those of you who don't know what Superkeys are, here's a quick recap: Superkeys let you assign five functions to one key, depending on how you press them: tap, hold, tap&hold, 2-tap and 2-tap and hold.

The keyboard determines which function to output based on timeouts you can configure.
For example, by default, if you press the key for more than 200 ms, it will output HOLD. Or if you press the key twice within 250 ms, it will output 2-tap.


The problem with Superkeys
In our first attempts, back in 2021, Superkeys were extremely slow because they always waited for the next tap timeout, even if only TAP and HOLD were configured.
That was our first big step; if nothing were set after HOLD, Superkeys would not wait.
However, the most challenging part was making modifiers and layer changes feel "natural" on HOLD.
When typing, we expect modifiers to trigger the moment we press the following key, like when you press SHIFT + a to get a capital A. But at the same time, we tend to "roll" our keys when typing, meaning that we press the following key without fully releasing the previous one.

This is a huge problem for Superkeys. If we set them NOT to trigger when you roll your keys, you'd have to wait the HOLD timeout for the modifier to work, and that can become annoying fast.
If we set Superkeys to trigger the HOLD the moment you press the following key, you'd get plenty of accidental modifiers. And that's even worse.
We attempted to add another setting (minimum hold timeout) that only applied in that scenario, but it still didn't feel natural. You had to set it up too high not to get accidental modifiers.


It seems like an impossible problem. The keyboard can't read your mind.
Fortunately, we all have a "tell".
How we fixed Superkeys
When we don't want the modifier, we roll our fingers faster, which means we release the first key more quickly. The keyboard can measure that "release speed" and decide. That's the "overlap threshold" you can see in the settings. The higher the threshold, the less likely you'll get the modifier.


Additionally, we maintained the "minimum hold timeout". If you release the key before that time, you'll NEVER get a HOLD. It serves as an additional safeguard to prevent accidental modifiers.
There's also another setting: minimum prior interval. It measures the time elapsed between the previous keypress and the key that has the modifier. If it's lower than the time set, the HOLD function won't trigger.

This is useful because we usually pause for a split second before intentionally pressing a modifier, so the time elapsed is higher than when we type normally.
If you'd like to explore this logic in more detail, here's a flowchart that explains it.
To make things more complicated, these settings only apply when a layer change or a modifier is on hold, so we had to make the firmware "filter" the Superkeys with that configuration.
And that is just the main thing; here's the rest we fixed.
- Now you can add multiple modifiers on hold; before, they didn't "hold".
- We fixed a bug that prevented you from using a Superkey in combination with another Superkey.
- We also addressed an issue where modifiers wouldn't work on Tap&Hold onwards.
- Caps Lock now works when assigned to a Superkey.
- We fixed a bug where modifiers on a Superkey would affect the previous key.
- We address an issue where layer changes on Superkeys would always return to layer 1.
- Now you can assign the LED toggle to HOLD.
- We fixed a bug where shifting to a layer using a Superkey would only allow Superkeys on those layers to work on Tap and Hold.
- Now, when you hold a Superkey, it will repeat the function on hold while holding it.
- We also fixed a bug where Superkeys didn't work with One-Shot modifiers.
That's it, although I'm probably leaving some minor bugs out.
Pending minor bugs
Nonetheless, Superkeys are still not perfect. Some minor bugs have surfaced with the new release.
For example, if you tap a superkey multiple times, you get 2-tap instead of multiple taps, and Fast Superkeys don't interrupt the one-shot layer timeout.
We'll tackle them in the next update.
Once again, thank you so much to all of you who helped polish the Superkeys through your beta testing and detailed bug reports.
And if you want to know more about Superkeys, here are some useful links on how to use and configure Superkeys or utilize them as homerow modifiers.
Until the next one!