Our latest Oryx feature is another creation from Pascal Getreuer (of Achordion and now Chordal Hold fame) called Tap Flow. It's designed to make dual-function keys, especially home-row mods, easier to use while being more subtle than Chordal Hold.

Tap Flow is a small tweak. When enabled, you have a new timeout you can adjust: the Tap Flow timeout. This is a length of time in which dual-function keys pressed after other keys will always register their tapped action. Basically, when you're in the middle of typing quickly, you're very unlikely to trigger held actions by mistake. You have to be slightly more deliberate with your hold to trigger it.

In other words, Tap Flow will tend to err on the direction of the tap function of a key rather than its hold function in the middle of typing.

Tap Flow demo

Imagine the following: You use a QWERTY layout with Shift on your F key and you're typing "my good friend". The "fr" bigram is easy to type quickly because "r" is right above "f". You can basically roll your hand for these two letters. Without Tap Flow, you might end up getting "Riend" because you're not letting go of "f" quickly enough for it to register as just a tap. With default dual-function keys, the fix is practicing a crisp release of the "f" key for sequences like this, avoiding rolling. This takes time to practice, though, and some people find it frustrating even after working at it for a while.

Home-row mods in Oryx
Of course, you could also use the home-row mods on the opposite hand if you have them, but let's assume we're using one hand.

Tap Flow flips this. With Tap Flow, rolling quickly from "f" to "r" will always give you "fr", so you won't accidentally trigger held actions in the middle of sentences anymore. Great, right?

Home-row mods in Oryx
Here's a case where you may run into issues.

Well, it's important to note this happens all the time now. So, let's say I want to type "press the Enter key". To type "Enter", I need to hold "f" (my dual-function Shift key) and hit "e". This is an even easier bigram to do quickly because my fingers are almost already in position — my middle finger just needs to shoot up. With Tap Flow, I need to pause before holding down the "f" key for a beat to make sure I actually get "Enter" and not "fenter". So, Tap Flow makes triggering your held actions quickly a little harder.

Tap Flow demo of the wrong output

Configuring Tap Flow

Tap Flow has just one explicit setting when enabled: The Tap Flow timeout. That said, because it deals with dual-function keys, there are many other settings that interact with it and may affect how you want to set it up. 150ms is the default timeout, and this is a good place to start for most people. If you find you're getting a lot of accidental tapped actions (like "fenter" above), try lowering the timeout. If you're still getting accidental held actions, try raising it. We found low values of 100ms or less worked best in our testing, but we're already quite used to home-row mods at ZSA. You may prefer something higher especially early on.

The flow tap setting in Oryx

After using Tap Flow for some time, you can adjust your tapping term, too. You don't have to, and I wouldn't recommend it right away, but as you get your Tap Flow timeout dialed in, you may also be able to lower your tapping term a little bit because there isn't as much risk of accidental held actions, especially if you use Permissive Hold (a setting that will prefer the held action of dual-function keys in more cases — largely the opposite of Tap Flow). This can make your keyboard feel more responsive.

It's also worth noting that Tap Flow doesn't completely overwrite Permissive Hold, but it does take priority. So your dual-function keys will have a shorter period of Tap Flow where Permissive Hold has no effect, and then the traditional tapping term window where Permissive Hold does work. If that's confusing, don't worry about it for now. There are some dual-function settings interactions like this that only start to matter once you have the bigger things (tapping term, Tap Flow timeout, your overall layout setup, etc.) really dialed in, and many people never have to worry about this level of configuration at all.

Who is Tap Flow for?

It might sound like Tap Flow is trading one issue for another, but there is a real benefit to preferring Tap Flow to the default dual-function key behavior, especially with things like home-row mods. Getting two tapped actions is rarely a problem. If I happen to type "fenter", it's a quick fix that shouldn't ruin anything. On the flip side, "Riend" isn't that bad either, but it does start to get worrying when accidentally triggering Ctrl or Cmd shortcuts. An inadvertent shortcut activation (Ctrl+A, Ctrl+Q, etc.) can be quite annoying and even disastrous at worst.

Even people who are very used to home-row mods make typos from time to time — it's just the nature of that kind of setup (and of using a keyboard, really). I've used home-row mods for years and I'm not perfect, especially when typing quickly. So, if you're going to make some typos from time to time anyway, would you rather it be an nondestructive extra letter or a potentially-work-erasing shortcut activation? That's the key idea behind Tap Flow. If you feel like you've been close to making home-row mods work but are frustrated by accidental held activations, give Tap Flow a try. It's not a magic fix for every case, but it's the safer approach to home-row mods, and it may feel more intuitive to you.