- Category
- Developer Tools
- Rank
- No. 964Tools index
- Pricing
- Open Source
- Type
- TOOL
- Builder
- wez
- GitHub
- 645 stars
- Date
About
Keyboard input remapper for Linux and Wayland systems, written in Rust by @wez (creator of WezTerm).
What it does
It intercepts events from one selected input device, tracks which keys are currently pressed, applies ordered TOML rules, then sends the resulting key state through a virtual device. Rules support chords, many-to-many mappings, and keys that behave differently when tapped or held.
Why it's ranked here
A strong choice when desktop-level shortcuts are insufficient. Working below graphical applications makes one configuration effective across Wayland, X11, and the Linux console. Its focused rule model handles useful cases such as tap-versus-hold Caps Lock and modifier chords, though setup requires low-level device permissions.
What's good
The configuration stays compact while covering dual-role keys, chords, and multiple output keys. Device and key discovery commands reduce setup guesswork. More specific active chords receive priority, modifiers are emitted in a deliberate order, and optional physical-device matching distinguishes keyboards that share the same reported name.
Tradeoffs
It needs root access or explicit permissions for input and virtual-device interfaces, then takes exclusive control of the selected device. Rule order affects behavior, and taps use a fixed 200 millisecond threshold. There is no built-in configuration GUI, and key presses cannot launch commands.
How to use it well
Use it for persistent, system-wide keyboard transformations on Linux, especially laptop layouts, compact keyboards, dual-role modifiers, and application-independent chords. Start with the device and key inspection commands, keep specific chord rules before broader mappings, and run it through a supported service manager. Choose another tool when the goal is command execution or built-in visual editing.
Technical notes+
Cargo.toml defines a Rust 2021 binary using clap, serde, toml, evdev-rs, libc, logging, and error-handling crates. src/main.rs exposes ListDevices, ListKeys, DebugEvents, and Remap variants, including device overrides, startup delay, and polling for a missing device. src/mapping.rs parses TOML into DualRole and Remap variants, placing all dual-role mappings before regular mappings. src/remapper.rs grabs the evdev device, creates a UInputDevice, tracks pressed keys in HashMap and HashSet collections, prioritizes larger matching chords, emits modifiers first on press and last on release, and uses a 200 millisecond tap cutoff. src/deviceinfo.rs scans /dev/input event devices and supports phys-based disambiguation. evremap.service supplies a restartable systemd example. Makefile invokes cargo nextest run, while .github/workflows/rust.yml runs cargo test.
Observed
- License
- MIT License
- Primary language
- Rust
- Interface
- Command-line binary with device listing, key listing, event debugging, and remapping commands
- Configuration
- TOML rules for dual-role keys and many-to-many key remapping
- Platform support
- Linux input stack, effective across Wayland, X11, and the Linux console
- Build and install surface
- Built from source with Cargo and libevdev development packages; service examples cover systemd, Runit, and OpenRC
- Runtime access
- Requires root or user access to evdev and uinput
Read from README.md, Makefile, Cargo.toml, src/main.rs, src/mapping.rs, src/remapper.rs, src/deviceinfo.rs, LICENSE.md, .rustfmt.toml, evremap.service, pixelbookgo.toml, .github/FUNDING.yml, .github/dependabot.yml, .github/workflows/fmt.yml, .github/workflows/rust.yml.
What it can do
Remap individual keys to different keys
Keyboard key presses → Different keyboard key events
Map key combinations to different key combinations
Multiple simultaneous key presses → Different key combination events
Create custom keyboard shortcuts
Key sequence configuration → Custom keyboard shortcut mappings
Apply different key mappings per application
Application-specific configuration rules → Context-aware key remapping
Intercept and modify keyboard input system-wide
Raw keyboard events from hardware → Modified keyboard events to applications
Load and apply remapping configuration files
Configuration files with mapping rules → Active keyboard remapping behavior
Tags
Tech Stack
Comments (0)
No comments yet
Editorially curated, with community endorsements as a secondary signal. Corrections welcome.
