Open-source project
Genymobile/scrcpy avatar
Genymobile/scrcpy

scrcpy 4.1: mirror Android over USB or TCP without rooting or installing anything

scrcpy mirrors and controls an Android device over USB or TCP without installing an app on the phone.

149,687 stars13,744 forksCApache-2.0

At a glance

What is it?
scrcpy mirrors video and audio from an Android device to a Linux, Windows, or macOS computer and lets you control it with keyboard and mouse. It needs no app on the phone and no root, but the feature set has grown so large that the real cost is learning which flags to use.
Who is it for?
Adopt scrcpy if you need a free, open-source way to mirror and control an Android device from Linux, Windows, or macOS and you are comfortable with command-line flags. Skip it if you want a polished graphical interface or if your device is below Android 5.0, since API 21 is the floor.
Can I use it commercially?
Yes. Apache-2.0 is a permissive licence: you can use, modify and sell software built on it, as long as you keep its copyright and licence notices.
Is it still maintained?
Yes. The repository received new commits within the last day.
What is it written in?
Mainly C, according to GitHub's language statistics.

Answers come from the project's GitHub data, last synced on September 15, 2026, and from our analysis. They are not legal advice.

DEEP OPEN-SOURCE ANALYSIS

What scrcpy actually solves

scrcpy solves a specific annoyance: you want to see and operate an Android phone from a desktop computer, but you do not want to install a companion app on the phone or root it. The README states that it mirrors video and audio over USB or TCP/IP and allows control using the computer's keyboard and mouse. It requires only Android 5.0 (API 21) or newer, and audio forwarding needs Android 11 (API 30) or higher. The project positions itself as lightweight, with a startup time around one second and latency between 35 and 70 ms. That makes it a tool for developers testing apps, for support staff controlling a device remotely, or for anyone who wants to type on a real keyboard instead of a touchscreen. It also works without an internet connection, which matters for air-gapped environments. The non-intrusive design is the core value: nothing is left installed on the device after you disconnect.

How the mirroring works under the hood

The mechanism is not a remote desktop protocol like VNC or RDP. scrcpy uses the Android Debug Bridge (ADB) to communicate with the device. ADB provides a transport for screen frames, input events, and audio data. The README mentions that the project is written in C, which fits a tool that prioritizes low latency and minimal overhead. The video stream is encoded on the device and sent over the ADB connection, then decoded on the computer for display. For control, scrcpy can inject touch and key events through ADB, or it can simulate a physical keyboard and mouse using the USB HID protocol (the `--keyboard=uhid` and `--mouse=uhid` options). The HID mode is notable because it does not require USB debugging; the `--otg` flag uses this mode to control the device without mirroring. The README also lists a virtual display feature, which creates a separate display on the device, useful for starting an app in its own window. The architecture is client-server in practice, but the server component is pushed to the device temporarily and removed after the session, which is why nothing remains installed.

Getting it running: real commands and config

Installation differs per OS, but the usage is uniform across platforms. Before anything, you must enable USB debugging on the Android device. The README warns that some Xiaomi devices require an additional option called USB debugging (Security Settings), otherwise you get an INJECT_EVENTS permission error. After that, you run `scrcpy` from a terminal. The README gives concrete examples. To reduce resolution for better performance, use `scrcpy -m1024`. To capture H.265 video at 1920 wide, 60 fps, with no audio and physical keyboard simulation, run `scrcpy --video-codec=h265 --max-size=1920 --max-fps=60 --no-audio --keyboard=uhid`. For a virtual display, `scrcpy --new-display=1920x1080 --start-app=org.videolan.vlc` starts VLC in a separate display. For camera mirroring as a webcam on Linux, the command is `scrcpy --video-source=camera --camera-size=1920x1080 --camera-facing=front --v4l2-sink=/dev/video2 --no-playback`. The short forms exist too: `-K` for `--keyboard=uhid`, `-G` for `--gamepad=uhid`. The documentation is split into pages for connection, video, audio, control, and more, so the command line is the primary interface.

Feature depth: more than a screen mirror

