Skip to main content

React Native (bare)

Bare React Native projects use full hot reload via Metro, similar to Expo but without deep links. JS/TS changes appear on the device within seconds. Press [r] only when native dependencies change. For build and upload steps, see React Native Build Guide.

How detection works

The CLI looks for react-native in package.json dependencies without expo also being present. If both react-native and expo exist, the Expo provider takes precedence. Detection confidence is 0.8 — higher than Swift (0.7) and Android (0.6), so bare RN projects are correctly identified even when ios/ and android/ directories are present. Additional indicators that boost detection: metro.config.js, metro.config.ts, react-native.config.js, react-native.config.ts.

No app_scheme needed

Unlike Expo, bare React Native hot reload does not use deep links. The dev client loads the JavaScript bundle directly from the tunnel URL. No app_scheme or use_exp_prefix configuration is needed.

iOS packager URL (HTTPS relay)

On iOS simulators, Revyl points the Debug app at the Metro relay by setting:
  • RCT_jsLocation to the relay host:443
  • RCT_packager_scheme to https
Those values are applied as launch arguments and seeded into the app’s NSUserDefaults before launch. You should not patch RCTBundleURLProvider.mm (or change React Native’s default http scheme) for the Revyl tunnel — without https, the app would request http://…:443/… against a TLS-only relay and fail to load the bundle.

Monorepo considerations

The same directory rules apply as Expo:
  • Run all commands from the React Native app directory, not the monorepo root
  • If react-native is hoisted, use --provider react-native to force detection
  • Watch for multiple .revyl/ directories in the monorepo