Two directions, two mechanisms
Video comes off the phone the same way an Apple TV receives it. Control is a
separate channel travelling the other way — which is why one works instantly
and the other asks something of you.
Works out of the box
Mirroring
Your Mac advertises itself on the network. Open Control Center on your
iPhone, tap Screen Mirroring, pick your Mac, and the screen shows up in a
device-shaped window — hardware-decoded, about one frame of latency.
Nothing to install on the phone.
Requires setup
Control
Click to tap, drag to swipe, scroll to scroll, type to type. Arrow keys
move between home screens. It drives the real device, not a simulator —
but iOS only permits this through Apple's own testing tools, so it needs
Xcode and a developer account.
How it works
Your Mac announces itself
It publishes the same network services an Apple TV does, so your iPhone lists it as a mirroring destination.
The phone streams its screen
Encrypted H.264 video arrives over Wi-Fi and is decoded on the GPU, straight into the window.
Your input travels back
Mouse and keyboard events become real touches on the device, sent over a second connection to a helper running on the phone.
What you need
Mirroring asks for very little. Control asks for more, and it is worth knowing before you download.
- macOS
- 14 (Sonoma) or later, Apple silicon or Intel.
- iPhone
- Any iPhone on the same Wi-Fi network. Nothing to install for mirroring.
- Network
- Both devices on the same network. Your Mac may ask for local network permission the first time.
- For control only
- Xcode and your own Apple Developer account. You build and launch WebDriverAgent on the phone once — iOS offers no other way for a Mac to send touches, and there is no App Store route for it.
Mirroring works for anyone. Control is realistically for developers.
If you do not already have Xcode installed, treat MirrorDeck as a mirroring
tool and the control features as a bonus you may never turn on.
Getting started
Download, drag to Applications, open. MirrorDeck lives in the menu bar — there is no main window until a phone connects.
# Optional: enabling control, once per phone
$ git clone https://github.com/egarl004/mirrordeck.git
$ cd mirrordeck && ./scripts/bootstrap.sh
$ ./scripts/wda.sh install # builds and installs the helper
$ ./scripts/wda.sh run # leave running while you control
Then hover the top edge of the mirror window, click Enable Control,
and enter the phone's IP. It is remembered per device and reconnects next time.
Free, and open
MirrorDeck is released under the GPL-3.0. You can read every line, build it
yourself, change it, and pass it on. It is built on the work of the UxPlay
project, whose AirPlay implementation made it possible, and on Appium's
WebDriverAgent for touch input.
Support the project
MirrorDeck is free and always will be. If it saved you some time and you feel
like putting something in the tin, it is appreciated and entirely optional.
Or search $emersongarland on Cash App,
@emerson-garland on Venmo.