A polished Electron + React desktop UI for scrcpy, with a smooth Windows installer and a clean, fast UX.
- Overview
- Features
- Screenshots
- Requirements
- Quick Start (Development)
- Build & Installer
- Configuration
- Project Structure
- Ports & Networking
- Troubleshooting
- Roadmap
- Contributing
- Security & Privacy
- License
- Credits
ScrcpyUI Pro is a desktop application that wraps scrcpy with a modern, user‑friendly interface. It includes a Windows installer, consistent branding, and a small Express backend to orchestrate commands.
- Tech Stack: Electron (Forge + NSIS), React, Vite, Express
- OS: Windows 10/11
- Executable Name:
ScrcpyUIPro.exe - App ID (Windows taskbar):
com.tusharkumarroy.scrcpyuipro
- Fast, clean UI for scrcpy
- Windows NSIS installer with Start Menu/Desktop shortcuts
- Taskbar icon + custom branding
- “Made with ❤️ by Oparthib” credit section
- Express backend for command orchestration
- Vite optimizations with vendor chunk splitting
- TypeScript-friendly setup
Place screenshots in docs/ and update links:
- UI:
docs/screenshot-ui.png - Installer:
docs/screenshot-installer.png
- Windows 10/11
- Node.js 18+
- scrcpy & adb
- If bundled in
resources/bin, no extra setup is needed - Otherwise ensure
scrcpyandadbare onPATH
- If bundled in
- Install dependencies
npm install- Start backend (Express on port 3001)
npm run backend- Start web (Vite dev server on port 3000)
npm run dev- Launch Electron (loads http://localhost:3000 in dev)
npm startConnect your device with USB debugging and go.
- Production web build
npm run build- Create Windows installer (NSIS)
npm run make- Output (example)
out\make\nsis\make\ScrcpyUIPro Setup 1.0.0.exe
Install and run from Start Menu or Desktop shortcut.
package.jsonproductName: "ScrcpyUIPro"build.productName: "ScrcpyUIPro"build.appId: "com.tusharkumarroy.scrcpyuipro"
forge.config.cjspackagerConfig.name = "ScrcpyUIPro"packagerConfig.executableName = "ScrcpyUIPro"
- Put
icon.icoinbuild/ - Ensure it’s bundled as a resource (in
forge.config.cjsviaextraResource)
In main.js, use the correct icon path for dev vs. packaged app:
icon: isDev
? path.join(__dirname, 'build/icon.ico')
: path.join(process.resourcesPath, 'icon.ico')Set Windows AppUserModelID on ready:
if (process.platform === 'win32') {
app.setAppUserModelId('com.tusharkumarroy.scrcpyuipro');
}Create .env.local (optional):
# Example (if using AI or external APIs)
GOOGLE_API_KEY=your_key_here
# If needed for dev overrides
VITE_API_BASE=http://localhost:3001
scrcpyui-pro-desktop/
├─ build/ # icon.ico and app icons
├─ dist/ # Vite production output (auto-generated)
├─ out/ # Installer & packaged app (auto-generated)
├─ resources/
│ ├─ bin/ # Optional bundled scrcpy/adb and assets
│ ├─ author.png
│ └─ logo.png
├─ main.js # Electron main
├─ preload.cjs # Electron preload
├─ server.js # Express backend
├─ App.tsx # React UI
├─ vite.config.ts # Vite config
├─ forge.config.cjs # Electron Forge + NSIS
├─ package.json
└─ vite-env.d.ts
- Dev Web:
3000(Vite) - Backend:
3001(Express) - ADB (wireless): typically
5555
Current behavior uses fixed ports; a dynamic port finder can be added later.
Windows may look for ScrcpyUI Pro.exe if any config still uses a spaced name.
Fix:
- Uninstall all “ScrcpyUI Pro/ScrcpyUIPro” in Windows Settings → Apps
- Delete app data folder (if exists):
C:\Users\<you>\AppData\Local\scrcpyui_pro_desktop(or similarly named) - Ensure configuration consistency:
productName,packagerConfig.name, andexecutableNameare allScrcpyUIPro- NSIS maker sets
shortcutName: "ScrcpyUIPro"
- Clean build artifacts and rebuild:
Remove-Item -Recurse -Force out, dist
npm run build
npm run makeProcesses may still be running.
taskkill /F /IM "ScrcpyUIPro.exe" /IM "scrcpyui-pro-desktop.exe" /IM "ScrcpyUI Pro.exe" /IM "electron.exe" /IM "node.exe" /TClick Retry in the installer.
- Ensure
build/icon.icoexists - Ensure it’s added to
extraResource - Use
process.resourcesPathin production for the icon path - Set
app.setAppUserModelId('com.tusharkumarroy.scrcpyuipro')
Vendor chunking is configured in vite.config.ts and chunkSizeWarningLimit increased.
vite-env.d.ts declares *.png, *.jpg, *.svg modules.
Add to PATH or bundle in resources/bin.
Windows may flag unsigned installers. Consider code signing for public releases.
- Dynamic port detection for dev/prod
- Auto-detect scrcpy/adb with guided setup
- Multi-device sessions & profiles
- Settings persistence
- Auto-update support
- Theming & layout presets
- Fork and create feature branches
- Keep UI consistent with current styles
- Don’t commit secrets; use
.env.local - Run build/test before PRs
- No data collection by default
- External services (e.g., AI APIs) require your own keys
- Keep keys out of version control
MIT — see LICENSE for details.
- UI & branding by Oparthib (Tushar Kumar Roy)
- scrcpy by Genymobile
- Icons by lucide-react
- Built with Electron, React & Vite