The README lists a long set of features that go beyond basic mirroring. Audio forwarding works on Android 11 and later. Recording to a file is supported, including from the camera. Virtual displays let you run an app in a separate resolution. HID keyboard and mouse simulation is available for physical input, and gamepad support exists via `--gamepad=uhid`. OTG mode controls the device without mirroring and without USB debugging, which is useful for automation. Camera mirroring can expose the phone camera as a webcam on Linux using V4L2. The copy-paste works in both directions. All of this means scrcpy is not just a viewer; it is a remote control and capture tool. The downside of this depth is that the command-line options multiply. The README points to separate documentation pages for each feature area, so a new user faces a learning curve. The project mitigates this with shortcuts and examples, but you still need to read the docs to know that `--no-playback` exists or that `-b16M` sets a bitrate.

Limitations and wrong-tool cases

scrcpy has real constraints. It requires Android 5.0 as a minimum, so older devices are out of scope. Audio forwarding only works on Android 11 or newer, so a device on Android 10 will have video but no sound. The README mentions that some Xiaomi devices need a special security setting, which is a vendor-specific hurdle. Latency of 35 to 70 ms is good for casual use but not for fast-paced gaming, and that figure depends on the device and connection. Wireless mode over TCP/IP is available, but the README does not promise it will be as stable as USB. The tool is also command-line driven; there is no official GUI mentioned. For a user who wants a click-and-go interface, scrcpy will feel bare. Another limitation: the project warns against downloading releases from random websites, implying that unofficial builds circulate and may be unsafe. That is a practical risk to flag. If you need to mirror a device that lacks USB debugging and you cannot use OTG mode, scrcpy will not work for you.

Alternatives and how they differ

A common alternative is Vysor, a commercial app that also mirrors Android over USB or wireless. The key difference is that Vysor requires installing a companion app on the phone, while scrcpy explicitly does not. Vysor offers a graphical interface and cloud features, but those come with account requirements and a paid tier. scrcpy is free and open source under Apache-2.0. Another alternative is the built-in Android Studio device mirroring, which is integrated into the IDE and works for developers, but it is tied to Android Studio and does not offer the same breadth of standalone features like camera mirroring or OTG mode. For Linux users, a V4L2 loopback can achieve webcam-like output, but scrcpy already does that natively. The real difference is approach: scrcpy is a lightweight, ADB-centric tool that avoids installing anything on the phone, whereas Vysor relies on a persistent app and a service. If you need a GUI and are willing to install an app, Vysor is an option; if you want a scriptable, dependency-light solution, scrcpy wins.

Maintenance, upgrades, and licensing

The project is actively maintained. The last push was on 2026-07-12, with version 4.1 released the same day. Version 4.0 came out in May 2026, and 3.3.4 in December 2025, so the release cadence is roughly a few months. The README includes build instructions and developer documentation, which suggests that compiling from source is supported. Upgrade cost is low if you use a package manager, but the README does not specify package names, so you may need to rebuild or download binaries from the official GitHub releases. The license is Apache-2.0, which permits commercial use, modification, and redistribution, but you must retain copyright notices. There is no mention of a CLA or contributor agreement in the README. The project also provides release signature verification, which is a good practice for security, and the README warns against downloading from unofficial sources. That means the maintenance burden includes verifying the authenticity of downloads, especially on Windows where executables are common.

Editorial conclusion

Adopt scrcpy if you need a free, open-source way to mirror and control an Android device from Linux, Windows, or macOS and you are comfortable with command-line flags. Skip it if you want a polished graphical interface or if your device is below Android 5.0, since API 21 is the floor. Before relying on it, verify that your device has USB debugging enabled, check whether your Xiaomi model needs the extra USB debugging (Security Settings) option, and test audio forwarding only on Android 11 or newer. If you need low latency for gaming or frequent wireless sessions, confirm that your network and device can sustain the 35 to 70 ms range the project cites, because that number depends heavily on your hardware.

Official sources

  1. Official README
  2. Project repository
  3. Release notes
Community notes

Community notes