← Back to articles

Expo vs React Native CLI vs Ignite: Best React Native Setup (2026)

Starting a React Native project means choosing how to set up your development environment. In 2026, there are three main paths: Expo (managed platform), React Native CLI (bare setup), and Ignite (opinionated boilerplate). Here's how they compare.

Quick Comparison

FeatureExpoReact Native CLIIgnite
Setup time5 minutes30-60 minutes10 minutes
Native code accessYes (dev builds)FullFull
OTA updatesEAS Update (built-in)Manual (CodePush)Manual
Build serviceEAS Build (cloud)Local (Xcode/Android Studio)Local
NavigationExpo Router (file-based)React Navigation (manual)React Navigation (pre-configured)
State managementYour choiceYour choiceMobX-State-Tree (default)
TestingJest + DetoxJest + DetoxJest + Detox (pre-configured)
Upgrade pathnpx expo installManual (often painful)Manual
CommunityLargestLargeSmaller (Infinite Red)

Expo: The Default Choice

Expo has evolved from a limited managed environment to the recommended way to build React Native apps. Even the React Native team recommends Expo for new projects.

Strengths

Zero-config start. npx create-expo-app → start coding immediately. No Xcode, no Android Studio, no CocoaPods, no Gradle configuration.

Expo Router. File-based routing for React Native — the same mental model as Next.js. Define routes by creating files in the app/ directory.

EAS (Expo Application Services):

  • EAS Build: Cloud builds for iOS and Android. No Mac required for iOS builds.
  • EAS Update: Over-the-air updates — push JavaScript changes without app store review.
  • EAS Submit: Automated app store submission.

Development builds. Create custom dev clients with native modules included. You get the flexibility of bare React Native with the convenience of Expo.

Expo Modules API. Write custom native modules in Swift/Kotlin with a clean API. No more bridging boilerplate.

Continuous Native Generation. Don't check in ios/ and android/ directories. Expo generates native projects from config (app.json). Cleaner git history, easier upgrades.

Weaknesses

  • EAS Build costs money for serious use ($3/build on free tier, then $99/mo for more)
  • Some native modules still require ejecting to dev builds
  • Cloud builds mean you can't build offline
  • Expo Go (the quick-start dev client) doesn't support all native modules
  • Upgrading Expo SDK can still be bumpy for projects with many native dependencies

Best For

Almost everyone. Expo is the recommended default for new React Native projects in 2026. Start here unless you have a specific reason not to.

React Native CLI: Bare Metal

The traditional approach: initialize with npx @react-native-community/cli init, configure Xcode and Android Studio manually, and manage native code yourself.

Strengths

  • Full native control. Direct access to ios/ and android/ directories. No abstractions.
  • No vendor dependency. No Expo account, no cloud builds, no OTA update service.
  • Local builds. Build on your machine. No cloud service required.
  • Maximum flexibility. Any native library, any native configuration, no restrictions.

Weaknesses

  • Painful setup. Xcode, CocoaPods, JDK, Android Studio, Android SDK, environment variables — expect 30-60 minutes of configuration (and troubleshooting).
  • Upgrade hell. React Native version upgrades are notoriously difficult with bare projects.
  • No OTA updates without third-party services (CodePush/App Center — now deprecated by Microsoft).
  • No file-based routing unless you add it manually.
  • Requires a Mac for iOS development and builds.
  • More boilerplate for everything (navigation, deep linking, push notifications).

Best For

Teams with existing native iOS/Android expertise who need deep native customization and prefer full control over their build pipeline.

Ignite: The Opinionated Boilerplate

Ignite is a battle-tested React Native boilerplate from Infinite Red (a well-known React Native consultancy). It provides a complete project structure with pre-configured tools.

Strengths

  • Proven architecture. Used in hundreds of production apps by Infinite Red and their clients.
  • Pre-configured stack: MobX-State-Tree (state), React Navigation (routing), Reactotron (debugging), Jest + Maestro (testing).
  • Generators. npx ignite-cli generate screen, generate model, generate component — consistent code patterns.
  • Demo app. Comes with a working demo showcasing patterns for auth, API integration, theming, and navigation.
  • Best practices baked in. Folder structure, error handling, API layer, and testing patterns from years of consultancy experience.

Weaknesses

  • Opinionated. MobX-State-Tree instead of Redux/Zustand. If you disagree with the choices, you'll fight the boilerplate.
  • Smaller community than Expo. Fewer resources and Stack Overflow answers.
  • Still requires native setup. Same Xcode/Android Studio requirements as bare React Native.
  • Upgrade path tied to Ignite's release cycle.
  • Learning curve for MobX-State-Tree if you're coming from Redux or Zustand.

Best For

Teams who want a battle-tested architecture out of the box and are comfortable with MobX-State-Tree. Good for agencies building multiple client apps.

The 2026 Verdict: Expo Won

The debate is largely settled in 2026. Expo is the default choice for React Native development:

  1. React Native's official docs recommend Expo for new projects
  2. Expo now supports all native modules via development builds
  3. Expo Router provides the best routing DX
  4. EAS handles builds and OTA updates
  5. Continuous Native Generation simplifies maintenance

When to NOT Use Expo

  • You need to integrate with existing native iOS/Android codebases (brownfield apps)
  • Your company's security policy prohibits cloud builds
  • You have deep native module requirements that aren't compatible with Expo Modules
  • You're an experienced native developer who prefers full control

Expo + Ignite Patterns

You can use Ignite's architectural patterns (MST, generators, conventions) within an Expo project. Take the ideas even if you don't use the full boilerplate.

Getting Started

With Expo (Recommended)

npx create-expo-app my-app
cd my-app
npx expo start

With React Native CLI

npx @react-native-community/cli init MyApp
cd MyApp
npx react-native run-ios  # or run-android

With Ignite

npx ignite-cli new MyApp
cd MyApp
npx react-native run-ios

FAQ

Can I eject from Expo later?

You don't need to "eject" anymore. Expo's development builds and Continuous Native Generation give you full native access without ejecting. If you truly need bare native projects, run npx expo prebuild to generate the native directories.

Is Expo free?

Expo framework: free and open-source. EAS services: free tier includes limited builds and updates. Paid plans from $99/month for teams that need more builds.

Can I use Expo for a production app?

Absolutely. Discord, Coinbase, Shopify, and many other large apps use Expo in production.

What about Flutter or native development?

Flutter is a strong alternative with its own tradeoffs (Dart language, different ecosystem). Native Swift/Kotlin development is best for performance-critical, platform-specific apps. React Native (via Expo) is best for teams with web/JavaScript expertise who want to target both platforms.

The Bottom Line

  • Use Expo for new React Native projects. It's the standard in 2026.
  • Use React Native CLI only for brownfield apps or when corporate policy requires local-only builds.
  • Use Ignite if you want proven architectural patterns and generators, and you're comfortable with MobX-State-Tree.

Start with npx create-expo-app. Add complexity only when you need it.

Get AI tool guides in your inbox

Weekly deep-dives on the best AI coding tools, automation platforms, and productivity software.