Skip to content

Repository files navigation

LegacyPad Display

LegacyPad Display icon

Turn a first-generation iPad Air into a wired Retina second display for a Mac. Free, open source, native, and cable-only.

License: GPL v3 iOS 12 macOS Swift

LegacyPad Display creates a real extended macOS desktop, not a mirrored screen or browser stream. The Mac creates an independent HiDPI virtual monitor, captures it with ScreenCaptureKit, encodes it as low-latency H.264, and sends it through the Lightning cable. A native iOS 12 app decodes and displays the video using Apple hardware acceleration.

No Wi-Fi, subscription, jailbreak, custom operating system, touch input, or changes to the iPad firmware are required.

Warning

This is an experimental prototype that uses an undocumented macOS API. Build it from source and read the limitations before relying on it.

Tested hardware

Component Tested configuration
iPad iPad Air (1st generation), Wi-Fi, model A1474
Apple part number MD785LL/B
Storage and color 16 GB, Space Gray
iPad system iOS 12.5.8
Connector Lightning to USB
Mac Apple Silicon Mac, tested on Apple M3
macOS Tested on macOS 26.5.1
Xcode Tested with Xcode 26.6

Other 64-bit iPads capable of running the client may work, but they have not yet been validated. Intel Macs are also untested.

The native 2048×1536 stream has been validated on the exact A1474/iOS 12.5.8 device above. Apple's published playback specification lists H.264 up to 1080p, so compatibility with other old iPad models must be tested separately.

What works

  • A genuine extended desktop recognized by macOS as a separate monitor.
  • Selectable Maximum Sharpness mode: 1024×768 logical, Retina 2× and pixel-for-pixel 2048×1536 capture.
  • Selectable More Space mode: 1366×1024 logical, rendered by macOS at 2732×2048 and downsampled once to the panel's native 2048×1536.
  • Native 2048×1536 video output in both modes, with no enlargement on the iPad.
  • 30 FPS H.264 Constrained High Profile at approximately 18 Mbps.
  • Hardware-accelerated VideoToolbox encoding and iOS decoding.
  • Direct USB transport through Apple's local usbmuxd service.
  • Visible macOS cursor.
  • A Mac host that lives only in the menu bar and creates no windows.
  • Automatic placement of the iPad display to the right of the main display.

What it does not do

  • Touch, Apple Pencil, keyboard, or audio forwarding.
  • Wi-Fi or Internet streaming.
  • Display mirroring in place of an extended desktop.
  • App Store installation or permanent free provisioning.
  • Official Apple Sidecar compatibility.

How it works

macOS virtual HiDPI display
          │
          ▼
ScreenCaptureKit (YUV 4:2:0)
          │
          ▼
VideoToolbox H.264 hardware encoder
          │
          ▼
usbmuxd over Lightning/USB, TCP port 49152
          │
          ▼
Native iOS 12 receiver + AVSampleBufferDisplayLayer

The virtual monitor is created using the undocumented CGVirtualDisplay runtime classes. It exists only while the Mac host is running.

Requirements

  • A Mac running macOS 13 or newer.
  • Xcode with an Apple ID configured for code signing.
  • XcodeGen.
  • A 64-bit iPad on iOS 12 or newer, paired with and trusted by the Mac.
  • A data-capable Lightning cable.
  • One free USB-connected iOS device during setup.

Install XcodeGen with Homebrew if needed:

brew install xcodegen

Build and install

1. Generate the Xcode project

git clone https://github.com/pedroaqs/legacypad-display.git
cd legacypad-display
xcodegen generate
open iPadDisplay.xcodeproj

project.yml is the source of truth. The generated Xcode project is included for convenience, but regenerate it after changing build settings.

2. Configure signing

In Xcode, select both targets and choose your own team under Signing & Capabilities:

  • iPadDisplayHost
  • iPadDisplayClient

If Xcode reports a bundle identifier conflict, replace com.pedroaqs in project.yml with your own reverse-domain prefix, regenerate the project, and try again. Never commit your Development Team ID or provisioning profile.

