Need help with ws-scrcpy?
Click the “chat” button below for chat support from the developer who created it, or find similar developers for support.

About the developer

278 Stars 73 Forks MIT License 342 Commits 21 Opened issues


Web client prototype for scrcpy.

Services available


Need anything else?

Contributors list

ws scrcpy

Web client for Genymobile/scrcpy and more.


Browser must support the following technologies: * WebSockets * Media Source Extensions and h264 decoding; * WebWorkers * WebAssembly

Server: * Node.js v10+ * node-gyp (installation) *

executable must be available in the PATH environment variable

Device: * Android 5.0+ (API 21+) * Enabled adb 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 ```shell git clone cd ws-scrcpy

For stable version find latest tag and switch to it:

git tag -l

git checkout vX.Y.Z

npm install npm start ```

Supported features


Screen casting

The modified version of Genymobile/scrcpy used to stream H264-video, which then decoded by one of included decoders:

Mse Player

Based on xevokk/h264-converter. HTML5 Video.
Requires Media Source API and

video/mp4; codecs="avc1.42E01E"
support. Creates mp4 containers from NALU, received from a device, then feeds them to MediaSource. In theory, it can use hardware acceleration.
Broadway Player

Based on mbebenita/Broadway and 131/h264-live-player.
Software video-decoder compiled into wasm-module. Requires WebAssembly and preferably WebGL support.

TinyH264 Player

Based on udevbe/tinyh264.
Software video-decoder compiled into wasm-module. A slightly updated version of mbebenita/Broadway. Requires WebAssembly, WebWorkers, WebGL support.

WebCodecs Player

Decoding is done by browser built-in (software/hardware) media decoder. Requires WebCodecs support. At the moment, available only in Chromium and derivatives.

Remote control

  • 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 current point
  • Mouse wheel and touchpad vertical/horizontal scrolling
  • Capturing keyboard events
  • Injecting text (ASCII only)
  • Copy to/from device clipboard
  • Device "rotation"

File push

Drag & drop an APK file to push it to the

directory. You can install it manually from the included xtermjs/xterm.js terminal emulator (see below).

Remote shell

Control your device from

adb shell
in your browser.

Debug WebPages/WebView


File listing

  • List files
  • Upload files by drag & drop
  • Download files


Experimental Feature: is not built by default (see custom build)

Screen Casting

Requires ws-qvh available in


Remote control

To control device we use appium/WebDriverAgent. Functionality limited to: * Simple touch * Scroll * Home button click

Make sure you did properly setup WebDriverAgent. WebDriverAgent project is located under


Custom Build

You can customize project before build by overriding the default configuration in build.config.override.json: *

- include code for iOS device tracking and control *
- include code for Android device tracking and control *
- remote shell for android devices (xtermjs/xterm.js, Tyriar/node-pty) *
- dev tools for web pages and web views on android devices *
- minimalistic file management *
- include Broadway Player *
- include Mse Player *
- include TinyH264 Player *
- include WebCodecs Player *
- WebSocket server in
will listen for connections on all available interfaces. When
, it allows connecting to device directly from a browser. Otherwise, the connection must be established over adb.

Run configuration

You can specify a path to a configuration file in

environment variable.

Configuration file format: Configuration.d.ts.

Configuration file example: config.example.yaml.

Known issues

  • The server on the Android Emulator listens on the internal interface and not available from the outside. Select
    proxy over adb
    from the interfaces list.
  • TinyH264Player may fail to start, try to reload the page.
  • MsePlayer reports too many dropped frames in quality statistics: needs further investigation.
  • On Safari file upload does not show progress (it works in one piece).

Security warning

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 disconnected.

Related projects

scrcpy websocket fork

Currently, support of WebSocket protocol added to v1.19 of scrcpy * Prebuilt package * Source code

We use cookies. If you continue to browse the site, you agree to the use of cookies. For more information on our use of cookies please see our Privacy Policy.