OpenDisplay Android
early alpha · tested on real hardware

Use your Android tablet or phone as a second monitor for your Mac.

An unofficial, open-source Android client for OpenDisplay — the original project only ships an iOS/iPadOS client. This one speaks the same network protocol, with no changes required on the Mac app. No account, no subscription, no dongle.

Android 8.0+ (API 26) · macOS (via the original OpenDisplay app) · GPL-3.0
Free, and built by one person. Support on Ko-fi ↓

How it works

The Mac side stays the original OpenDisplay app, unmodified. The Android device listens and the Mac connects — that's what lets it work over WiFi with zero manual setup, via mDNS discovery.

MAC (server, original OpenDisplay app) ANDROID (this project) CGVirtualDisplay → ScreenCaptureKit → VideoToolbox H.264 → TCP

Screenshots

Real hardware, real WiFi connection — no staged mockups.

Installation

Two sides, two roles.

01 · MAC

The server

Captures a virtual display and streams the video. It's the original OpenDisplay program, unmodified.

peetzweg/opendisplay →
02 · ANDROID

The receiver

Receives the video and sends touch/scroll back. A debug APK is available on the releases page, or build it from source.

Download APK →

Features

What already works today, validated against the real Mac app.

001

Hardware H.264 video

MediaCodec decoding straight to a Surface, no CPU conversion.

002

Automatic discovery

mDNS (_opensidecar._tcp) — the Mac finds the Android device on its own on the same network.

003

Touch and scroll

One finger becomes a click/drag, two fingers become scroll.

004

Remote cursor

A dot or decoded sprite, mirroring the Mac's cursor.

005

Foreground service

Survives the app going to background and resumes correctly after unlocking the screen.

006

Error recovery

Decoder errors trigger an automatic keyframe request, without dropping the connection.

007

Manual fallback

Editable mDNS name and IP:port connection for when automatic discovery fails.

008

USB accessory (AOA)

Plug the cable, tap the system's prompt, done — no adb, no developer options, no usbmuxd.

009

No account, no telemetry

Same philosophy as the original project: no central server.

Compare

Against the best-known alternatives for using an Android tablet as an external monitor.

OpenDisplay AndroidDuet DisplaySpacedesk
PriceFreePaidFree (core)
Open sourceGPL-3.0NoNo
Account requiredNoYesNo
Same protocol as OpenDisplay MacYesNoNo
Central serverNoneYesNo

FAQ

Is this the same app as OpenDisplay for iOS?

No. It's an independent client, written from scratch in Kotlin, that implements the same network protocol to interoperate with the original Mac app. The official project only ships an iOS/iPadOS client.

Is it on Google Play?

Not yet. The current version is a debug APK distributed via GitHub Releases — install it with adb install or by copying the APK to the device (enable "unknown sources").

Does it need WiFi?

It works over WiFi with automatic mDNS discovery. You can also connect over USB as a native accessory (AOA) — plug the cable and tap the system's prompt, no adb required. See the repository for details, including a fallback for Mac apps without AOA support yet.

Does it work on any Android tablet or phone?

Requires Android 8.0 (API 26) or higher. Tested on real hardware (Samsung Galaxy Tab S9 FE+ and Galaxy Note10+/Tab S7+, Android 12 through 16), but not yet across a wide range of devices — touch/scroll/cursor are implemented but with limited field validation so far. Note: v0.0.7 and earlier crash on launch on Android 12–13 (API 30-33); use v0.0.8 or newer. Thanks to @gaeaearth for reporting it and @edoardomich for the fix.

Does it change anything on the Mac app?

No. The Mac side stays the original OpenDisplay app, with no modification whatsoever — any protocol mismatch is this project's responsibility, not upstream's.

What's the license?

GPL-3.0, same as the original project. Open source, free to use including commercially; distributed modified versions must remain open source under the same license.

Contribute

Issues, bug reports and pull requests are welcome on the GitHub repository, which also has the architecture, protocol and build details.

Special thanks to @gaeaearth, this project's most active early tester — reported the launch crash on Android 12/13, the screen-timeout and reconnect issues (and the idle-screen fix that followed), and the misleading manual-connection hint. Careful bug reports like these are what actually make a one-person side project better. And to @edoardomich, who fixed that Android 12/13 launch crash (#5). And to @jpbhdrey, who built the USB accessory (AOA) transport (#33) — plug the cable, tap the system's prompt, done, no developer options or adb dance required. And to @dyss1992, who reported the Mirror mode aspect ratio bug on some Qualcomm decoders with a controlled before/after comparison that made the root cause obvious (#44), and suggested the immersive fullscreen mode (#45).

Support the project

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

OpenDisplay Android is a one-person side project, built and maintained by me, Jose Pacelli. It's not a company. It's just me, in my spare time.

It's free and open source — an unofficial, separately maintained Android client that speaks the same protocol as the original OpenDisplay Mac/iOS project. No account, no subscription, no dongle, put together evenings and weekends.

Supporting me on Ko-fi keeps this project maintained and free for everyone, including people who can't afford to chip in. My goal is to make this the best free way to turn a spare Android tablet into a real second monitor.

If it saved you from buying a monitor, a small tip helps keep it going. Thank you.