scrcpy: a C client, a pushed server, and a feature list gated by API level
scrcpy mirrors and controls an Android device over USB or TCP without installing an app on the phone.
At a glance
- What is it?
- scrcpy mirrors and controls an Android device over USB or TCP/IP without installing an app on the phone, which is a better deal than it sounds until you notice that audio needs Android 11, camera needs 12, the webcam trick is Linux only, and control needs a second USB debugging toggle on some Xiaomi phones. The build is a meson C client plus a Gradle server pushed to the device.
- Who is it for?
- It is the right tool when you need the device screen on a bigger display, a clean screencast, or keyboard and mouse control without installing anything on the phone, and the wrong tool when you need audio on an old device, a webcam feed on Windows, or control from a phone where you cannot toggle developer options. Check three things first.
- 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 last received commits 1 day ago.
- What is it written in?
- Mainly C, according to GitHub's language statistics.
Answers come from the project's GitHub data, last synced on November 13, 2026, and from our analysis. They are not legal advice.
Star history
- Genymobile/scrcpy154,755 ★ · +8,637
| Repository | 2026-07-21 | 2026-11-13 |
|---|---|---|
| Genymobile/scrcpy | 146.1k | 154.8k |
8,637 Stars in the last 115 days, measured from the daily GitHub snapshot. Compare with other projects
Editorial analysis
The README opens with a warning about other download sites
The first thing in the file is a warning, not a feature list. It states that this GitHub repository is the only official source for the project, and that you should not download releases from random websites even if their name contains scrcpy. The Resources section links a page on verifying release signatures, which is the answer to that warning. Consequence: third party pages offering a scrcpy-win64 build or a Windows 11 installer are outside anything the project vouches for, and a mirrored binary runs with your keyboard, your screen, and whatever the phone can reach. If you need a package rather than a build from source, check the signature before you run it, and if you cannot verify it, build it. The README names rom1v as author and maintainer, and bug reports go through the issue tracker, asks you to read FAQ.md first, and is reachable on Reddit, BlueSky, and Twitter.
Every headline feature is gated by an API level
The prerequisites are short and they decide what you get. The device requires at least API 21, which is Android 5.0. Audio forwarding is supported for API 30 and above, Android 11 and newer. Camera mirroring is marked Android 12 and above, and mirroring as a webcam over V4L2 is marked Linux only. The rest of the feature list, recording, copy paste in both directions, configurable quality, virtual display, gamepad support, and mirroring with the device screen off, carries no version note at all. Consequence: a single Android 5.0 handset is inside the supported range for mirroring and control but excluded from audio, so the same scrcpy release is a different product on different phones. Check the level against the one feature you need rather than against the project as a whole, because the failure is a missing feature rather than an error message, and the frame rate claim of 30 to 120fps depending on the device will not hold on hardware that old either.
Some Xiaomi devices refuse input until a second toggle is set
Mirroring usually works first try. Control is where people get stuck, and the file names the error verbatim:
Injecting input events requires the caller (or the source of the instrumentation, if any) to have the INJECT_EVENTS permission.On some devices, especially Xiaomi, the fix is to enable an additional option called USB debugging (Security Settings), which is a different item from USB debugging, and rebooting the device is necessary once it is set. Consequence: the symptom is that you can see the screen and nothing you type does anything, which looks like a scrcpy bug and is actually a vendor permission decision about injected input events. Find that second item before you start debugging the client, and budget for the reboot, because a device that needs one will not pick up the setting until it comes back up. If you cannot reach developer options at all, OTG mode is the documented alternative.
OTG mode gives you input and nothing else
There is one mode where USB debugging is not required:
scrcpy --otgIt is described as controlling the device without mirroring, by simulating a physical keyboard and mouse. Consequence: no video, no audio, no clipboard in either direction, no recording, no virtual display, no camera source, and none of the recording or quality options that depend on a video stream. What you get is a working keyboard and mouse on a device you cannot see, which is a recovery tool for a phone with a dark or unusable screen and a control tool for a locked down one, not a mirror. The same HID idea shows up elsewhere, because gamepad control works the same way:
scrcpy --gamepad=uhid
scrcpy -G # short versionso a physical controller plugged into the computer drives the phone without the phone's own input hardware being involved.
The client is C with meson, the device side is Gradle
The top level shows both halves of the project. The desktop side is a C program configured through meson.build and meson_options.txt. The device side is the server directory, built with Gradle through build.gradle, settings.gradle, gradle.properties, and a gradlew wrapper at the top level. Alongside them sit cross_win32.txt and cross_win64.txt for the Windows cross builds, install_release.sh for packaging, bump_version for the version, a run script, and app/, assets/, config/, and release/ directories. Consequence: building from source means a C toolchain, a JDK, and the Android tooling in matching versions, and the README does not enumerate any of those prerequisites, it points at the build instructions page in doc. The repository is licensed Apache-2.0 and the default branch is master, with v5.0.1 the current release. If you only want a binary, all of this is invisible, and if you want to patch it, all of this is the cost.
Latency and frame rate are ranges the device decides
The performance figures are presented as ranges rather than promises: 30 to 120fps depending on the device, quality of 1920x1080 or above, low latency of 35 to 70ms, and roughly one second of startup time to the first image. The latency figure is even linked to a specific pull request rather than to a benchmark page, and the pitch elsewhere is lightness, a native window showing only the device screen. The documented remedy for a stuttering stream is to lower the resolution, with reducing resolution named as a tip that may greatly improve performance and the short form given as:
scrcpy -m1024Consequence: a demo on a current flagship tells you nothing about a budget handset, and the first thing you will be told to change is the picture itself. Decide the resolution your use case needs before you decide the tool, because reducing resolution is the README's tip for improving performance.
Right click and middle click are already taken
Input is overloaded by default in a way that surprises people. Right click triggers BACK, middle click triggers HOME, and Alt+f toggles fullscreen, with a shortcuts page holding the rest. Physical keyboard and mouse simulation runs through HID, and the long form of the encoding example is:
scrcpy --video-codec=h265 --max-size=1920 --max-fps=60 --no-audio --keyboard=uhidwhich also shows how the same run caps size at 1920, frame rate at 60, and turns audio off. Consequence: in any app that uses a right click or a middle click for its own menu, scrcpy's binding fires instead, and the habit you build in the mirror is not the habit you keep on the device. Learn the three bindings before you start rather than after you have sent a back gesture to something you were editing. The copy paste path in both directions is the one feature that quietly changes how you work between the two machines, and it is a small line item in a list of options that runs to sixteen documentation pages.
Sixteen documentation pages, and the translations are flagged
Depth is not in the README, it is in doc. The user documentation is split across Connection, Video, Audio, Control, Keyboard, Mouse, Gamepad, Device, Window, Recording, Virtual display, Tunnels, OTG, Camera, Video4Linux, and Shortcuts. Alongside them sit FAQ.md, the build instructions, the developer page, and the release signature verification, plus three linked articles covering the introduction, the move to wireless, and the 2.0 release that added audio. The Translations link carries the warning that it is not necessarily up to date. Consequence: a feature such as virtual displays, camera sources, or tunnels is documented on its own page rather than in the overview, so you read per topic, and any translated copy you find may lag the v5.0.1 release that shipped on 2026-10-08. Wireless use is covered on the Connection page, which the README links for TCP/IP, and the FAQ is where the maintainer sends bug reporters first.
Editorial conclusion
It is the right tool when you need the device screen on a bigger display, a clean screencast, or keyboard and mouse control without installing anything on the phone, and the wrong tool when you need audio on an old device, a webcam feed on Windows, or control from a phone where you cannot toggle developer options. Check three things first. Your device API level against the feature you actually want, since audio forwarding needs 30 and camera mirroring needs 12. Whether your vendor hides USB debugging (Security Settings) behind a reboot, which is where Xiaomi users get stuck. And the provenance of your binary, because the project states this repository is the only official source and links a page on verifying release signatures. Everything you see on screen during a session is also typed and swiped by you, so treat any session with credentials on screen accordingly.
Frequently asked questions
What is scrcpy and what does it do?
It mirrors an Android device, video and audio, over USB or TCP/IP, and lets you control the device with the computer's keyboard and mouse. It needs no root and no app installed on the device, and it works on Linux, Windows, and macOS.
Is it safe to use scrcpy?
The README opens by warning that this GitHub repository is the only official source and that you should not download releases from random websites even if their name contains scrcpy, and it links a page on verifying release signatures. It also states there is no account, no ads, and no internet required, but you do have to enable USB debugging on the device.
how to use scrcpy
Enable USB debugging on the device, install the app for your platform from the Linux, Windows, or macOS page, and run scrcpy. Reducing resolution with `scrcpy -m1024` may greatly improve performance, right click triggers BACK, middle click triggers HOME, and Alt+f toggles fullscreen.
how to use scrcpy without usb debugging
Use OTG mode with `scrcpy --otg`, which controls the device without mirroring by simulating a physical keyboard and mouse, and which does not require USB debugging. You get input only, with no video, no audio, and no clipboard.
how to use scrcpy on windows
scrcpy works on Windows, and the Windows page in the documentation carries both the download and a section on how to run it. The repository also holds cross_win32.txt and cross_win64.txt for the Windows builds, and the README's warning against third party download sites applies to any platform.
how to use scrcpy with broken screen
Mirroring with the Android device screen off is a listed feature, with a section on the device documentation page covering turning the screen off. The README does not describe a physically damaged display separately, so for a dark or unresponsive panel the documented options are that mode and OTG input, which works without USB debugging.
Official sources
Where developers are discussing it
Posts on Hacker News, dev.to and Lobsters that link to this repository, found by our scan of those communities. 0 in the last 30 days; newest first.
- Scrcpy 5.0 now supports hardware decodingHacker News · Oct 6, 2026 · 4 points · 0 comments
Add this badge to your README
If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.
[](https://hysenlabs.com/projects/genymobile-scrcpy)Star history chart for your README
[](https://hysenlabs.com/projects/genymobile-scrcpy)Was this useful?