Welcome to Cadans – an input system where interactions can continue beyond a single action.
From simple taps and holds to chords and multi-zone gestures – assign a wide range of actions to any event.
Or chain them together, turning events into a sequence that unfolds step by step, with intermediate and final actions.
Assignments can be defined per application and per keyboard layout, grouped by use case, and switched on the fly.
Only what you assign is affected – everything else remains native unless explicitly overridden.
Cadans runs on Windows and supports any keyboard and mouse, treating them as equal inputs within a single system.
Use individual capabilities: basic remapping, gesture controls, or a single key for custom functions in a specific app.
Or go further and build more complex logic – it’s entirely up to you.
Any
input→ with anyconditions→ can produce anyevent→ and become anassignmentin a system of actions and transitions
| Input | |
|---|---|
| Keyboard |
✅ Full keyboard support, including system modifiers and extended keys |
| Mouse |
✅ All mouse buttons and wheel scrolling are supported Wheel scrolling has no hold state by nature, so only trigger events are availableFor safety, LMB and RMB are available everywhere except the base level (gestures are allowed) |
| Conditions | |
| Layouts | ✅ Separate assignments per keyboard layout, plus global ones |
| Processes | ✅ Separate assignments per application, on demand |
| Layer activity (dynamic) |
✅ Active layers act as conditions and can change available assignments on the fly Note: in Cadans, layers are not modes you switch between. They are sets of assignments that stay active together and shape behavior in real time |
| Events | |
| Taps | ✅ |
| Holds | ✅ |
| Multi-threshold holds | ❌ |
| Chords / combos | ✅ |
| Custom modifiers | ✅ |
| Gestures | ✅ (in 9 independent zones) |
| Notes: |
✅ Keys and hotkeys without assigned events keep their native behavior
|
| Assignments | |
| Actions |
Any assigned event can trigger an action:
|
| Chains |
Assignments can continue into other assignments, forming chains of interactions. A single input can start a sequence that continues step by step. Assignments that lead to further steps still work on their own – continuation extends behavior rather than replacing it. There is no fixed depth or structure – chains can be as simple or as long as needed. |
| Behavior control |
Each assignment defines not only what happens, but how it behaves. Behavior can be controlled at multiple levels: global rules define default timing, gesture recognition, and interaction logic, while individual assignments can override these settings where needed. In addition, assignments can define their own execution and transition rules – how they resolve, whether they continue, and how the system reacts to further input. |
| Layers & composition |
Layers form another structural plane of the system: chains define how interactions unfold, while layers define how they are combined. Layers are logical sets of assignments. All active layers work at the same time, contributing to the current behavior. They are not just static configuration: layers can be enabled, disabled, or switched dynamically as part of a workflow. |
| This is how the system comes together: assigned events form chains that evolve over time, with fine-tuned behavior and their own actions, combined across dynamic layers and conditions. | |
| Other | |
| Platforms | |
| Requirements | ✅ No special hardware or firmware required – just run the program |
This is enough for a quick start: open the app, add your first assignments, and try them in practice.
Or enable a few preset layers – ready-made examples for different scenarios.
Use them as-is, edit, combine with your own layers, or treat them as templates for something completely different.
If you prefer to see how it looks first, with several examples including gestures, see Preset layers.
To see how it all works in detail, step by step:
- Step-by-step concepts – from basic events to gestures, conditions, layers, and how chains work and interact
- GUI detailed overview – every control, option, and interaction in the interface
- Creating assignments – building assignments in the GUI, with all behavior and chain options explained in context
Any kind of contribution is welcome!
- Suggest ideas for new features and improvements
- Contribute useful layers and custom functions
- Share the project with friends, colleagues, or your subscribers
- If you create videos – Cadans really shines in motion, and this kind of overview is still missing
- Support development directly: $ / ₿
🚧 The project is under active development – if you run into any issues, please report them.