3. Install the iPad client

  1. Connect and unlock the iPad.
  2. Tap Trust if the iPad asks whether to trust the Mac.
  3. Select the physical iPad as the run destination.
  4. Build and run iPadDisplayClient.
  5. On iOS 12, trust the developer certificate under Settings → General → Device Management or Profiles & Device Management if prompted.

Recent Xcode versions may no longer ship the iOS 12 Developer Disk Image. If device installation fails for that reason, use a compatible older Xcode device support image or install the signed app with libimobiledevice. Apple device-support images are not included in this repository.

4. Run the Mac host

  1. Build and run iPadDisplayHost from Xcode.
  2. Grant Screen & System Audio Recording permission when macOS requests it.
  3. Quit and relaunch the host once after granting permission.
  4. Open iPad Display on the iPad and keep the cable connected.

The host appears as a display icon in the macOS menu bar. Use that menu to switch between Maximum Sharpness and More Space, start or stop the virtual display, and quit the host. The selected mode is remembered.

Free provisioning

A free Apple Personal Team normally signs the iPad app for only seven days. When it expires, rebuild and reinstall the client. A paid Apple Developer membership provides longer-lived development provisioning, but is not required to test the project.

Troubleshooting

The iPad says the developer is not trusted

Open Settings → General → Device Management, select your Apple ID, and tap Trust. The menu may appear only after the first signed app is installed.

macOS repeatedly requests screen-recording permission

Always launch the same signed copy of the Mac host from the same path. Rebuilding or copying differently signed bundles can make macOS treat them as new apps.

The Mac host is running but there is no image

  • Confirm the iPad client is open in the foreground.
  • Unlock the iPad and reconnect the cable.
  • Confirm that the iPad trusts the Mac.
  • Keep only one iOS device connected while diagnosing.
  • Check that Screen Recording is enabled for the exact host bundle being run.

The mouse cannot move onto the iPad

Open System Settings → Displays → Arrange and confirm that the iPad display touches an edge of the main display. The host normally places it immediately to the right.

Safety and privacy

  • The iPad stays on stock iOS; no jailbreak or firmware modification occurs.
  • Removing the client returns the iPad to its previous state.
  • Video travels through the local USB multiplexing service, not the Internet.
  • The host captures only the virtual display it creates.
  • No analytics, accounts, cloud services, or telemetry are included.

Limitations and compatibility warning

CGVirtualDisplay is undocumented and unsupported by Apple. A macOS update can change or remove it without notice. This project is not affiliated with or endorsed by Apple Inc. Apple, iPad, iPad Air, macOS, Sidecar, and Lightning are trademarks of Apple Inc.

Contributing

Issues and pull requests are welcome, especially hardware reports for other iPad and Mac models. Read AGENTS.md before making automated or agent-assisted changes.

Useful contribution areas include:

  • Resolution and frame-rate profiles.
  • Robust reconnection and backpressure.
  • Compatibility testing on Intel Macs and other legacy iPads.
  • Reproducible signing and installation documentation for old iOS versions.
  • Performance measurements for latency, CPU, GPU, and power use.

Credits

  • Pedro AQS — creator, product direction, hardware testing, and maintainer.
  • OpenAI Codex — architecture, implementation, debugging, optimization, and documentation collaboration.
  • SamuelRioTz / SimpleDisplay — reference declarations for the undocumented CGVirtualDisplay API. See the attribution in VirtualDisplayBridge.h.

More detail is available in AUTHORS.md.

License

LegacyPad Display is licensed under the GNU General Public License v3.0 only. See LICENSE. The CGVirtualDisplay declarations were adapted from the GPL-3.0 SimpleDisplay project, so derivative distributions must preserve the applicable GPL terms and attribution.

Search keywords

iPad Air 1 second display, iPad Air A1474 monitor, MD785LL/B, iOS 12 second monitor, old iPad external display, wired iPad display Mac, open source Sidecar alternative, free Duet Display alternative, Lightning USB second screen, legacy iPad Retina monitor, macOS virtual display, CGVirtualDisplay, ScreenCaptureKit, usbmuxd.

Releases

Packages

Contributors

Languages