~/sohan/ghostty
[SYS]sohanscript v2026.1 initialized
[INFO]stack: ts · react · next · trpc
[INFO]location: dhaka, bangladesh
[STAT]STATUS: OPEN FOR WORK
Indexing assets0%
○ waitingmeasuring...
~
Connection
Latency: <1ms
Kernel
Aura Engine v4.2
Skip to main content
480a679155fa64d37caf
·3 min read

scrcpy as a Daily Driver for React Native Development

I already use scrcpy for screen mirroring and as a webcam replacement, turns out it's also one of the most useful tools in my React Native workflow. Here's how I mirror my device with the screen off, auto-launch Expo Go with a single flag, and tail JS logs straight from the terminal, all without ever picking up the phone.

scrcpy
react-native
react
expo
expo-go
droidcam
webcam
3ef4f885272bc6323209

Sohan R. Emon

Developer, Learner, Tech Enthusiast

I already use scrcpy for screen mirroring and as a webcam replacement. Turns out it's also become one of the more useful tools in my React Native workflow, mostly because of one detail people don't talk about much: it works even when the phone's screen is off.

For day-to-day RN development, that one feature changes how I test on a physical device.

screenshot

Installing scrcpy

Or grab the prebuilt zip from the if you'd rather not use a package manager. ADB is bundled with scrcpy's release zip, but on Linux/macOS you'll usually also want android-tools (Arch) or adb via Homebrew/apt for the extra commands below.


Why Screen-Off Mirroring Matters

Normally, testing on a real device means the phone screen is on, sitting next to your keyboard, and you're glancing back and forth. scrcpy with --turn-screen-off keeps the phone's actual display off (saves battery, keeps it cool) while still streaming the live feed to a window on your PC.

So my phone sits flat on the desk, screen off, plugged in, and I just watch the app inside a window on my monitor like it's a built-in simulator. Hot reload, layout changes, animations, all visible without touching the device.

bash
scrcpy --stay-awake --turn-screen-off --no-audio

--stay-awake keeps the device awake over USB even with the display off, so the app doesn't suspend.


Auto-Launching Expo Go

The other piece of friction in RN development is the part right after you plug the phone in: unlocking it, finding Expo Go, tapping it, then scanning or typing the dev server URL.

scrcpy can launch an app directly as part of starting the mirror session, no separate ADB call needed:

bash
scrcpy --start-app=host.exp.exponent

host.exp.exponent is Expo Go's package name. scrcpy starts the app on the phone the moment the mirror session connects, so by the time the window opens, Expo Go is already loading.

Combine it with the screen-off flags and you get the whole flow in one line: plug in phone, run one command, scrcpy window opens with Expo Go already running, no touching the device at all.

bash
scrcpy --start-app=host.exp.exponent --stay-awake --turn-screen-off --no-audio

Bonus: Debug Logs Without Leaving the Terminal

Since you're already in ADB territory, logcat filtered to your app's process is the other half of this workflow:

bash
adb logcat | grep -i ReactNativeJS

This surfaces your console.log output and JS errors directly in the terminal, right next to the mirrored window. No need to shake the device for the dev menu or dig through Android Studio's Logcat panel.


Final Thoughts

None of this replaces an emulator, and for quick iteration the emulator is still often faster to boot. But for testing real device behavior, camera, sensors, performance, actual touch feel, one scrcpy command gets you most of the way to a "just works" physical-device dev loop, without ever picking the phone up off the desk.

Found this useful? Share!