A web-based screen mirroring and remote control interface for Waydroid Android containers. Stream your Waydroid display to any web browser and control it with touch, gestures, and keyboard input.
- Real-time screen mirroring - Low-latency H.264 video streaming from Waydroid
- Full remote control - Touch, tap, swipe, and keyboard input support
- Web-based interface - Access from any modern web browser, no client installation required
- WebSocket communication - Efficient bidirectional communication between server and client
- WebCodecs decoding - Hardware-accelerated video decoding in the browser
- Production ready - Includes nginx configuration for SSL/TLS deployment
- Server (Node.js) connects to your Waydroid container via ADB over the local network
- Captures screen using
adb screenrecordin H.264 format - Streams video data to connected web browsers via WebSocket
- Client (browser) decodes H.264 using WebCodecs API and renders to canvas
- User input is sent back through WebSocket to control the Waydroid instance
- Waydroid installed and running on your Linux system
- Node.js (version 16 or higher)
- ADB (Android Debug Bridge) - usually comes with Waydroid
- Modern web browser with WebCodecs support (Chrome, Edge, Firefox 105+)
- Clone this repository:
git clone https://github.com/Reeyuki/Waydroid-Remote-Web
cd waydroid-web- Install dependencies:
npm install- Ensure Waydroid is running and ADB is connected:
# Start Waydroid if not already running
waydroid session start
# Connect to Waydroid via ADB (default IP: 192.168.240.112)
adb connect 192.168.240.112:5555
# Verify connection
adb devices- Update the device IP in
main.jsif your Waydroid container uses a different address:
const DEVICE_IP = "192.168.240.112"; // Change if neededStart the development server:
npm startOpen your web browser and navigate to:
http://localhost:8081
- Use the provided nginx configuration for SSL/TLS termination:
# Update nginx.conf with your domain and SSL certificates
sudo cp nginx.conf /etc/nginx/sites-available/waydroid-web
sudo ln -s /etc/nginx/sites-available/waydroid-web /etc/nginx/sites-enabled/
sudo nginx -t && sudo systemctl reload nginx- Start the Node.js server (use a process manager like PM2 for production):
# Using PM2
npm install -g pm2
pm2 start main.js --name waydroid-web
pm2 startup
pm2 save- Access via your domain:
https://your-domain.com
- Tap - Single finger tap to click
- Swipe - Drag finger to swipe/scroll
- Keyboard - Use physical keyboard for text input
- Debug info - Green overlay shows connection status and performance metrics
Edit main.js to customize:
const DEVICE_IP = "192.168.240.112"; // Waydroid container IP
const PORT = 8081; // Server port
const BIT_RATE = "8000000"; // Video bitrate (8Mbps default)Adjust video quality by modifying the screenrecord parameters in main.js:
// In spawnScreenrecord() function
"--bit-rate", "8000000", // Higher = better quality, more bandwidth- "adb: device not found" - Ensure Waydroid is running and ADB is connected
- WebSocket connection failed - Check if the server is running and port is accessible
- Black screen - Verify Waydroid screen recording works:
adb -s 192.168.240.112:5555 exec-out screenrecord --output-format=h264 --bit-rate=8000000 - | ffplay -
- Laggy video - Reduce bitrate in
main.jsor check network bandwidth - High CPU usage - Ensure hardware acceleration is available in your browser
- Dropped frames - Check debug overlay for decode queue size and frame drops
- Chrome/Edge - Full support with hardware acceleration
- Firefox - Support from version 105+, may need
media.webcodecs.enabledflag - Safari - Limited WebCodecs support, may not work
- This tool exposes your Waydroid session to anyone who can access the web interface
- Use SSL/TLS in production (nginx configuration provided)
- Consider adding authentication for additional security
- Only run on trusted networks or implement proper access controls
├── main.js # Node.js server with ADB integration
├── nginx.conf # Production nginx configuration
├── package.json # Node.js dependencies
└── public/
└── index.html # Web client with WebCodecs decoder
- Backend: Node.js, Express, WebSocket, ADB
- Frontend: HTML5 Canvas, WebCodecs API, WebSocket
- Video: H.264 encoding/decoding, Annex-B format handling
- Deployment: nginx, SSL/TLS, PM2 process management
- Fork the repository
- Create a feature branch
- Make your changes
- Test thoroughly with different Waydroid configurations
- Submit a pull request
This project is open source. Please check the license file for details.