Control your mouse on macOS with fast, Vim-style keyboard navigation.
Demo: toggling mouse mode, moving with H J K L, clicking, and jumping the cursor with the grid system.
- Global keyboard-driven mouse control on macOS (
CGEventTap) - Menu bar app mode (no dedicated terminal required)
- Start-at-login toggle from menu bar (
LaunchAgent) - Toggleable mouse mode (configurable
toggle_key, default:F8) so normal typing is unaffected when off - Cursor movement with configurable keys (defaults:
H J K L) - Speed modifiers for movement/scroll (defaults:
Shiftfast,Option/Altslow) - Scroll control with configurable keys (defaults:
U N B M) - Left/right click from keyboard (defaults:
F/D) - Drag toggle to hold/release left mouse button (default:
V) - Recursive 3x3 jump grid with translucent overlay and depth indicator
- Configurable grid labels, theme presets, and opacity (hot-reloads while running)
- Multi-monitor aware grid targeting on the display under the cursor
- Automatic event-tap re-enable if macOS temporarily disables the tap
cargo install keymouseCreate a macOS app bundle (recommended for Spotlight/Finder launch):
keymouse --install-appThen launch Keymouse from Spotlight or from ~/Applications/Keymouse.app.
You can still run directly from terminal:
keymouseBoth paths launch Keymouse as a macOS menu bar app (KM).
Latest release:
Example (Apple Silicon / arm64):
curl -L -o keymouse-macos-arm64.zip https://github.com/debacodes10/keymouse/releases/latest/download/keymouse-macos-arm64.zip
unzip keymouse-macos-arm64.zip
chmod +x keymouse-macos-arm64
./keymouse-macos-arm64Clone the repository:
git clone https://github.com/debacodes10/keymouse.git
cd keymouseBuild a release binary:
cargo build --releaseThe compiled binary will be available at:
target/release/keymousekeymouseInstall a Spotlight-launchable app bundle after cargo install:
keymouse --install-appIf an existing app bundle is found, Keymouse asks before replacing it.
Launch from:
- Spotlight: type
Keymouse - Finder:
~/Applications/Keymouse.app
Remove the app bundle:
keymouse --uninstall-appKeymouse asks for confirmation before uninstalling.
Run as a managed background process:
keymouse --startIf you built from source:
./target/release/keymouseValidate your config without starting the event loop:
keymouse --check-configSee all available commands anytime:
keymouse --helpRun without menu bar UI (legacy headless mode):
keymouse --headlessStop the managed background process:
keymouse --stopRestart the managed background process:
keymouse --restartGrant permissions to the app that launches Keymouse:
System Settings->Privacy & Security->AccessibilitySystem Settings->Privacy & Security->Input Monitoring
If launching from Spotlight, this is usually Keymouse.app.
If launching from terminal, this is usually Terminal/iTerm.
- Keep using Spotlight (
Cmd+Space, then typeKeymouse). - Optional: in Finder, open
~/Applications, right-clickKeymouse.app, then chooseAdd to Dock. - To auto-start on login, open the menu bar item
KM->Start at Login.
- Press your configured
toggle_keyto turn mouse mode on/off (default:F8). - Or use the menu bar item:
KM->Turn Mouse Mode On/Off. - When mouse mode is off, all keys behave normally.
- When mouse mode is on, keydown/keyup events are intercepted by Keymouse.
- Move:
H J K L(hold keys for continuous movement) - Scroll:
U N B M - Click:
F(left),D(right) - Drag:
Vto hold left mouse button,Vagain to release - Modifiers:
Shift= fast,Option/Alt= slow
- Press
;(defaultgrid_key) to show the 3x3 grid on the display under the cursor. - While grid mode is open, press
1..9to switch to monitor 1..9 (ordered left-to-right, then top-to-bottom). - Select cells with
Q/W/E,A/S/D,Z/X/Cto zoom recursively. - Optional alternates in grid mode:
Fmaps to middle-left,Gmaps to center. - Press
Enterto move cursor to the selected region center. - Press
Escto cancel grid mode.
| Key | Action |
|---|---|
F8 |
Toggle mouse mode |
H J K L |
Move cursor |
Shift + move/scroll keys |
Fast movement/scroll |
Option + move/scroll keys |
Slow movement/scroll |
U N B M |
Scroll up/down/left/right |
F |
Left click |
D |
Right click |
V |
Toggle drag (left button hold/release) |
; |
Enter grid mode |
1..9 (in grid mode) |
Switch active monitor |
Q/W/E/A/S/D/Z/X/C |
Select grid cell recursively |
Enter |
Confirm grid jump |
Esc |
Cancel grid mode |
Use Ctrl+C in the terminal running Keymouse.
If started with --start, stop it with:
keymouse --stopKeymouse loads configuration from:
~/Library/Application Support/keymouse/config.toml
If the file is missing, Keymouse uses built-in defaults. At startup, it also writes an example file to that path so you can customize bindings.
Example config.toml:
toggle_key = "f1"
movement_up = "k"
movement_down = "j"
movement_left = "h"
movement_right = "l"
scroll_up = "u"
scroll_down = "n"
scroll_left = "b"
scroll_right = "m"
grid_key = ";"
confirm_key = "enter"
left_click = "f"
right_click = "d"
drag_toggle = "v"
fast_modifier = "shift"
slow_modifier = "option"
grid_theme = "classic"
grid_opacity = 1.0
grid_color = "#4fd1ff"
grid_labels = ["Q", "W", "E", "A", "S", "D", "Z", "X", "C"]Supported key names for bindings are currently:
- Letters used by default (
a b c d e f g h j k l m n q s u v w x z) ;(or"semicolon"),"enter"/"return","escape"/"esc", function keys ("f1"..."f12")- Modifiers:
"shift"and"option"/"alt"(for modifier fields)
Invalid or conflicting config values now produce startup validation errors.
Grid overlay visual options:
grid_theme:classic,midnight,ocean,forestgrid_opacity:0.0to1.0grid_color: optional accent color (#RRGGBB) for grid border/depth tintgrid_labels: exactly 9 strings (visual labels only)
Keymouse hot-reloads these grid visual options when config.toml changes.
- If Keymouse exits with an event tap error, re-check Accessibility and Input Monitoring permissions for the launching app.
- If keyboard control stops after long inactivity or heavy system load, macOS may have disabled the tap; Keymouse now attempts to re-enable it automatically.
- If
Keymouse.appasks for Rosetta on Apple Silicon, reinstall Keymouse from a native (non-Rosetta) terminal, then rerunkeymouse --install-app.
- Vim-style cursor movement
- Grid jump navigation
- Multi-monitor support
- Recursive grid zoom
- Custom key bindings
- Configuration file
- Homebrew installation
Contributions, suggestions, and feature requests are welcome. Open an issue to discuss ideas, or submit a pull request with a focused change.
MIT. See LICENSE.
