OpenDisplay: Turn an iPhone into a free Retina second display for Mac
For Mac users, it turns an iPhone into a free Retina second display with USB, WiFi, and touch—without a subscription or dongle.
GitHub peetzweg/opendisplay Updated 2026-09-15 Branch main Stars 3.6K Forks 251
Swift TypeScript macOS iOS H.264 Bonjour usbmuxd virtual display

🧭 Decision Guide

Try it if you

  • 你有 iPhone、iPad 或备用 Mac,并需要 Mac 的真实扩展显示而非仅镜像。
    README 的 Features 和 Install:支持 true display extension;备用 Mac 使用 OpenDisplay Receiver。
  • 你优先考虑 USB 低延迟,并能使用支持数据的 Lightning/USB-C 线。
    README 的 Run (USB — recommended) 与 FAQ:USB 延迟最低,充电线不支持,USB 2.0 数据线足够。
  • 你需要 Retina @2x、触控点击、拖拽和双指滚动输入。
    README 的 Features:Retina/HiDPI 按面板逐像素匹配,Touch input 支持 tap、drag 和 two-finger scroll。
  • 你希望屏幕内容只在 Mac 与设备之间传输,不使用账号或第三方服务器。
    README 的 Self-hosted & private 和 FAQ:使用一个直接 TCP 连接,没有 servers、accounts、analytics。

Skip it if you

  • 你不能接受依赖 macOS 私有 API 的虚拟显示器方案。
    README 的 FAQ 明确说明 CGVirtualDisplay 是 private API,macOS 更新可能导致故障。
  • 你需要音频传输或 Apple Pencil 压感输入。
    README 的 FAQ:Audio out of scope;iPad 的 Pencil、pressure 仍在 roadmap。
  • 你的工作环境禁止 Screen Recording 或 Accessibility 权限。
    README 的 Quick start:首次运行需要授予 Screen Recording 和 Accessibility 权限。
  • 你只有充电线、USB 1.x,或无法解锁设备并确认 Trust This Computer。
    README 的 FAQ:充电线和 USB 1.x 不支持;可靠连接需要数据线、解锁设备并接受 Trust This Computer。

Requirements

  • 需要两款应用:Mac 端 OpenDisplay 与 iOS 端接收应用;备用 Mac 方案改装 OpenDisplay Receiver。 / Requires two apps: the Mac OpenDisplay app and the iOS receiver; for a spare Mac, install OpenDisplay Receiver instead.
  • 发送端 Mac 需要 macOS 14;备用 Mac 接收端需要 macOS 12 Monterey 或更新版本。 / The sending Mac requires macOS 14; a spare Mac receiver requires macOS 12 Monterey or newer.
  • USB 需要支持数据的 Lightning/USB-C 线;USB 2.0 数据线足够,USB 1.x 不支持或未测试。 / USB requires a data-capable Lightning/USB-C cable; USB 2.0 is sufficient, while USB 1.x is unsupported or untested.
  • 首次运行需授予 Screen Recording 和 Accessibility 权限。 / The first run requires Screen Recording and Accessibility permissions.
  • WiFi 连接要求 Mac 与 iPhone 都开启 Local Network 权限并处于同一 WiFi。 / WiFi requires Local Network permission on both the Mac and iPhone, with both on the same WiFi network.

First step (verbatim from README)

./run.sh

Watch out

  • WiFi 发现失败时,两端 Local Network 权限缺失会静默失败;USB 模式不受影响。
    README FAQ:The Mac app doesn't show my iPhone in the Connection menu (WiFi)。
  • USB 连接要解锁设备并接受 Trust This Computer,避免不可靠 hub 或 adapter。
    README FAQ:What USB cable or version do I need?
  • macOS 菜单栏会出现紫色录屏指示灯,OpenDisplay 无法隐藏它。
    README FAQ:Why do I see the purple screen-recording indicator in the menu bar?
  • iPad 可用同一代码库,但 Pencil 和 pressure 仍在 roadmap。
    README FAQ:Does it support iPad?

