Mac-to-Mac Controller Handoff

Apple's Universal Control lets you push your trackpad and keyboard between two Macs by sliding the cursor off a screen edge. ControllerKeys does the same thing for a game controller.

Apple shipped Universal Control in macOS 12.3. It is genuinely magical: drag the cursor off the right edge of your MacBook and you're now controlling your Mac mini, with no software switch and no setup. What Universal Control doesn't cover is anything not a Magic Mouse, Magic Trackpad, or Apple keyboard. Plug an Xbox controller into a MacBook and it does not cross over.

ControllerKeys closes that gap. Once two Macs are paired through ControllerKeys' Mac-to-Mac handoff, the controller behaves the way an Apple keyboard already does under Universal Control: push the cursor against the configured edge, and the next button press lands on the remote Mac. Push back and you're home again.

What You Get

Cursor Crosses Screens

The cursor flows from the host Mac to the remote Mac at the configured edge, exactly like Universal Control. The controller's stick or touchpad moves it as usual.

Buttons and Sticks Follow

Every button press, stick movement, and trigger pull goes to whichever Mac currently owns the controller, automatically.

Mapped Actions Run Locally

A chord bound to "open Finder" opens Finder on the Mac that's currently in focus. The remote runs actions against its own active profile — no shared config dependency.

Authenticated Frames

Every relay frame is signed with HMAC-SHA256 using a secret exchanged at pairing time. Replays are rejected and a hostile machine on the same LAN can't inject keystrokes.

Works Over Tailscale

The relay is plain TCP over your local network. If the Macs can reach each other over Tailscale, the handoff works across the internet — across rooms, houses, or continents.

Bidirectional Crossing

Configure handoff edges on both Macs and the cursor can cross in either direction — back and forth between the two screens as smoothly as Universal Control's own handoff.

Setup

1

Install ControllerKeys on Both Macs

You need ControllerKeys 1.8.0 or later on both machines. Grant Accessibility and Input Monitoring permissions on each. Both Macs need to be running ControllerKeys at the time of handoff.

2

Confirm the Two Macs Can Reach Each Other

The relay is restricted to private/link-local networks, Tailscale (100.64.0.0/10), and localhost. If the two Macs are on the same Wi-Fi or Ethernet, you're set. If they're remote, both need to be on Tailscale (or another VPN that gives them addresses in those ranges).

3

Start Pairing on the First Mac

Open ControllerKeys → Settings and scroll to the Remote Mouse Pairing section. Click Start. The first Mac generates a six-digit pairing code displayed in the same panel.

4

Enter the Code on the Second Mac

On the second Mac, open the same panel and click Start. Type the six-digit code from Mac #1 into the Code field and click Confirm. The two Macs exchange an HMAC-SHA256 secret that's stored in each Mac's Keychain and used to authenticate every relay frame.

5

Set the Remote Host (If Bonjour Discovery Fails)

The Macs find each other automatically over Bonjour (service type _controllerkeys._tcp). If they're on a restrictive network that blocks mDNS, expand Advanced in the Remote Mouse Pairing section and enter the peer Mac's hostname or Tailscale IP. The port field defaults to 38383.

6

Connect a Controller

Pair any supported controller (Xbox, DualSense, DualShock 4, Steam Controller, Joy-Con, Switch Pro Controller, or any of 300+ third-party gamepads) to either Mac. Drive the cursor with the stick or touchpad as usual.

7

Push the Cursor Against a Screen Edge

Move the cursor against the screen edge facing the other Mac. A portal indicator flashes; the cursor crosses to the remote Mac and the next button press fires there, against the remote's active ControllerKeys profile. Push back through the opposite edge on the remote to return.

Useful Scenarios

MacBook + Mac mini Desk

One controller in your hand drives both screens. Browse code review on the MacBook, jump to a build server on the Mac mini, push back to debug.

Couch + Desk

Mac mini under the TV plus MacBook on the coffee table — one Steam Controller in your lap, hand off to whichever screen you're looking at.

Streaming Setup

Production Mac with OBS plus a chat-monitoring Mac. Controller drives OBS scenes via webhooks, hands off to send messages to chat.

Remote Pair Programming

Over Tailscale, two collaborators with their own controllers can hand off control of a shared screen — each runs their own profile on their own machine.

How It Compares to Apple's Universal Control

Capability Apple Universal Control ControllerKeys Handoff
Trackpad / mouseYesYes (via controller stick or touchpad)
Apple keyboardYesHands off if mapped to controller
Game controllerNoYes
Mapped chord/macro/scriptN/ARuns locally on receiving Mac
NetworkiCloud + local discoveryLAN or Tailscale
AuthenticationiCloud account pairingHMAC-SHA256 with paired secret
Works between Macs and iPadsYesMac-to-Mac only (today)

The pitch in one sentence: Universal Control for the device class Apple forgot. It's the same physical gesture (push the cursor against a screen edge), the same magical result (your input device is now driving the other Mac), but it covers the game controller — and by extension everything you've bound the controller's buttons, sticks, and touchpads to.

Troubleshooting

Pairing Code Doesn't Confirm

  1. Both Macs must be reachable to each other on a private LAN, Tailscale (100.64.0.0/10), or localhost. Public-IP routes are rejected by design.
  2. ControllerKeys uses Bonjour (_controllerkeys._tcp) for discovery. Restrictive networks (corporate, hotel) block mDNS — try a phone hotspot or use Tailscale.
  3. If discovery still fails, expand Advanced under Remote Mouse Pairing and enter the peer Mac's hostname or Tailscale IP directly. The port defaults to 38383.

Cursor Doesn't Cross at the Edge

  1. Check the Remote Mouse Pairing section on both Macs — the status line should say pairing is active.
  2. If the cursor stops at the edge without handing off, the remote Mac may not be reachable on the network at that moment.
  3. The relay uses sensible edge defaults; if you want to override them, the keys live in UserDefaults (universalControlRelayLocalEdge, universalControlRelayRemoteEntryEdge, universalControlRelayRemoteReturnEdge) accepting left / right / top / bottom.

Buttons Land on the Wrong Mac

  1. The active Mac is determined by where the cursor currently lives. If the cursor is on the host, the host receives input even if you just pushed against the edge — push past it.
  2. Check that both Macs are actually running ControllerKeys (not just installed). The relay only works while both apps are running.

Mappings Behave Differently on the Remote

  1. This is by design. The remote runs the controller against its own active profile — same button can do different things on each Mac.
  2. If you want identical behavior, export the profile JSON on one Mac, import it on the other, and set it active.

Privacy and Security

Every frame in the relay is signed with HMAC-SHA256 using a per-pair secret that never leaves the two Macs. Replays are rejected via monotonic sequence numbers. The relay is plain TCP — no third-party server, no Apple ID, no Anthropic, no telemetry. If both Macs are on Tailscale, traffic is end-to-end encrypted by WireGuard on top of the HMAC authentication.

Universal Control for Your Game Controller

One controller, two Macs, no software switch. ControllerKeys is the only macOS app that does this.

Related Guides