Web client for scrcpy and more.
Browser must support the following technologies:
* Media Source Extensions and h264 decoding
* WebWorkers (tinyh264)
* WebAssembly (Broadway.js and
* Node.js v10+
* node-gyp (installation)
adb executable must be available in the PATH environment variable
* Android 5.0+ (API 21+)
* Enabled debugging
* On some devices, you also need to enable
an additional option
to control it using keyboard and mouse.
Build and Start
Make sure you have installed node.js, node-gyp and build tools
git clone https://github.com/NetrisTV/ws-scrcpy.git
For stable version find latest tag and switch to it:
git tag -l
git checkout vX.Y.Z
The modified version
of Genymobile/scrcpy used to stream
H264 video, which then decoded by one of included decoders.
- Touch events (including multi-touch)
- Multi-touch emulation: CTRL to start with center at the center of
the screen, SHIFT + CTRL to start with center at the
- Capturing keyboard events
- Injecting text (ASCII only)
- Copy to/from device clipboard
- Device "rotation"
Drag & drop an APK file to push it to the
/data/local/tmp directory. You can
install it manually from the included
xterm.js terminal emulator (see below).
Control your device from
adb shell in your browser.
- New versions are most likely not incompatible with previous ones. If you do
upgrade, then manually stop
app_process or just reboot the device.
- The server on the Android Emulator listens on the internal interface and not
available from the outside (select
proxy over adb in interfaces list)
- Tinyh264Decoder may fail to start, try to reload the page.
- MseDecoder reports too many dropped frames in quality statistics: needs
Be advised and keep in mind:
* There is no encryption between browser and node.js server (plain HTTP).
* There is no encryption between browser and WebSocket server (plain WS).
* There is no authorization on any level.
* The modified version of scrcpy with integrated WebSocket server is listening
for connections on all network interfaces.
* The modified version of scrcpy will keep running after the last client
This project also contains front-end for
NetrisTV/ws-qvh - application for screen
streaming and control of iOS devices in a browser.
Run this to build it:
npm run dist:qvhack:frontend
scrcpy websocket fork
Currently, support of WebSocket protocol added to v1.16 of scrcpy
* Prebuilt package
* Source code