Alternatives

  • Apple Sidecar:你的设备属于支持的硬件组合,并且两台设备使用同一个 Apple ID;Sidecar 不需要额外安装 OpenDisplay。
    README 章节 Why OpenDisplay exists
  • Duet Display:你接受订阅模式,并希望使用 README Comparison 中列出的商业显示方案。
    README 章节 Why OpenDisplay exists、Comparison
  • Luna Display:你愿意购买 hardware dongle,并选择 README Comparison 中的商业方案。
    README 章节 Why OpenDisplay exists、Comparison

Not stated in the README

  • 材料未提供 macOS 14 发送端的具体硬件兼容列表。 / The materials do not provide the detailed hardware compatibility list for the macOS 14 sender.
  • 材料未提供 iPhone、iPad 的最低 iOS/iPadOS 版本。 / The materials do not specify the minimum iOS/iPadOS version.
  • 材料未提供预构建 Mac 下载方式、安装包大小或签名发布细节。 / The materials do not provide prebuilt Mac download instructions, package size, or signing details.
  • 材料未给出不同分辨率、帧率和 H.264 预设下的实际延迟与 CPU/GPU 占用。 / The materials do not give measured latency or CPU/GPU usage across resolutions, frame rates, and H.264 presets.
  • 材料未展开当前 WiFi-encryption caveat 的具体威胁模型与加密方式。 / The materials do not detail the threat model or encryption method behind the current WiFi-encryption caveat.
  • 材料未说明 iPhone 与 iPad 的最低硬件型号及各型号的性能差异。 / The materials do not specify minimum iPhone/iPad hardware models or performance differences by model.

💡 Deep Analysis

6
No I need a Retina/HiDPI iPad second display and rely on Apple Pencil pressure sensitivity. Can OpenDisplay replace my professional drawing display?
For: A designer who needs a high-resolution touch auxiliary display and uses an iPad with Apple Pencil

No, not as a professional drawing-display replacement: Retina rendering and basic touch are supported, but Apple Pencil and pressure sensitivity are not currently available.

  • Features promises Retina/HiDPI output, native-resolution behavior, portrait/landscape switching, and touch actions such as tap, drag, and two-finger scrolling.
  • The same section explicitly says Apple Pencil support is on the roadmap. That means current support should not be interpreted as pressure-sensitive pen input being delivered to macOS.
  • The project insights also state that professional color management, extremely low-latency drawing, and high-refresh-rate work should not be assumed equivalent to a native display interface.
  • The current pipeline is primarily H.264, and the README does not promise color accuracy, pen latency, or high-refresh-rate behavior.

It is better suited to code, dashboards, reference windows, and ordinary touch interaction than to workflows dependent on pen pressure, color consistency, and drawing responsiveness.

  • Features: "Retina / HiDPI" and support for "tap to click", "drag", and "two-finger scroll"
  • Features: "Apple Pencil support is on the roadmap"
  • Project insight usage_limitations: professional color management, ultra-low-latency drawing, and high refresh rates should not be treated as native-display equivalents
  • Project data: the description mentions touch input but not Apple Pencil or pressure sensitivity
Not stated in the README:The README does not provide a delivery date for the Apple Pencil roadmap item or confirm any experimental implementation.;It provides no color-space, refresh-rate, encoding-latency, or pen-input-latency measurements.
Yes I have a Mac running macOS 14+ and an iPhone using a different Apple ID. I want a free true extended display rather than mirroring. Is OpenDisplay suitable?
For: A solo developer with a macOS 14+ Mac and an iPhone or iPad who wants a second screen without subscriptions or extra hardware

Yes, it fits because it directly addresses your iPhone, different-Apple-ID, and true-extension requirements.

  • The Features section says macOS treats the device as a real second monitor: you can drag windows to it and arrange it in System Settings instead of only mirroring.
  • The Comparison table lists support for iPhone displays, different Apple IDs, USB, and self-hosting. The project is also described as free, open source, no-account, and no-dongle.
  • The official receiver requires iOS 16.4+, while the Mac needs Screen Recording and Accessibility permissions; Accessibility is used for touch input.

USB is the better fit when latency matters: the README says it uses macOS’s built-in usbmuxd and needs no tunnel tools. The supplied README does not promise audio synchronization or professional-monitor behavior.

  • Features: "True display extension"
  • Comparison: OpenDisplay supports "iPhone as display", "Different Apple IDs", and "Wired (USB)"
  • Quick start / Install: the official iOS app requires iOS 16.4+; Screen Recording and Accessibility permissions are required
  • Project data: description says "free, open-source ... true second monitor"
