Free & open source · macOS + iOS

Use your iPhoneas your Mac's second monitor.

A free, open-source alternative to Apple Sidecar, Duet Display and Luna Display. Use your iPhone and iPad as a second — and even a third — screen for your Mac. A true extended display, not a mirror: USB or WiFi, Retina-sharp, with touch and scroll. No subscription. No dongle. No account.

macOS 14+  ·  iOS 17+  ·  GPL-3.0

Like it? Support the project →

OpenDisplay is two apps that work together — install both to get going.

Step 1 On your Mac

The sender — captures a virtual display and streams it.

Download for Mac

Signed & notarized — opens normally on macOS 14+. Prefer to compile it yourself? Build from source ↗

Step 2 On your iPhone & iPad

The receiver — displays the stream and sends touch back.

Download on the App Store

Want early builds? Join the TestFlight beta,
or compile it from source ↗.

Support the project

If OpenDisplay saved you a monitor, consider buying me a coffee.

Free, open source, and funded out of my own pocket — including the Apple Developer membership behind signed, one-click installs. If it helps you, a tip keeps it going.

Support on Ko-fi

Features

A true extended display, the way it should be.

001

True extension

macOS treats your phone as a real monitor via a virtual display — arrange it in System Settings, drag windows onto it. Mirroring is available too.

002

USB-wired, lowest latency

Streams over your charging cable via usbmux. No network, no jitter — and your phone charges while it works.

003

WiFi, zero config

The phone advertises itself with Bonjour; pick it from a dropdown. No IP addresses to type.

004

Retina sharp

The virtual display matches your device panel pixel-for-pixel at HiDPI (@2x). Text looks like it should.

005

Touch & scroll

Tap to click, drag to drag, two-finger pan to scroll. A tiny touchscreen for your Mac.

006

Portrait mode

Rotate the phone and the virtual display rebuilds as a vertical monitor — perfect for chat, logs, or docs.

007

Low-latency pipeline

Hardware H.264 (VideoToolbox real-time mode), TCP_NODELAY, frame-dropping backpressure with instant keyframe recovery.

008

Private by design

One direct TCP connection between your devices. No servers, no accounts, no telemetry. Read the code.

009

No account, ever

No sign-up, no email, no login — and no Apple ID pairing. Download both apps and go. Most alternatives make you register first.

Contribute

Open source, and built in the open.

OpenDisplay is GPL-3.0 and developed entirely on GitHub — the whole stack, from Mac capture and H.264 encoding to the iOS receiver, is yours to read, build, and improve. Bug reports, feature ideas, and pull requests are all welcome. Build-and-run instructions live in the README.

New here? Start with the README quick-start to build both apps, or browse the good first issues.

Why OpenDisplay

The device you already own becomes a real additional display.

Free, but iPad-only, requires both devices on the same Apple ID, and only on blessed hardware pairs. iPhones need not apply.

Pioneered the idea — now behind a subscription.

Great latency, but you're buying a hardware dongle.

OpenDisplay

Free, open source, auditable. The device you already own becomes a real additional display. If you were about to build your own — contribute here instead.

How it stacks up

OpenDisplayApple SidecarDuetLuna
PriceFree & open sourceFreeSubscription$$ + dongle
iPhone as display
Different Apple IDs
No account / sign-upApple ID
Wired USB
Self-hosted / auditable

FAQ

Questions, answered.

How does it actually work?

The Mac creates a virtual display with the private CGVirtualDisplay API (the same technique used by BetterDisplay and DeskPad), captures it with ScreenCaptureKit, hardware-encodes H.264 with VideoToolbox, and streams it over a single TCP connection — through the USB cable via usbmux, or over WiFi. The phone decodes and renders withAVSampleBufferDisplayLayer and sends touch coordinates back, which the Mac injects as mouse events.

Is this on the App Store?

Yes — the iPhone & iPad receiver is live on the App Store. The Mac app ships as a signed, notarized direct download rather than through the Mac App Store because it relies on CGVirtualDisplay, a private API — that's the deal for every virtual-display product: use it or ship a dongle. You can also build either app from source with your own (free) Apple developer account in a few minutes.

Why do I see the purple screen-recording indicator on my Mac?

macOS shows that privacy indicator for every app that captures the screen — Duet, Luna, OBS and Zoom included. Apple Sidecar avoids it only because it's built into the OS. It's a feature, not a bug: you always know a capture is running.

WiFi mode can't find my iPhone — why?

WiFi discovery needs the Local Network permission on bothsides, and macOS/iOS deny it silently if the prompt was missed: check System Settings → Privacy & Security → Local Network on the Mac, and Settings → Privacy & Security → Local Network on the iPhone. Both devices must be on the same WiFi and the iPhone app must be open. The Mac app shows a live permission panel, and the iPhone app has a settings screen (shake the phone) that links straight there. USB mode needs none of this.

iPad support?

The receiver is a universal iOS app — it runs on iPad today. Run the Mac, an iPhoneand an iPad at once for a second and a third screen. iPad-specific features (Apple Pencil, pressure) are on the roadmap.

Is any of my screen data sent to a server?

No. One direct TCP connection between your Mac and your device. No accounts, no analytics, no cloud. The full story — what the apps store locally, which permissions they use and why, and the one current caveat about unencrypted WiFi transport — is on the privacy page.

What's the license? Can I fork it or use it commercially?

OpenDisplay is licensed under GPL-3.0. You can use, study, and adapt it freely — including commercially. If you distribute a modified version, it must remain open source under the same license with the original attribution intact, so improvements flow back to everyone instead of into closed forks. (Releases up to v0.4.x were MIT-licensed and remain available under those terms.)