[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-5575":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":9,"htmlUrl":10,"language":11,"languages":10,"totalLinesOfCode":10,"stars":12,"forks":13,"watchers":14,"openIssues":15,"contributorsCount":16,"subscribersCount":16,"size":16,"stars1d":17,"stars7d":18,"stars30d":19,"stars90d":16,"forks30d":16,"starsTrendScore":20,"compositeScore":21,"rankGlobal":10,"rankLanguage":10,"license":22,"archived":23,"fork":23,"defaultBranch":24,"hasWiki":25,"hasPages":23,"topics":26,"createdAt":10,"pushedAt":10,"updatedAt":37,"readmeContent":38,"aiSummary":39,"trendingCount":16,"starSnapshotCount":16,"syncStatus":40,"lastSyncTime":41,"discoverSource":42},5575,"kanata","jtroo\u002Fkanata","jtroo","Improve keyboard comfort and usability with advanced customization","",null,"Rust",7475,268,27,113,0,7,48,165,36,38.29,"GNU Lesser General Public License v3.0",false,"main",true,[27,28,29,30,31,32,33,34,35,36],"cross-platform","interception-driver","keyboard","keyboard-layout","linux","macos","mouse","mouse-emulation","rust","windows","2026-06-12 02:01:12","\u003Ch1 align=\"center\">Kanata\u003C\u002Fh1>\n\n\u003Ch3 align=\"center\">\n  \u003Cimg\n    alt=\"Image of a keycap with the letter K on it in pink tones\"\n    title=\"Kanata\"\n    height=\"160\"\n    src=\"assets\u002Fkanata-icon.svg\"\n  \u002F>\n\u003C\u002Fh3>\n\n\u003Cdiv align=\"center\">\n  Improve your keyboard comfort\n\u003C\u002Fdiv>\n\n## What does this do?\n\nThis is a cross-platform software keyboard remapper for Linux, macOS and Windows.\nA short summary of the features:\n\n- multiple layers of key functionality\n- advanced key behaviour customization (e.g. tap-hold, macros, unicode)\n\nTo see all of the features, see the [configuration guide](.\u002Fdocs\u002Fconfig.adoc).\n\nYou can find pre-built binaries in the [releases page](https:\u002F\u002Fgithub.com\u002Fjtroo\u002Fkanata\u002Freleases)\nor read on for build instructions.\n\nYou can see a [list of known issues here](.\u002Fdocs\u002Fplatform-known-issues.adoc).\n\n### Demo\n\n#### Demo video\n\n[Showcase of multi-layer functionality (30s, 1.7 MB)](https:\u002F\u002Fuser-images.githubusercontent.com\u002F6634136\u002F183001314-f64a7e26-4129-4f20-bf26-7165a6e02c38.mp4).\n\n#### Online simulator\n\nYou can check out the [online simulator](https:\u002F\u002Fjtroo.github.io)\nto test configuration validity and test input simulation.\n\n## Why is this useful?\n\nImagine if, instead of pressing Shift to type uppercase letters, we had giant\nkeyboards with separate keys for lowercase and uppercase letters. I hope we can\nall agree: that would be a terrible user experience!\n\nA way to think of how Shift keys work is that they switch your input to another\nlayer of functionality where you now type uppercase letters and symbols\ninstead of lowercase letters and numbers.\n\nWhat kanata allows you to do is take this alternate layer concept that Shift\nkeys have and apply it to any key. You can then customize what those layers do\nto suit your exact needs and workflows.\n\n## Usage\n\nRunning kanata currently does not start it in a background process.\nYou will need to keep the window that starts kanata running to keep kanata active.\nSome tips for running kanata in the background:\n\n- Windows: https:\u002F\u002Fgithub.com\u002Fjtroo\u002Fkanata\u002Fdiscussions\u002F193\n- Linux: https:\u002F\u002Fgithub.com\u002Fjtroo\u002Fkanata\u002Fdiscussions\u002F130#discussioncomment-10227272\n- Run from tray icon: [kanata-tray](https:\u002F\u002Fgithub.com\u002Frszyma\u002Fkanata-tray)\n\n### Pre-built executables\n\nSee the\n[releases page](https:\u002F\u002Fgithub.com\u002Fjtroo\u002Fkanata\u002Freleases)\nfor executables and instructions.\n\n### Build it yourself\n\nThis project uses the latest Rust stable toolchain. If you installed the\nRust toolchain using `rustup`, e.g. by using the instructions from the\n[official website](https:\u002F\u002Fwww.rust-lang.org\u002Flearn\u002Fget-started),\nyou can get the latest stable toolchain with `rustup update stable`.\n\n\u003Cdetails>\n\u003Csummary>Instructions\u003C\u002Fsummary>\n\nUsing `cargo install`:\n\n    cargo install kanata\n\n    # On Linux and macOS, this may not work without `sudo`, see below\n    kanata --cfg \u003Cyour_configuration_file>\n\nBuild and run yourself in Linux:\n\n    git clone https:\u002F\u002Fgithub.com\u002Fjtroo\u002Fkanata && cd kanata\n    cargo build   # --release optional, not really perf sensitive\n\n    # sudo is used because kanata opens \u002Fdev\u002F files\n    #\n    # See below if you want to avoid needing sudo:\n    # https:\u002F\u002Fgithub.com\u002Fjtroo\u002Fkanata\u002Fwiki\u002FAvoid-using-sudo-on-Linux\n    sudo target\u002Fdebug\u002Fkanata --cfg \u003Cyour_configuration_file>\n\nBuild and run yourself in Windows.\n\n    git clone https:\u002F\u002Fgithub.com\u002Fjtroo\u002Fkanata; cd kanata\n    cargo build   # --release optional, not really perf sensitive\n    target\\debug\\kanata --cfg \u003Cyour_configuration_file>\n\nBuild and run yourself in macOS:\n\nFirst install the Karabiner driver by following the macOS documentation\nin the [releases page](https:\u002F\u002Fgithub.com\u002Fjtroo\u002Fkanata\u002Freleases\u002F).\n\nThen you can compile and run with the instructions below:\n\n    git clone https:\u002F\u002Fgithub.com\u002Fjtroo\u002Fkanata && cd kanata\n    cargo build   # --release optional, not really perf sensitive\n\n    # sudo is needed to gain permission to intercept the keyboard\n\n    sudo target\u002Fdebug\u002Fkanata --cfg \u003Cyour_configuration_file>\n\nThe full configuration guide is [found here](.\u002Fdocs\u002Fconfig.adoc).\n\nSample configuration files are found in [cfg_samples](.\u002Fcfg_samples). The\n[simple.kbd](.\u002Fcfg_samples\u002Fsimple.kbd) file contains a basic configuration file\nthat is hopefully easy to understand but does not contain all features. The\n`kanata.kbd` contains an example of all features with documentation. The\nrelease assets also have a `kanata.kbd` file that is tested to work with that\nrelease. All key names can be found in the [keys module](.\u002Fparser\u002Fsrc\u002Fkeys\u002Fmod.rs),\nand you can also define your own key names.\n\n\u003C\u002Fdetails>\n\n### Feature flags\n\nWhen either building yourself or using `cargo install`,\nyou can add feature flags that\nenable functionality that is turned off by default.\n\n\u003Cdetails>\n\u003Csummary>Instructions\u003C\u002Fsummary>\n\nIf you want to enable the `cmd` actions,\nadd the flag `--features cmd`.\nFor example:\n\n```\ncargo build --release --features cmd\ncargo install --features cmd\n```\n\nOn Windows,\nif you want to compile a binary that uses the Interception driver,\nyou should add the flag `--features interception_driver`.\nFor example:\n\n```\ncargo build --release --features interception_driver\ncargo install --features interception_driver\n```\n\nTo combine multiple flags,\nuse a single `--features` flag\nand use a comma to separate the features.\nFor example:\n\n```\ncargo build --release --features cmd,interception_driver\ncargo install --features cmd,interception_driver\n```\n\n\u003C\u002Fdetails>\n\n## Other installation methods\n\n\u003Cdetails>\n\u003Csummary>Repositories for kanata\u003C\u002Fsummary>\n\n[![Packaging status](https:\u002F\u002Frepology.org\u002Fbadge\u002Fvertical-allrepos\u002Fkanata.svg)](https:\u002F\u002Frepology.org\u002Fproject\u002Fkanata\u002Fversions)\n\n\u003C\u002Fdetails>\n\n## Notable features\n\n- Human-readable configuration file.\n  - [Minimal example](.\u002Fcfg_samples\u002Fminimal.kbd)\n  - [Full guide](.\u002Fdocs\u002Fconfig.adoc)\n  - [Simple example with explanations](.\u002Fcfg_samples\u002Fsimple.kbd)\n  - [All features showcase](.\u002Fcfg_samples\u002Fkanata.kbd)\n- Live reloading of the configuration for easy testing of your changes.\n- Multiple layers of key functionality\n- Advanced actions such as tap-hold, unicode output, dynamic and static macros\n- Vim-like leader sequences to execute other actions\n- Optionally run a TCP server to interact with other programs\n  - Other programs can respond to [layer changes or trigger layer changes](https:\u002F\u002Fgithub.com\u002Fjtroo\u002Fkanata\u002Fissues\u002F47)\n- [Interception driver](https:\u002F\u002Fweb.archive.org\u002Fweb\u002F20240209172129\u002Fhttp:\u002F\u002Fwww.oblita.com\u002Finterception) support (use `kanata_wintercept.exe`)\n  - Note that this issue exists, which is outside the control of this project:\n    https:\u002F\u002Fgithub.com\u002Foblitum\u002FInterception\u002Fissues\u002F25\n\n## Contributing\n\nContributions are welcome!\n\nUnless explicitly stated otherwise, your contributions to kanata will be made\nunder the LGPL-3.0-only[*] license.\n\nSome directories are exceptions:\n\n- [keyberon](.\u002Fkeyberon): MIT License\n- [interception](.\u002Finterception): MIT or Apache-2.0 Licenses\n\n[Here's a basic low-effort design doc of kanata](.\u002Fdocs\u002Fdesign.md)\n\n[*]: https:\u002F\u002Fwww.gnu.org\u002Flicenses\u002Fidentify-licenses-clearly.html\n\n## How you can help\n\n- Try it out and let me know what you think. Feel free to file an issue or\n  start a discussion.\n- Usability issues and unhelpful error messages are considered bugs that should\n  be fixed. If you encounter any, I would be thankful if you file an issue.\n- Browse the open issues and help out if you are able and\u002For would like to. If\n  you want to try contributing, feel free to ping jtroo for some pointers.\n- If you know anything about writing a keyboard driver for Windows, starting an\n  open-source alternative to the Interception driver would be lovely.\n\n## Community projects related to kanata\n\n- [vscode-kanata](https:\u002F\u002Fgithub.com\u002Frszyma\u002Fvscode-kanata): Language support for kanata configuration files in VS Code\n- [komokana](https:\u002F\u002Fgithub.com\u002FLGUG2Z\u002Fkomokana): Automatic application-aware layer switching for [`komorebi`](https:\u002F\u002Fgithub.com\u002FLGUG2Z\u002Fkomorebi) (Windows)\n- [kanata-tray](https:\u002F\u002Fgithub.com\u002Frszyma\u002Fkanata-tray): Control kanata from a tray icon\n- [OverKeys](https:\u002F\u002Fgithub.com\u002Fconventoangelo\u002Foverkeys): Visual layer display for kanata - see your active layers and keymaps in real-time (Windows)\n- Application-aware layer switching:\n  - [qanata (Linux)](https:\u002F\u002Fgithub.com\u002Fveyxov\u002Fqanata)\n  - [kanawin (Windows)](https:\u002F\u002Fgithub.com\u002FAqaao\u002Fkanawin)\n  - [window_tools (Windows)](https:\u002F\u002Fgithub.com\u002Freidprichard\u002Fwindow_tools)\n  - [nata (Linux)](https:\u002F\u002Fgithub.com\u002FmdSlash\u002Fnata)\n  - [kanata-vk-agent (macOS)](https:\u002F\u002Fgithub.com\u002Fdevsunb\u002Fkanata-vk-agent)\n  - [hyprkan (Linux)](https:\u002F\u002Fgithub.com\u002FmdSlash\u002Fhyprkan)\n  - [kanata-switcher (Linux, all DEs)](https:\u002F\u002Fgithub.com\u002F7mind\u002Fkanata-switcher)\n  - [kwanata (Linux-KDE)](https:\u002F\u002Fgithub.com\u002Fjfsicilia\u002Fkwanata): A KDE Plasma companion for Kanata - Automatically activates Kanata's layers\u002Fvirtualkeys and launches or raises apps.\n\n## What does the name mean?\n\nI wanted a \"k\" word since this relates to keyboards. According to Wikipedia,\nkanata is an indigenous Iroquoian word meaning \"village\" or \"settlement\" and is\nthe origin of Canada's name.\n\nThere's also PPT✧.\n\n## Motivation\n\nTLDR: QMK features but for any keyboard, not just fancy mechanical ones.\n\n\u003Cdetails>\n  \u003Csummary>Long version\u003C\u002Fsummary>\n\nI have a few keyboards that run [QMK](https:\u002F\u002Fdocs.qmk.fm\u002F#\u002F). QMK allows the\nuser to customize the functionality of their keyboard to their heart's content.\n\nOne great use case of QMK is its ability map keys so that they overlap with the\nhome row keys but are accessible on another layer. I won't comment on\nproductivity, but I find this greatly helps with my keyboard comfort.\n\nFor example, these keys are on the right side of the keyboard:\n\n    7 8 9\n    u i o\n    j k l\n    m , .\n\nOn one layer I have arrow keys in the same position, and on another layer I\nhave a numpad.\n\n    arrows:       numpad:\n    - - -         7 8 9\n    - ↑ -         4 5 6\n    ← ↓ →         1 2 3\n    - - -         0 * .\n\nOne could add as many customizations as one likes to improve comfort, speed,\netc. Personally my main motivator is comfort due to a repetitive strain injury\nin the past.\n\nHowever, QMK doesn't run everywhere. In fact, it doesn't run on **most**\nhardware you can get. You can't get it to run on a laptop keyboard or any\nmainstream office keyboard. I believe that the comfort and empowerment QMK\nprovides should be available to anyone with a computer on their existing\nhardware, instead of having to purchase an enthusiast mechanical keyboard\n(which are admittedly very nice — I own a few — but can be costly).\n\nThe best alternative solution that I found for keyboards that don't run QMK was\n[kmonad](https:\u002F\u002Fgithub.com\u002Fkmonad\u002Fkmonad). This is an excellent project\nand I recommend it if you want to try something similar.\n\nThe reason for this project's existence is that kmonad is written in Haskell\nand I have no idea how to begin contributing to a Haskell project. From an\noutsider's perspective I think Haskell is a great language but I really can't\nwrap my head around it. And there are a few [outstanding issues](.\u002Fdocs\u002Fkmonad_comparison.md)\nat the time of writing that make kmonad suboptimal for my personal workflows.\n\nThis project is written in Rust because Rust is my favourite programming\nlanguage and the prior work of the awesome [keyberon crate](https:\u002F\u002Fgithub.com\u002FTeXitoi\u002Fkeyberon)\nexists.\n\n\u003C\u002Fdetails>\n\n## Similar Projects\n\nThe most similar project is [kmonad](https:\u002F\u002Fgithub.com\u002Fkmonad\u002Fkmonad),\nwhich served as the inspiration for kanata. [Here's a comparison document](.\u002Fdocs\u002Fkmonad_comparison.md).\nOther similar projects:\n\n- [QMK](https:\u002F\u002Fdocs.qmk.fm\u002F#\u002F): Open source keyboard firmware\n- [keyberon](https:\u002F\u002Fgithub.com\u002FTeXitoi\u002Fkeyberon): Rust `#[no_std]` library intended for keyboard firmware\n- [ktrl](https:\u002F\u002Fgithub.com\u002FItayGarin\u002Fktrl): Linux-only keyboard customizer with layers, a TCP server, and audio support\n- [kbremap](https:\u002F\u002Fgithub.com\u002Ftimokroeger\u002Fkbremap): Windows-only keyboard customizer with layers and unicode\n- [xcape](https:\u002F\u002Fgithub.com\u002Falols\u002Fxcape): Linux-only tap-hold modifiers\n- [karabiner-elements](https:\u002F\u002Fkarabiner-elements.pqrs.org\u002F): Mac-only keyboard customizer\n- [capsicain](https:\u002F\u002Fgithub.com\u002Fcajhin\u002Fcapsicain): Windows-only key remapper with driver-level key interception\n- [keyd](https:\u002F\u002Fgithub.com\u002Frvaiya\u002Fkeyd): Linux-only key remapper very similar to QMK, kmonad, and kanata\n- [xremap](https:\u002F\u002Fgithub.com\u002Fk0kubun\u002Fxremap): Linux-only application-aware key remapper inspired more by Emacs key sequences vs. QMK layers\u002FVim modes\n- [keymapper](https:\u002F\u002Fgithub.com\u002Fhoumain\u002Fkeymapper): Context-aware cross-platform key remapper with a different transformation model (Linux, Windows, Mac)\n- [mouseless](https:\u002F\u002Fgithub.com\u002Fjbensmann\u002Fmouseless): Linux-only mouse-focused key remapper that also has layers, key combo and tap-hold capabilities\n\n### Why the list?\n\nWhile kanata is the best tool for some, it may not be the best tool for\nyou. I'm happy to introduce you to tools that may better suit your needs. This\nlist is also useful as reference\u002Finspiration for functionality that could be\nadded to kanata.\n\n## Donations\u002FSupport?\n\nThe author (jtroo) will not accept monetary donations for work on kanata.\nPlease instead donate your time and\u002For money to charity.\n\nSome links are below. These links are provided for learning and as interesting\nreads. They are **not** an endorsement.\n\n- https:\u002F\u002Fwww.effectivealtruism.org\u002F\n- https:\u002F\u002Fwww.givewell.org\u002F\n","Kanata 是一个跨平台的软件键盘重映射工具，支持 Linux、macOS 和 Windows 系统。它允许用户自定义多层按键功能，实现高级按键行为定制，如点按保持（tap-hold）、宏命令和 Unicode 输入等。通过这些功能，用户可以根据自己的需求和工作流程优化键盘布局，提高输入效率和舒适度。适用于需要高度个性化键盘设置的场景，例如编程、写作或游戏等。项目采用 Rust 语言开发，确保了高性能和跨平台兼容性。",2,"2026-06-11 03:04:10","top_language"]