Remapper
Cross-platform input remapping tool written in Rust.
Remapper lets you map input events from physical devices (keyboard, mouse, gamepad) to virtual output devices, with support for simple remaps, macros, combos, and tap/hold behavior.
Features
- Simple 1:1 remapping
- Macro sequences
- Tap/hold conditional mappings
- Combo/chord mappings
- CLI workflow for creating and running profiles
- GUI built with iced
- Background daemon, plus systemd user service management on Linux
- Hot-plug device monitoring
- JSON configuration with migration support
Platform support
| Platform | Input | Virtual output | |----------|-------|----------------| | Linux | evdev (/dev/input/) | uinput (/dev/uinput) - keyboard, mouse, gamepad | | Windows | Raw Input API | SendInput for keyboard/mouse, gamepads via the ViGEmBus driver | | macOS | IOKit HID Manager | Core Graphics events for keyboard/mouse - virtual gamepad output is not supported |
Gamepads are additionally read through gilrs on all platforms.
Installation
Build from source
git clone https://github.com/rennerdo30/remapper.git
cd remapper
cargo build --releaseThe binary will be at target/release/remapper.
Linux runtime requirements
- libudev
- access to /dev/input/
- access to /dev/uinput
Optional udev rules are provided in udev/99-remapper.rules. A PKGBUILD for Arch-based distributions and unit files under systemd/ are included as well.
Windows
Virtual gamepad output requires the ViGEmBus driver. Without it, keyboard and mouse output still work and gamepad mappings are reported as unsupported.