./run.sh
Not stated in the README:The supplied README does not specify which Mac and iPhone models or refresh rates are suitable for your workload.;It does not provide measured latency or bandwidth figures at different resolutions.
Yes I want to connect an iPhone to my Mac over USB, use a Retina/HiDPI second display, and avoid WiFi jitter. Does the transport design fit this constraint?
For: A remote-work engineer who needs a high-resolution Retina second display over USB while constrained by bandwidth and interaction latency

Yes, this combination is explicitly supported, although actual behavior still depends on the cable, devices, and display workload.

  • Features calls USB the lowest-latency option. It uses a Lightning/USB-C cable and macOS’s built-in usbmuxd, avoiding the network, WiFi jitter, and helper tools.
  • Retina/HiDPI output matches the device panel pixel-for-pixel. The How it works section says the Mac creates an @2x virtual display from the receiver’s native panel size.
  • The pipeline uses hardware VideoToolbox H.264, real-time mode, no B-frames, TCP_NODELAY, frame-drop backpressure, and keyframe recovery. These choices target interactive latency and prevent delay from accumulating under congestion.
  • Quick start labels USB as recommended, but first use requires a reliable data cable, an unlocked device, Trust This Computer confirmation, and Screen Recording permission on the Mac.

It fits office work, coding, and auxiliary windows. The README does not promise a fixed FPS, end-to-end latency, or high-refresh-rate mode.

  • Features: "USB-wired for lowest latency", using built-in "usbmuxd" with "no WiFi jitter"
  • Features / How it works: "Retina / HiDPI", "@2x HiDPI", and the receiver’s native panel size
  • Features: "hardware H.264 encode", "TCP_NODELAY", and "frame-drop backpressure with keyframe recovery"
  • Quick start (USB — recommended): requires a cable, Trust This Computer, and Screen Recording permission
./run.sh
Not stated in the README:The README does not specify maximum USB resolution, frame rate, or end-to-end latency.;It does not compare hardware H.264 performance across Mac and iPhone models.
It depends I do not want screen contents to pass through a project server or require an account, but my Mac and iPhone must use WiFi. Does OpenDisplay’s privacy model meet that requirement?
For: A macOS/iOS user handling sensitive code and client data on shared WiFi who rejects third-party cloud services and account registration

It depends: it satisfies the no-account, no-project-server, and local-direct-connection requirements, but the README flags limitations around WiFi encryption, so shared WiFi cannot be treated as secure by default.

  • Features says screen contents never touch anyone’s server; the two apps communicate directly over one TCP connection and do not require registration.
  • WiFi discovery uses Bonjour and requires both devices to be on the same network, with the receiver kept in the foreground. This simplifies setup but places discovery and connection inside the local network.
  • The project insights explicitly call out current WiFi encryption concerns and recommend trusted local networks together with firewall and network-isolation controls.

A home or controlled office LAN can satisfy the self-hosted, non-cloud requirement. A hotel, guest, or shared WiFi network is a different decision: the supplied README does not provide an end-to-end encryption guarantee for sensitive screen contents.

  • Features: "your screen never touches anyone's server" and "Self-hosted & private"
  • How it works: "The phone listens and the Mac connects" over a single TCP connection
  • Quick start (WiFi): automatic Bonjour discovery requires both devices on the same network
  • Project insight usage_limitations / best_practices: WiFi encryption has limitations; use a trusted local network
Open the iPhone app, then pick **"iPhone (WiFi)"** from the Connection menu in the Mac app.
Not stated in the README:The supplied README does not say whether WiFi uses TLS, a pre-shared key, or another authentication mechanism.;It does not define in detail which other devices on the LAN can see or reach the Bonjour service.
Yes I use Swift and Xcode 15+ and want to modify the VideoToolbox H.264 pipeline or add control messages. Is this project a suitable extensible codebase?
For: An open-source contributor working with Swift, Xcode 15+, and Apple signing who wants to modify the video transport or input protocol

