> ## Documentation Index
> Fetch the complete documentation index at: https://docs.revyl.com/llms.txt
> Use this file to discover all available pages before exploring further.

# React Native

> Run the dev loop on an React Native project

## 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](/builds/frameworks/react-native).

### 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.

```yaml theme={null}
hotreload:
  default: react-native
  providers:
    react-native:
      port: 8081
      platform_keys:
        ios: ios-dev
        android: android-dev
```

### 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
