Skip to content

8-BitBirdman/DroidScreen

 
 

Repository files navigation


DroidScreen

Mirror, control and record your Android device on macOS — wirelessly.


License Release Platform PRs Welcome


A modern, dark-themed GUI for scrcpy — built for macOS, designed for speed, paired in seconds.

No cable. No setup hassle. Just scan, pair, mirror.



✨ Highlights

⚡ Quick Connect

One-tap pairing for Android 11+ wireless debugging. Scan a QR code with your phone, or pair with a 6-digit code. Mirror in seconds.

🎨 Native Dark UI

A clean, modern dark theme with vibrancy effects. Built for macOS, fits right into Big Sur and later.

🔌 Cable Optional

Plug in for instant detection or stay wireless forever. Detects connected devices automatically.

🎬 Full scrcpy Power

Record, crop, rotate, control bitrate, FPS, resolution. All scrcpy options exposed through a clean form.

⌨️ Keyboard & Mouse

Type, click, swipe, copy/paste — your phone behaves like another window.

🛡️ Safe & Sandboxed

Input validation on every IPC call. No shell injection. No remote code paths.



🚀 Quick Start

Prerequisites

# Install scrcpy and adb (one-time setup)
brew install scrcpy android-platform-tools

Android 11+ users: enable Wireless Debugging in Developer Options. Android 5–10 users: enable USB Debugging and use the cable on first connection.

Install DroidScreen

Download the latest .app from Releases and drag it to /Applications.

Or build from source — see Development below.



📱 Connecting Your Phone

⚡ Wireless (Android 11+) — Recommended

Option A — QR Code (easiest)

Step Action
1 Phone → Settings → Developer Options → Wireless debugging → Pair device with QR code
2 Open DroidScreen → click Pair via QR Code
3 Point your phone's camera at the QR code shown on your Mac
4 Done — auto-pairs and the device appears in the list

Option B — 6-digit code (auto-discovered)

Step Action
1 Phone → Settings → Developer Options → Wireless debugging → ON
2 Open DroidScreen → click Scan for Devices
3 Tap Pair, enter the 6-digit code from your phone
4 Done — auto-connects and stays paired

Option C — Manual IP + Code (most reliable)

If QR or scan fails (some routers / Android builds), use the direct pairing flow:

Step Action
1 Phone → Settings → Developer Options → Wireless debugging → Pair device with pairing code
2 Note the IP address & port + 6-digit code shown
3 DroidScreen → click Pair Manually → enter IP:port and code
4 Done — device auto-appears in the list

💡 Same Wi-Fi network required. mDNS doesn't cross subnets. Phone hotspot may block client-to-host TLS pairing.

🔌 USB

  1. Plug your phone into your Mac
  2. Authorize the debug prompt on your phone
  3. Device appears automatically — click Open Selected Mirror

🌐 Manual IP (Legacy / Android ≤10)

  1. Connect via USB once to enable adb tcpip 5555
  2. Click ▼ Manual IP connect at the bottom of Devices
  3. Enter your phone's LAN IP → Open wireless connection


⌨️ Shortcuts

When the scrcpy mirror window has focus.

📋 Click to expand full shortcut reference
Action macOS Shortcut
Switch fullscreen mode ⌘ F
Resize window to 1:1 (pixel-perfect) ⌘ G
Resize window to remove black borders ⌘ X · Double-click
Click on HOME ⌃ H · Middle-click
Click on BACK ⌘ B · Right-click
Click on APP_SWITCH ⌘ S
Click on MENU ⌃ M
VOLUME UP ⌘ ↑
VOLUME DOWN ⌘ ↓
POWER ⌘ P
Power on (when off) Right-click
Turn device screen off (keep mirroring) ⌘ O
Expand notification panel ⌘ N
Collapse notification panel ⌘ ⇧ N
Copy device clipboard → Mac ⌘ C
Paste Mac clipboard → device ⌘ V
Copy Mac clipboard → device ⌘ ⇧ V
Enable/disable FPS counter (stdout) ⌘ I


⚙️ Configuration

The Configuration tab exposes every scrcpy option:

Setting What it does
scrcpy path Override location (leave blank if scrcpy is in your PATH)
Window title Custom title for the mirror window
Record screen Save mirror to .mkv file (with optional live preview)
Bit rate Video bitrate (default 8 Mbps — raise for better quality)
Max size Cap longest dimension (e.g. 1920) — 0 = native
Max FPS Cap framerate — 0 = unlimited
Rotation Force 0° / 90° / 180° / 270°
Crop Show only a region of the screen
Window position/size Pre-position mirror window
Always on top Pin mirror above other windows
Borderless Hide window chrome
Fullscreen Start fullscreen
Show touches Visualize taps on the device
Render expired frames Lower latency at cost of CPU
Stay awake Prevent screen sleep while mirroring
Auto-open Automatically mirror when device connects
Hide on close Minimize to tray instead of quitting


🛠 Development

Built with Electron 28 + Vue 2 + Element UI, bundled by Webpack. Native Apple Silicon (arm64).

# Clone & install
git clone https://github.com/8-BitBirdman/droidscreen
cd droidscreen
npm install --legacy-peer-deps

# Dev mode (hot reload, devtools)
npm run dev

# Production build → build/mac-arm64/DroidScreen.app
npm run pack:main && npm run pack:renderer
npx electron-builder --mac --arm64 --publish=never

# Lint
npm run lint

Project Structure

src/
├── main/                  # Electron main process
│   ├── index.js           # App lifecycle, IPC registration
│   ├── adb/               # ADB tracker, mDNS, pair, connect
│   └── scrcpy/            # scrcpy spawner with full arg builder
└── renderer/              # Vue app
    ├── components/
    │   ├── dashboard/     # Configuration & device Management
    │   ├── layout/        # Header / Footer
    │   └── menu/          # Tray + app menus
    ├── lang/              # i18n (English)
    ├── plugins/           # Vue plugins (store, notify, openExternal)
    └── styles/            # Global SCSS + dark theme overrides

Architecture

┌──────────────────┐  IPC   ┌──────────────────┐  spawn  ┌──────────┐
│  Renderer (Vue)  │ ◄────► │   Main (Node)    │ ──────► │  scrcpy  │
│   Management.vue │        │  adb / scrcpy    │         │   adb    │
└──────────────────┘        └──────────────────┘         └──────────┘
        │                            │
        │                            └─► adbkit (TCP)
        └─► @electron/remote (tray, menus)


🔐 Security Notes

  • All IPC inputs validated — addresses match host:port, codes are 6 digits
  • No shell interpolation — uses execFile, not exec, for adb calls
  • Mac-only by design — Windows/Linux paths and binaries removed
  • No telemetry. No tracking. No network calls beyond your own LAN


🐛 Troubleshooting

Phone not appearing when scanning
  • Verify Wireless Debugging is ON (not just Developer Options enabled)
  • Confirm Mac and phone are on the same Wi-Fi (mDNS won't traverse VLANs)
  • Some routers block mDNS / multicast — try disabling AP Isolation
  • Run adb mdns services in Terminal — if empty, it's a network issue, not the app
Pairing fails repeatedly
  • The pairing code expires fast — enter it within ~30 seconds
  • The pairing port changes every time you toggle Wireless Debugging — re-scan
  • Make sure no other tool (Android Studio, Vysor) is holding the adb server
  • protocol fault (couldn't read status message) from adb pair → toggle Wireless Debugging off/on on the phone, then adb kill-server && adb start-server and retry
  • Phone hotspot can block client-to-host TLS — use a shared Wi-Fi router instead
"scrcpy not found" error
  • Confirm install: which scrcpy should print a path
  • If installed but not found, set the scrcpy path explicitly in Configuration
  • macOS apps inherit a limited PATH — Homebrew paths usually work via fix-path
Mirror window opens but is black/laggy
  • Lower the bit rate or max size in Configuration
  • Disable Render expired frames
  • Check ~/Library/Logs/DroidScreen/ for scrcpy stdout


🤝 Contributing

Pull requests welcome. For substantial changes, open an issue first to discuss direction.

  1. Fork the repo
  2. Create a feature branch (git checkout -b feat/my-feature)
  3. Run npm run lint before committing
  4. Open a PR with a clear description


📜 Credits



📃 License

Apache 2.0


Made with ☕ for the Android-on-Mac crowd.

If DroidScreen saves you a USB cable, consider giving it a ⭐

About

Mirror, control and record your Android device on macOS — wirelessly. A modern, dark-themed GUI for scrcpy — built for macOS, designed for speed, paired in seconds.

Resources

Code of conduct

Contributing

Stars

Watchers

Forks

Releases

Contributors

Languages