Yes, it is a suitable base because the main media path and wire protocol are already exposed for extension.

  • The How it works section documents the chain from CGVirtualDisplay and ScreenCaptureKit through VideoToolbox H.264, TCP, and AVSampleBufferDisplayLayer, with clear boundaries for receiving and input injection.
  • It states that socket framing, discovery, video format, and every control message are specified in PROTOCOL.md, while protocol evolution is covered by COMPATIBILITY.md.
  • The project is primarily Swift, and the Quick start requires Xcode 15+, matching your toolchain.

There are constraints: the virtual display uses the private CGVirtualDisplay API, so the project cannot ship through the App Store. Public distribution also involves signing, notarization, and GPL-3.0 obligations. The supplied README does not guarantee how newly added fields behave with older clients.

  • How it works: "CGVirtualDisplay → ScreenCaptureKit → VideoToolbox H.264 → TCP"
  • How it works: "Everything that crosses the socket ... is specified in PROTOCOL.md"
  • Quick start: "Xcode 15+"
  • Project data: main_language is Swift; license is GNU General Public License v3.0
brew install xcodegen   # project generation
Not stated in the README:The supplied README does not show exact source-module boundaries, test coverage, or the compatibility strategy for new protocol messages.;It does not describe private-API stability across macOS minor releases.
It depends I have an older Mac running macOS 12 and want to use it as a second display for another Mac over Thunderbolt or Ethernet. Is OpenDisplay suitable for this deployment?
For: A developer maintaining an older Mac on macOS 12 who wants to use it as a receiver over Thunderbolt or Ethernet

It depends: the receiver version and wired options match the README, but the sender must meet macOS 14+ requirements, so the two Mac roles matter.

  • Features explicitly supports installing OpenDisplay Receiver on a spare Mac, with macOS 12+ required for the receiver. It can connect over WiFi or Thunderbolt/Ethernet at native Retina resolution.
  • The installation section distinguishes the Mac sender from the OpenDisplay Receiver. The sender is the component that creates the virtual display and therefore has the stricter system requirement.
  • The lowest-latency USB path is described for Lightning/USB-C connections to iPhone or iPad. For Mac-to-Mac use, the README names WiFi or Thunderbolt/Ethernet instead; usbmuxd should not be assumed to cover this case.

Using the old Mac only as a receiver is consistent with the documentation. Using it as a sender is not confirmed for macOS 12. Receiver-side keyboard and mouse input are also not complete.

  • Features: "A spare Mac as a display", "macOS 12+", and support for a "Thunderbolt/Ethernet cable"
  • Install: distinguishes the "Mac app (captures and sends)" from "OpenDisplay Receiver"
  • Project insight usage_limitations: the Mac sender requires macOS 14+; a Mac receiver requires macOS 12+
  • Project insight common_pitfalls: keyboard and mouse input on the Mac receiver are not complete
Not stated in the README:The supplied README does not clarify whether the macOS 14+ sender requirement comes from a formal compatibility table or has exceptions.;It provides no measured bandwidth, latency, or refresh-rate data for Mac-to-Mac Thunderbolt/Ethernet.

✨ Highlights

  • Supports true display extension over USB and WiFi
  • VideoToolbox provides low-latency H.264 encoding
  • Retina @2x rendering and touch input are built in
  • No account, subscription, or hardware dongle required

🔧 Engineering

  • The Mac creates a CGVirtualDisplay and the iPhone receives the H.264 stream.
  • USB uses macOS built-in usbmuxd without tunnel tools.
  • WiFi discovers the iPhone through Bonjour and supports touch and two-finger scrolling.
  • A spare Mac can run OpenDisplay Receiver on macOS 12+.

⚠️ Risks

  • CGVirtualDisplay uses a private API and macOS updates may break it.
  • WiFi requires Local Network permission on both sides or it fails silently.
  • USB requires a data-capable cable; charge-only cables do not work.
  • Screen capture triggers macOS's purple screen-recording indicator.
  • WiFi encryption has a current caveat documented on the privacy page.

👥 For who?

  • macOS users with an iPhone, iPad, or spare Mac.
  • Developers needing a low-latency USB display with Retina HiDPI.
  • Users comfortable with GPL-3.0 and Screen Recording and Accessibility permissions.
  • Privacy-conscious teams wanting self-hosting without sending screen content to servers.