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.
How it works
The Android device listens and the Mac connects — that's what lets it work over WiFi with zero manual setup, via mDNS discovery, without a single change to the original OpenDisplay Mac app.
MAC (server, original OpenDisplay app)
ANDROID (this project)
Screenshots
No staged mockups — every shot below is a live session between an Android tablet and a Mac.
Installation
Install both to get going — the Mac side is the original OpenDisplay project, unmodified.
Captures a virtual display and streams it. It's the original OpenDisplay program, unmodified.
Download for MacPrefer to build it yourself? Build from source ↗
Displays the stream and sends touch/scroll back.
Download APK (v0.0.32)Google Play version is in closed testing — want in? Email josepacelli@gmail.com. Meanwhile, sideload the APK above, or build it from source ↗. Browse older releases ↗
Features
Validated against the real Mac app, not a spec sheet.
MediaCodec decoding straight to a Surface, no CPU conversion.
mDNS (_opensidecar._tcp) — the Mac finds the Android device on its own on the same network.
One finger becomes a click/drag, two fingers become scroll.
A dot or decoded sprite, mirroring the Mac's cursor position live.
Survives the app going to background and resumes correctly after unlocking the screen.
Decoder errors trigger an automatic keyframe request, without dropping the connection.
Editable mDNS name and IP:port connection for when automatic discovery fails.
Plug the cable, tap the system's prompt, done — no adb, no developer options.
Leave the app while connected and the video keeps playing in a floating window.
Same philosophy as the original project: no central server, nothing phoned home.
Compare
For using an Android tablet as an external monitor.
| OpenDisplay Android | Duet Display | Spacedesk | |
|---|---|---|---|
| Price | Free | Paid | Free (core) |
| Open source | GPL-3.0 | No | No |
| Account required | No | Yes | No |
| Same protocol as OpenDisplay Mac | Yes | No | No |
| Central server | None | Yes | No |
FAQ
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.
The Google Play version is currently in closed testing. Want in as a tester? Email
josepacelli@gmail.com. Meanwhile, it's also
distributed via GitHub Releases — install it with adb install or by copying
the APK to the device (enable "unknown sources").
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 a fallback covering Mac apps without AOA support yet.
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 (fixed in #5).
No modification whatsoever — any protocol mismatch is this project's responsibility, not upstream's.
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
Bug reports and PRs go on the GitHub repository, which also has the architecture, protocol and build details. Careful bug reports are what actually make a one-person side project better — thanks to everyone below.
@gaeaearth — this project's most active early tester: the Android 12/13 launch crash (#4), the screen-timeout/reconnect issues (#10, also the idle-screen fix in #28), and the misleading manual-connection hint (#18).
@edoardomich — fixed the Android 12/13 launch crash (#5).
@jpbhdrey — built the USB accessory (AOA) transport
(#33): plug the
cable, tap the system's prompt, done, no developer options or adb dance required.
This is a one-person side project, built and maintained by me, Jose Pacelli, evenings and weekends — not a company.
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.