A keyboard-driven UI navigation tool for macOS, similar to Shortcat. Navigate and click any UI element using only your keyboard.
- Keyboard-driven navigation - Click any button, link, or UI element by typing its label
- Global hotkey - Activate with
Cmd+<from anywhere - Smart labels - Left-hand keyboard priority for faster typing (A, S, D, F, etc.)
- Scroll support - Use
Shift+Arrowkeys to scroll while overlay is active - Mouse movement - Arrow keys move the mouse cursor
- Left & right click -
Spacefor left click,Enterfor right click - Auto-refresh - Labels recalculate after scrolling to catch new elements
- Lightweight - Built with Zig and raylib for minimal resource usage
- Menu bar icon - Easy access to quit the app
brew install zig raylib cliclickgit clone https://github.com/kidandcat/keyon.git
cd keyon
zig build -Doptimize=ReleaseFast# Create app bundle
mkdir -p /Applications/KeyOn.app/Contents/MacOS
cp zig-out/bin/keyon /Applications/KeyOn.app/Contents/MacOS/
cp Info.plist /Applications/KeyOn.app/Contents/
# Sign the app (required for accessibility permissions)
codesign --force --sign - /Applications/KeyOn.app- Launch KeyOn from
/Applications/KeyOn.app - Grant Accessibility permissions when prompted:
- System Settings → Privacy & Security → Accessibility → Enable KeyOn
- The app will appear in your menu bar
| Shortcut | Action |
|---|---|
Cmd+< |
Toggle overlay (show/hide labels) |
A-Z |
Type label characters to filter |
Space |
Left click on element (or at cursor if no label typed) |
Enter |
Right click on element (or at cursor if no label typed) |
Arrow keys |
Move mouse cursor |
Shift+Arrow |
Scroll in that direction |
Backspace |
Delete last typed character |
Escape |
Close overlay |
- Labels prioritize left-hand keys (A, S, D, F, G, Q, W, E, R, T) for faster typing
- Two-letter combos start with left-hand combinations (AS, AD, AF, etc.)
- After scrolling, wait 1 second and labels will refresh to show new elements
- The hint bar at the bottom shows what you've typed
KeyOn uses macOS Accessibility APIs to:
- Detect the frontmost application
- Scan for clickable UI elements (buttons, links, text fields, etc.)
- Display labeled overlays on each element
- Perform clicks using native mouse events
src/
├── main.zig # Application entry point
├── overlay.zig # Overlay window rendering (raylib)
├── hotkey.zig # Global keyboard event handling
├── click.zig # Mouse click and scroll operations
├── accessibility.zig # macOS Accessibility API integration
├── ui_element.zig # UI element data structure
├── statusbar.m # Menu bar icon (Objective-C)
└── statusbar.h # Menu bar header
Contributions are welcome! Please feel free to submit a Pull Request.
MIT License - see LICENSE for details.