Use your game controller — or your Apple TV Siri Remote — as a keyboard and mouse for your Mac: browse, scroll, click, and type from the couch
Watch a walkthrough of ControllerKeys features in action
Get up and running in under a minute
Sonoma or later
Xbox, PS5, PS4, Steam, Joy-Con, or 300+ others
Permission required
Get the app from Gumroad
Open the DMG and drag to /Applications
Grant Accessibility permissions when prompted
Pair your controller via Bluetooth or USB
Why Accessibility permissions? The app uses Apple's CGEvent API to simulate keyboard and mouse input. This is the same API used by accessibility tools and automation software. The app is fully open source so you can verify it doesn't do anything nefarious.
Everything you need for controller-driven productivity
| Type | Description |
|---|---|
| Simple Key | Single keystroke per press |
| Modifier + Key | Like ⌘C |
| Hold Modifier | Hold button = hold modifier |
| Long Hold | Different action on long press |
| Double Tap | Quick double press trigger |
| Repeat | Auto-repeat while holding |
Press multiple buttons for one action. Fully customizable — create your own combinations.
Trigger actions with ordered button combos — like cheat codes
Hold a button to unlock an entirely different set of mappings — like Shift on a keyboard
Example: Hold LB to turn A/B/X/Y into app launchers, D-pad into media controls.
Write custom automation scripts powered by JavaScriptCore
press(), hold(), click(), type(), paste(), delay()shell(), openURL(), openApp(), notify(), haptic()app.name, app.bundleId, app.is()trigger.button, trigger.pressTypescreenshotWindow() API for window captureMouse or WASD
Scroll or Arrows
Pair the Siri Remote over Bluetooth and use it as a tiny Mac remote — no Apple TV required
GTA-inspired radial menu for instant app and website switching
Use the DualSense or DualShock 4 gyroscope for precise mouse control and gesture-triggered actions
Send HTTP requests from controller buttons — trigger smart home, APIs, or custom integrations
Multiple configurations with smart switching
A full keyboard and app launcher with swipe typing
Record multi-step sequences and play them back with one button
Automate beyond key presses
Variables: Use {date}, {time}, {clipboard}, and more in your text.
Full support for DualSense, DualSense Edge, and DualShock 4 controllers
Full support for Valve's Steam Controller over raw HID — Steam doesn't even need to be running
Use a single Joy-Con, paired Joy-Cons (L+R), or the Switch Pro Controller as a Mac input device
Full support for Elite-specific hardware including all 4 back paddles
Per-profile setting that bypasses the chord-detection window for simple key mappings
Universal Control-style relay between two ControllerKeys Macs — push the cursor against a screen edge and your inputs cross over
Set either stick to Custom mode and each of its 8 directions becomes a real bindable button
Every destructive action is silently snapshotted — restore any prior state from the History tab
Use the touchpad as a full trackpad, or split it into 4 first-class bindable regions
Whole-pad or 4-region modes
Xbox, PlayStation, Nintendo, Steam Controller — and 300+ more
If macOS sees it as a game controller, ControllerKeys can map it.
Show your controller inputs on stream
Track your usage stats and share your controller personality
20% off the regular price — limited time
Turn your spare controller into a productivity powerhouse
Don't let your old controllers collect dust
A comfortable alternative to keyboard and mouse
Let AI write the code while you relax on the couch — just review and approve suggestions with your controller
Control your Mac from inside a VR headset or across the room
Review flashcards from the couch with full shortcut support — unlike Enjoyable
Switching from Enjoyable? ControllerKeys supports modifier combos, chords, and macros that Enjoyable can't do.
Combine with voice transcription for fully hands-free computing
A wireless controller for your classroom — move freely while managing slides, OBS scenes, and recordings
"I teach a 200+ student introductory Physics course and used to control OBS with a Stream Deck from Elgato. Stream Deck worked, but it's wired and has no trackpad. Switching to my PS5 DualSense with ControllerKeys was an easy call — Bluetooth means I can move around the room freely, and the touchpad handles cursor control perfectly. My lectures are a lot more fun to run now, and my students get a kick out of seeing their professor run the whole show with a PS5 controller."
Trigger webhooks and OBS WebSocket commands from your controller — no keyboard required
20% off the regular price — limited time
See the app in action with Xbox, DualSense, Steam Controller, and Apple TV Remote
Open source & Apple notarized
Solutions to common issues
~/.config/controllerkeys/config.jsonAnswers to frequently asked questions
Yes! Xbox Series X|S controllers connect to Mac via Bluetooth. Put your controller in pairing mode (hold the pairing button until the Xbox button flashes), then go to System Settings → Bluetooth and select the controller.
Once connected, ControllerKeys lets you use it for productivity — not just gaming.
Yes! DualSense controllers work great with Mac. Hold the Create and PS buttons together until the light bar flashes, then pair via System Settings → Bluetooth.
With ControllerKeys, you get full touchpad support as a trackpad, plus LED color customization when connected via USB.
Bluetooth: Wireless convenience, works great for most features.
USB: Required for DualSense LED color customization and microphone access. Also provides slightly lower latency and keeps your controller charged.
1. Turn on your Xbox controller by pressing the Xbox button
2. Hold the pairing button (top of controller) for 3 seconds until the Xbox button flashes rapidly
3. On your Mac, go to System Settings → Bluetooth
4. Select "Xbox Wireless Controller" from the list
1. Turn off your DualSense controller if it's on
2. Hold the Create button (left of touchpad) and PS button together for 3 seconds
3. The light bar will flash blue when in pairing mode
4. On your Mac, go to System Settings → Bluetooth and select "DualSense Wireless Controller"
Yes! Pair a 2nd-generation Siri Remote to your Mac over Bluetooth (hold Back + Volume Up until the pairing light appears, then System Settings → Bluetooth) and ControllerKeys treats it as a controller — no Apple TV required.
The clickpad moves the cursor and physically clicks, the outer ring acts as a D-pad, and every side button — TV/Home, Back, Play/Pause, Siri, Power, Mute, and the volume rocker — is individually mappable. Great as a presentation clicker or a media remote for a Mac connected to a TV.
Yes. Enable Edge Scroll in the Touchpad settings and drag your finger around the outer ring of the clickpad to scroll in a circular iPod-wheel motion, with configurable speed.
Plug the Steam Controller wireless dongle into a USB port, press the Steam button to wake the controller, and launch ControllerKeys. The app detects the controller over raw HID and disables lizard mode automatically — Steam does not need to be installed.
For Bluetooth-flashed controllers: hold Y + Steam button for two seconds to enter pairing mode, then pair from System Settings → Bluetooth.
Full walkthrough in the Steam Controller on Mac guide.
Lizard mode is Valve's name for the Steam Controller's built-in keyboard and mouse emulation — the firmware pretends to be a USB keyboard and mouse whenever no game is claiming its input. The right pad nudges the cursor, ABXY map to Enter/Escape/Space, and so on.
On macOS this layer cannot be overridden by normal apps, so it causes phantom keystrokes and a drifting cursor on top of whatever else you bind. ControllerKeys sends the same HID feature report Steam uses to turn it off, holds back input until the disable is confirmed, and re-sends it on a timer so it stays off. The Steam Controller hardware is internally codenamed Triton.
Yes. The app is fully open source — you can verify exactly what it does. It never phones home or collects data. Network access only occurs when you explicitly configure webhooks, OBS commands, or import community profiles.
Controller inputs are translated to keyboard/mouse events in real-time and immediately discarded. The app is signed and notarized by Apple.
The app supports Xbox Series X|S, Xbox Elite Series 2 (with paddles), PlayStation 5 DualSense, DualSense Edge, PlayStation 4 DualShock 4, Nintendo Joy-Con (single or paired), Switch Pro Controller, Valve Steam Controller, and 300+ third-party controllers via the SDL database.
DualSense, DualShock 4, and Steam Controller all get touchpad support, multi-touch gestures, and gyroscope aiming. DualSense also gets LED customization and microphone access via USB. Steam Controller works over raw HID without Steam needing to be running.
No. ControllerKeys talks to the Steam Controller directly over raw HID. Buttons, sticks, triggers, grip buttons, battery reports, haptics, the gyroscope, and both square touchpads are all parsed without Steam in the loop.
Touchpads can run in whole-pad or 4-region quadrants mode with two-pad pinch-to-zoom, and gyro aiming + gestures use the Steam Controller's raw gyro scale.
Yes. Universal Control-style relay lets you pair two ControllerKeys-running Macs and push the cursor against a configured screen edge to hand off mouse, keyboard, and mapped actions to the second Mac.
The receiving Mac runs actions against its own active profile — so a chord that opens Finder on the host opens Finder on the remote. Pairing is local-network only with HMAC-SHA256 authenticated frames.
Yes. Realtime input mode (per-profile) sends key-down on press and key-up on release for simple key mappings, bypassing the chord-detection window.
Chords, double-tap, long-hold, and repeat still use the standard timing path so advanced interactions keep their existing behavior.
Yes! The app supports 300+ third-party controllers including 8BitDo, Logitech, PowerA, Hori, and many more. It uses the SDL controller database for automatic detection and mapping — no manual configuration needed.
If macOS sees your controller as a game controller, ControllerKeys can map it.
Yes. The four rear paddles (P1–P4) on the Xbox Elite Series 2 are exposed as first-class buttons in ControllerKeys and can be bound to any key, chord, macro, JavaScript snippet, or system action — independently of the regular ABXY/bumpers.
You don't have to use Microsoft's Xbox Accessories app to mirror existing buttons onto the paddles — ControllerKeys binds them natively.
Yes. Every destructive action — profile delete, import, restore, or full wipe — is auto-snapshotted before it runs. The History tab lists every snapshot with a timestamp and a one-click Restore button. Up to 20 snapshots are kept on disk.
Restoring is itself snapshotted, so even your undo is undoable. The profile-import safety prompt also lists every shell command, JavaScript script, and webhook URL verbatim before you accept the import.
Currently, the app supports one controller at a time. The first connected controller will be used.
The app is designed for productivity (coding, browsing, general use). Most games have native controller support. Using both may cause conflicts or double inputs.
When configuring a button, select only the modifier (⌘ ⌥ ⇧ ⌃) without a key, and enable "Hold Modifier".
The modifier will be active while the button is pressed.
Yes. In the key capture field, select "Mouse Left Click" or "Mouse Right Click" as the action.
They're independent:
Yes. Clear all mappings from the button configuration. It will do nothing when pressed.
Increase the deadzone setting. 15-20% usually eliminates drift while maintaining responsiveness.
Use Focus Mode. Set a modifier as the trigger, then hold it while moving the joystick for slower, precise movement.
Yes. Each stick can be set to Mouse, Scroll, WASD, or Custom mode independently — at the profile level, and overridable per layer.
In Custom mode, each of the stick's 8 directions (4 cardinal + 4 diagonal) becomes a bindable button you can map from the controller graphic. One-click presets seed WASD or Arrow Keys.
Profiles save to ~/.config/controllerkeys/config.json — a human-readable JSON file you can backup or share.
Generally yes. They operate at different levels — this app handles controller input, while Karabiner and Hammerspoon handle keyboard input and automation. They typically don't conflict.
Yes. Add ControllerKeys to System Settings → General → Login Items.
The app continuously monitors controller input and translates it to keyboard/mouse events in real-time. Quitting stops all mapping.
Vibe coding is a relaxed approach to programming where you use AI assistants like Claude Code, Cursor, or Copilot to do most of the heavy lifting while you guide the process.
ControllerKeys lets you control your IDE from the couch — navigate code, accept AI suggestions, and trigger commands without touching a keyboard.
Absolutely! Map buttons to trigger AI completions, accept suggestions, or run terminal commands. Works great with Claude Code, Cursor, Copilot, Aider, Codex CLI, Roo Code, and any other AI coding assistant.
Pair this app with a voice transcription tool like VoiceInk (open source, Whisper-based). Map a controller button to toggle voice recording, and you have hands-free typing.
This combo is perfect for couch computing — dictate text while using the controller for navigation and commands.
Turn it into a productivity tool! Use it to control your Mac from the couch, navigate presentations, browse the web, or code with AI assistance. It's a great way to repurpose controllers you're not using for gaming.
Yes. Controllers are ergonomically different from keyboards and mice, which can help if you have repetitive strain injuries or need alternative input methods. The customizable mappings let you adapt it to your specific needs.