DroidCast is a native macOS app that mirrors your Android phone screen to your MacBook with full touch control, audio forwarding, and real-time performance. Built on scrcpy with a premium macOS 26 Liquid Glass interface.
- Screen Mirroring — Real-time HD display of your Android on Mac
- Full Touch Control — Interact with your phone using Mac's keyboard & trackpad
- Audio Forwarding — Phone audio (media + calls) streams to Mac speakers
- USB & Wi-Fi — Connect via cable or wirelessly over the same network
- Float Over Apps — Pin phone screen above all Mac windows for multitasking
- Performance Profiles — Gaming, Balanced, Quality, or Battery Saver modes
- Quick Actions — Home, Back, Recents, Volume, Power, Screenshot from Mac
- Recent Devices — One-tap reconnect to previously connected WiFi devices
- Auto-Disconnect Detection — Returns to home screen when phone disconnects
- Setup Guide — Built-in step-by-step instructions for first-time setup
DroidCast requires two command-line tools installed via Homebrew:
brew install scrcpy android-platform-tools| Tool | Purpose |
|---|---|
scrcpy |
Screen mirroring engine |
adb (android-platform-tools) |
Android device communication |
# Clone the repository
git clone https://github.com/codexbeats/droidcast.git
cd droidcast
# Install dependencies
npm install
# Build the native helper (macOS only)
npm run build:helper
# Launch
npm start- Download the latest
.dmgfrom Releases - Open Terminal and run (required for unsigned apps):
xattr -cr ~/Downloads/DroidCast-1.0.0-arm64.dmg - Open the DMG and drag DroidCast to Applications
- Right-click the app → Open on first launch
- Open Settings → About Phone on your Android
- Tap Build Number 7 times to enable Developer Options
- Go to Developer Options → USB Debugging → turn it on
- Enable USB Debugging (Security Settings) — required for touch control
- Plug your phone into Mac via USB cable
- Tap Allow on the USB debugging prompt
- DroidCast will auto-detect your device
- Enable Developer Options and USB Debugging (steps above)
- Make sure phone & Mac are on the same Wi-Fi
- Go to Settings → About Phone → Detailed Info and Specs → Device Status
- Find your IP address under Device Identifiers
- Enter the IP address in DroidCast's Wi-Fi connect panel
| Profile | FPS | Bitrate | Resolution | Best For |
|---|---|---|---|---|
| 🎮 Gaming | 120 | 12 Mbps | Native | Games, low latency |
| ⚡ Balanced | 60 | 8 Mbps | 1920px | General use |
| 🎬 Quality | 60 | 16 Mbps | Native | Video, photos |
| 🔋 Battery | 30 | 4 Mbps | 1280px | Long sessions |
- Framework: Electron 33
- Mirroring: scrcpy (via ADB)
- UI: Vanilla HTML/CSS/JS — macOS 26 Liquid Glass design
- Native Helper: Swift (CGSSetWindowLevel for float-over-apps)
- Platform: macOS only (Apple Silicon + Intel)
droidcast/
├── src/
│ ├── main.js # Electron main process (ADB, scrcpy, IPC)
│ ├── preload.js # Context bridge (secure IPC)
│ ├── renderer/
│ │ ├── index.html # UI layout
│ │ ├── styles.css # Liquid Glass design system
│ │ └── app.js # Frontend logic
│ └── helpers/
│ └── pin_window.swift # Native macOS window float helper
├── package.json
├── LICENSE
└── README.md
| Issue | Solution |
|---|---|
| "scrcpy not found" | Run brew install scrcpy android-platform-tools |
| Phone not detected | Enable USB Debugging + Security Settings in Developer Options |
| Can't control phone | Enable USB Debugging (Security Settings) (Xiaomi/POCO) |
| Black screen on password | Enter PIN via Mac keyboard — FLAG_SECURE blocks visual capture |
| WiFi disconnects | Ensure phone doesn't switch networks; check IP hasn't changed |
| No audio | Make sure "Sound to Mac" toggle is enabled before starting mirror |
| Float not working | Grant accessibility permissions if prompted; restart DroidCast |
- No telemetry — DroidCast sends zero data to any server
- No network calls — All communication is local (USB/WiFi to your phone)
- No data stored — Only recent device names are saved locally
- Open source — Full source code available for audit
- Content Security Policy — Enforced in Electron to prevent XSS
Pull requests are welcome. For major changes, please open an issue first.
- Fork the repo
- Create your branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add amazing feature') - Push to branch (
git push origin feature/amazing-feature) - Open a Pull Request
MIT — free for personal and commercial use.
Built with ❤️ for Android + Mac users