Hiprup

What's the difference between React Native CLI and Expo (managed + bare)?

You can build a React Native app two ways: React Native CLI (vanilla) or Expo. The 2026 answer is: Expo for most teams, CLI only when you have specific reasons.

React Native CLI (bare):

  • Created via npx @react-native-community/cli init.

  • Full ios/ and android/ folders from day one — edit Xcode/Gradle freely.

  • Any native module works; you manage CocoaPods / Gradle yourself.

  • You handle your own builds, signing, store submission (or layer Fastlane / EAS Build).

Expo Managed Workflow:

  • Created via npx create-expo-app.

  • No ios/ or android/ in your repo — Expo manages them.

  • Comes with a rich Expo SDK (camera, notifications, file system, secure store, etc.).

  • Test on physical device through Expo Go; production builds via EAS Build.

  • OTA updates via EAS Update.

Expo Bare Workflow / CNG (`expo prebuild`):

  • Run npx expo prebuild to generate ios/ and android/ from app.json / app.config.js.

  • Best of both: native code access + Expo SDK + EAS infrastructure.

  • The 2026 default for production Expo apps that need any custom native code.

In 2026 the right answer leans towards Expo even for production. State the decision rule cleanly: 'Expo unless you have a concrete reason not to.' Concrete reasons = a native dependency Expo doesn't support, app-size constraints, or a brownfield codebase. Bonus: mention CNG (Continuous Native Generation) — expo prebuild regenerates ios//android/ from app.json, which dissolves the old 'managed vs bare' distinction.

What's the difference between React Native CLI and Expo (managed + bare)? | Hiprup