Bare React Native projects with custom native modules have always forced developers into a frustrating tangle of USB cables, IP shuffling, and fragile manual setup—just to see code changes on a real Android device. The new Starship CLI takes that Expo Go "scan a QR, you're live" simplicity and finally brings it to bare React Native apps, custom native code and all. The win? Real wireless debugging for native code projects, no Expo lock-in, no device plugging. Here’s why it matters, how it works, and how to use it—plus the honest comparison with Expo Go and classic RN CLI methods.
Why is debugging bare React Native apps with custom native modules so complicated?
Debugging a bare React Native app with custom native modules—anything beyond Expo Go’s vanilla workflow—has always required a stubborn amount of manual, repetitive tinkering. The traditional steps:
- Plug device in via USB.
- Run
adb reverse tcp:8081 tcp:8081to pipe Metro traffic. - Build APK (
./gradlew assembleDebug). - Install APK on device—sometimes
adb install, sometimes through Android Studio. - Open the app—usually met with “Unable to load script.”
- Shake device, dig into the dev menu, manually type in your laptop’s IP and port for Metro.
- Shake again, trigger reload.
- If your IP or WiFi network changes? Repeat.
Count it: at least 5-7-step manual dance, with plenty of places to mistype, forget, or unplug. Expo Go simplified steps 4–7 into “scan, run”—but it chokes on custom modules. The result is a classic frustration loop: five-plus steps, every time, plus “IP changed” mayhem. A tiny typo or not-yet-arrived adb connection means another roundtrip.
Expo Go is a shortcut, but only if you don’t need custom native code. As soon as you want a bespoke module or library with native Android code, you’re back to the bare-metal grind. For many teams, that’s every day.
Takeaway: classic bare React Native debugging is friction-heavy and error-prone by design—a cable-bound, setup-heavy process unsuited to modern dev loops.
What is React Native Starship and how does it improve debugging?
React Native Starship is a new CLI tool (see the Medium launch article) that takes Expo Go’s hallmark QR-code-driven, instant onboarding and brings it to bare React Native projects—including ones with custom native modules. The core innovation: Starship bakes your local IP address directly into the debug APK, exposes a QR code in your dev terminal, and manages the install and Metro handshake—no USB, adb, or manual IP config required.
How it simplifies:
-
Single command:
npx react-native starshiphandles build, APK generation, local IP embedding, QR code presentation. - Zero manual config: No explicit Metro setup, no IP address entry, no reverse port forwarding—it’s handled at build time by Starship’s tiny ContentProvider, writing your computer IP to SharedPreferences in the built APK.
- Wireless-first: Any device on the same WiFi as your dev box scans the QR, downloads and installs the APK, then connects instantly to Metro for fast refresh. No Expo account, no cable.
It replaces the cable-and-shake dance with—literally—a camera tap and 10 seconds of waiting. The loop matches Expo Go for frictionlessness, but for the cases that Expo Go can’t touch: custom native code. The CLI is straight to the point, the QR-coded APK is pre-configured, and subsequent sessions exploit build caching for even faster reloads.
Takeaway: Starship brings true Expo Go–style wireless debugging to the only place Expo can’t go—bare RN apps with custom modules, all with a single command and scan.
How to set up and use React Native Starship today?
Deploying Starship in a bare React Native project is 100% CLI-based and takes minutes. Here’s the workflow as documented in the Medium release and the github:
1. Install Starship
Add Starship to your (existing) bare React Native project:
yarn add react-native-starship
or
npm install react-native-starship
2. Start everything up
Make sure your Metro server is running, and then launch Starship from your project root:
npx react-native starship
This command:
- Builds a debug APK, injecting your current local IP into the APK at build time.
- Shows a QR code right in your terminal, representing the unique download URL for your APK.
- Tracks the build time and caches the APK for future incremental reloads.
3. Scan the QR from your Android device
With your device on the same LAN as your dev machine:
- Open your camera and point it at the displayed QR code.
- Accept the download/install prompt for the APK (you may need to allow unknown sources).
4. Let Starship handle the rest
- The device downloads and installs the custom APK.
- App launches automatically.
- Metro server autoconnects (via Starship’s injected IP config).
- Fast Refresh is immediately active; edits in JavaScript trigger reloads over the air.
[[IMG: Developer scanning a QR code in their terminal, with an Android device downloading the custom APK wirelessly.]]
Troubleshooting and requirements
- Both your PC and Android device must be on the same WiFi/LAN.
- Metro server must be running—usually covered by
npx react-native start. - No USB required at any step, but disabling or enabling USB debugging won't break the workflow.
- Works on Android for now (no iOS support per article).
- You need permission to install APKs from unknown sources.
Takeaway: actual wireless debugging with custom modules now takes a three-step, one-command, zero-cable workflow—nothing to configure by hand.
How does Starship compare to Expo Go and React Native CLI debugging?
Starship’s entire value proposition is that it brings Expo Go–level ease to workflows that demand native modules—where classic React Native CLI is slow, manual, and easily broken by network or setup changes. Here’s the breakdown (quoting and condensing the source article’s chart):
| Feature | Expo Go | RN CLI | Starship |
|---|---|---|---|
| Custom native modules | ❌ | ✅ | ✅ |
| Wireless install (QR code) | ✅ | ❌ | ✅ |
| Zero config | ✅ | ❌ | ✅ |
| USB needed | ❌ | ✅ | ❌ |
| Multi-device APK deploy | ❌ | ❌ | ✅ |
| Build caching | ❌ | ❌ | ✅ |
- Custom native modules: Only Starship and bare RN CLI support actual native module code; Expo Go blocks it flatly.
- Wireless install: Only Expo Go and Starship allow QR-based wireless install; the bare CLI is USB/ADB or bust.
- Zero config: Starship and Expo Go require no manual settings per device; RN CLI needs per-device config.
- USB needed: Only classic CLI needs a USB connection per run; Starship/Expo Go do not.
- Multi-device: Starship lets you push the APK to several test phones at once (with distinct logs), CLI and Expo Go are single-device.
- Caching: With Starship, repeat builds for JS-only changes are instant (APK is reused); Expo Go doesn’t build, CLI rebuilds every time.
In real dev terms: Starship removes 5+ manual error-prone steps and aligns the native development loop with Expo Go simplicity. With CLI, multi-device is a nightmare; with Starship, it’s default. Starship only needs your network cooperation and works around the classic “Metro IP mismatch” by embedding the correct address in the APK at build time.
Takeaway: for any bare RN project targeting custom native logic, Starship is as zero-config and friendly as Expo Go, but with none of Expo’s native restrictions and all the speed Expo users expect.
What are the time-saving features and limitations of using Starship?
Starship isn’t just a cable killer—it’s built for actual iteration speed and team scaling.
- APK caching: On first run, build takes ~60 seconds. On subsequent JavaScript-only changes, Starship reuses the existing APK: no native rebuild, instant restart.
- Multi-device APK deploy: Once the APK is built, any device scanning the code gets the right APK and auto-connects. Three testers can be live in one minute.
- Build time tracking: Starship logs each APK build time and displays deltas vs. your previous sessions—if your build gets slower, you’ll know immediately.
- Device identification: The terminal displays each device that connects by name and Android version—the feedback loop is explicit and fast.
- No USB hassle: No cables, no adb reverse, no shaking or digging for dev menus; every reload is just code-save and device-refresh.
Limits and notes:
- Android-only: No mention of iOS support; Starship is targeting the Android pain point.
- Same LAN required: Network participation is mandatory; the devices and dev box must be routable to one another.
- Unknown sources: Devices must allow APK install from unknown sources—a common friction for new testers.
- Debug builds only: No production signing or release build handling (see below).
Starship’s real impact is its routing around all the friction points inherent in native module testing—especially for multi-device or rapid-iteration scenarios. [[IMG: Three Android devices on a table, each showing an identical live preview of the developer's React Native app deployed with Starship.]]
Takeaway: Starship’s speed and multi-device support shave minutes off every dev/test cycle but are currently Android/debug only by design.
Can I use Starship for production or only debug builds?
Starship is strictly for development and debug workflows—not for production-signing or distribution. The build is configured for rapid iteration—debug flags, relaxed restrictions, and embedded local IP for fast Metro reloads.
Why only debug?
- APK is unsigned for release, contains debug IP config via ContentProvider, and expects a running Metro dev server.
- Designed for inner-loop developer iteration, not for store submission or production-grade testing.
For release: revert to your standard CLI/Gradle signing pipeline.
Takeaway: Starship accelerates local iteration; deploy with standard Gradle or CI for production releases.
The bottom line: QR-powered, Expo Go–simple debugging for custom/native React Native dev
React Native Starship finally closes the gap for teams building on bare React Native—making QR code–powered, zero-USB, instant wireless debugging real, even with custom native modules or multi-device test labs. Skip the traditional maze of cables, IP typing, and device juggling: npx react-native starship is now a standard part of the inner dev loop. If cable pain or Expo-native lockout are sapping your cycle times, give Starship a run—faster feedback for every save, on real hardware, no compromise. The native module bottleneck is gone.
Top comments (0)