Skip to content

uqqu/Cadans

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

76 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

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.

Overview

Any input → with any conditions → can produce any event → and become an assignment in a system of actions and transitions

Input
Keyboard

✅ Full keyboard support, including system modifiers and extended keys

⚠️ Alt and Win: hold-based events only

Mouse

✅ All mouse buttons and wheel scrolling are supported

Wheel scrolling has no hold state by nature, so only trigger events are available
For 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

⚠️ Each key or button can have only one hold-type behavior: hold, chord, or modifier.
Maximum per key: tap + one hold-type + any number of gestures (in any zones)

Event interactions and interruptions are carefully designed to behave consistently and intuitively across cases. If you find anything that still feels off, please report it
Assignments
Actions Any assigned event can trigger an action:
  • text or character input
  • key simulation
  • function calls (not limited to text or input)
  • helper types
Tap and hold can have separate press and release actions for full control.
Chains

Assignments can continue into other assignments, forming chains of interactions.

A single input can start a sequence that continues step by step.
Each step can either execute an action or wait for further input.

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.
Even a single action fits this model – it is simply a one-step chain, resolving immediately.

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.
This gives precise control over interaction flow.

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 allows modifying which assignments are available at any moment, without replacing or breaking existing interactions.

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 ⚠️ Windows only
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:


🤝 Support

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.