The kmonad project is the closest alternative for this project. It is also more mature and has had many more contributions than kanata.
- MacOS support
- Different features
Limitations that don't affect me:
- I only use Windows and Linux (PRs for MacOS support are welcome though!)
- My personal layout in QMK is fully replicable with the keyberon library's features
Why I don't use kmonad:
- Double-tapping a tap-hold key does not behave how I want it to
- Some key sequences with tap-hold keys don't behave how I want:
(press lsft) (press a) (release lsft) (release a)
(a is a tap-hold key)- The above outputs
a
in kmonad, but I want it to outputA
- kanata supports sending mouse buttons but kmonad does not
The issues listed are all fixable in kmonad and I hope they are one day! For me though, I don't know Haskell well enough to poke around the kmonad codebase and attempt fixing these. That's why I instead built kanata based off of the excellent work that had already gone into the keyberon, ktrl, and kbremap projects.
If you want to see which features are supported in kanata, the sample configuration and features list in the README should hopefully provide insight.
I dogfood kanata myself and it works great for my use cases. If you don't use any of the missing features from kmonad or are willing to part with them (or implement them), give kanata a try!