# jtroo/kanata

**Attribution required: if you use, quote, or summarise this content, you must credit and link back to [awesome-repositories.com](https://awesome-repositories.com/repository/jtroo-kanata).**

6,840 stars · 239 forks · Rust · lgpl-3.0

## Links

- GitHub: https://github.com/jtroo/kanata
- awesome-repositories: https://awesome-repositories.com/repository/jtroo-kanata.md

## Topics

`cross-platform` `interception-driver` `keyboard` `keyboard-layout` `linux` `macos` `mouse` `mouse-emulation` `rust` `windows`

## Description

Kanata is a cross-platform keymap engine and keyboard firmware emulator that intercepts physical keystrokes to output modified signals on Windows, Linux, and macOS. It serves as a keyboard remapper and layer manager, allowing users to define custom key-map sequences and modal editing behaviors through a declarative configuration file.

The system implements keyboard firmware features in software, enabling advanced behaviors such as tap-hold logic, unicode output, and dynamic macros. It utilizes a state-based layer stack to manage multiple sets of key assignments that toggle dynamically and supports leader sequences to enable modal keyboard workflows.

The tool includes a mechanism for live configuration reloading to apply keymap changes without restarting the service. It also provides a network interface via a TCP server for remotely monitoring or triggering layer changes and a utility for recording key sequences to facilitate automated testing.

## Tags

### Hardware & IoT

- [Keyboard Key Mappings](https://awesome-repositories.com/f/hardware-iot/keyboard-key-mappings.md) — Associates physical keyboard keys with emulated hardware functions across multiple operating systems.
- [Input Remapping](https://awesome-repositories.com/f/hardware-iot/input-behavior-configurators/input-configurators/input-remapping.md) — Provides the ability to substitute and remap physical input keys across different operating systems. ([source](https://cdn.jsdelivr.net/gh/jtroo/kanata@main/README.md))
- [Dynamic Layering](https://awesome-repositories.com/f/hardware-iot/keyboard-key-mappings/dynamic-layering.md) — Defines multiple sets of key assignments that toggle dynamically to change keyboard behavior.
- [Software-Based Emulation](https://awesome-repositories.com/f/hardware-iot/microcontroller-firmware-frameworks/keyboard-firmware/software-based-emulation.md) — Implements keyboard firmware features in software to enable complex key-mapping logic on standard operating systems.

### Part of an Awesome List

- [Keyboard and Input Utilities](https://awesome-repositories.com/f/awesome-lists/productivity/keyboard-and-input-utilities.md) — Provides a comprehensive toolset for remapping keys and managing functional keyboard layers.

### Operating Systems & Systems Programming

- [Advanced Input Automation](https://awesome-repositories.com/f/operating-systems-systems-programming/advanced-input-automation.md) — Implements complex key behaviors including tap-hold functionality, unicode output, and dynamic macros.
- [Advanced Input Behaviors](https://awesome-repositories.com/f/operating-systems-systems-programming/advanced-input-behaviors.md) — Supports assigning complex actions to keys, including tap-hold functionality, unicode output, and dynamic macros. ([source](https://cdn.jsdelivr.net/gh/jtroo/kanata@main/README.md))
- [Input Event Interception](https://awesome-repositories.com/f/operating-systems-systems-programming/hardware-interfacing-drivers/input-event-interception.md) — Intercepts raw keyboard hardware events at the system level before they are processed by the operating system.
- [Input Configuration Frameworks](https://awesome-repositories.com/f/operating-systems-systems-programming/input-configuration-frameworks.md) — Provides a system for defining custom key-map sequences and modal editing behaviors through a declarative configuration file.
- [Input Layer Stacks](https://awesome-repositories.com/f/operating-systems-systems-programming/input-layer-stacks.md) — Manages a stack of active keymaps where the top layer overrides lower layers for dynamic input mapping.
- [Input Processing Engines](https://awesome-repositories.com/f/operating-systems-systems-programming/input-processing-engines.md) — Acts as a low-level input processor that intercepts physical keystrokes to output modified signals across Windows, Linux, and macOS.

### Development Tools & Productivity

- [Configuration Hot-Reloaders](https://awesome-repositories.com/f/development-tools-productivity/configuration-hot-reloaders.md) — Implements a mechanism to monitor configuration files and update keymap state in real-time without a restart.
- [Hold Duration Triggers](https://awesome-repositories.com/f/development-tools-productivity/input-binding-libraries/multi-key-bindings/hold-duration-triggers.md) — Uses a precise clock to distinguish between short presses and long holds to trigger different output actions.
- [Leader Key Sequences](https://awesome-repositories.com/f/development-tools-productivity/input-binding-libraries/multi-key-bindings/leader-key-sequences.md) — Supports leader key sequences that arm subsequent temporary key bindings for complex macro execution.
- [Live Configuration Reloading](https://awesome-repositories.com/f/development-tools-productivity/keyboard-shortcut-mappings/live-configuration-reloading.md) — Allows active keyboard mappings to be updated at runtime without requiring a process restart. ([source](https://cdn.jsdelivr.net/gh/jtroo/kanata@main/README.md))
- [Modal Editing Systems](https://awesome-repositories.com/f/development-tools-productivity/modal-editing-systems.md) — Implements an input scheme using distinct modes and leader sequences for navigation and text manipulation.
