Skip to content

Engineering · 6 min read

Expo vs Bare React Native in 2026: EAS, Config Plugins, the New Architecture and Cost

Expo vs bare React Native in 2026: managed workflow, EAS Build and Update, config plugins, the New Architecture, EAS plan prices, and when each one fits.

Zain Khalid MalikZain Khalid MalikCTO & Co-founder, Innovation InsightPublished
Smartphone lying on a table showing its home screen of app icons

Short answer

Start new React Native apps with Expo unless you have a specific reason not to. The React Native docs now recommend a framework, and Expo's config plugins remove most reasons to manage native folders by hand. EAS Build, Submit and Update are optional paid services (Starter $19 a month, Production $199, checked October 2026). Go bare when you embed React Native in an existing native app or need build infrastructure you fully control.

What changed: "Expo vs React Native" is the wrong question

Expo is not an alternative to React Native; it is a framework on top of it, the way Next.js sits on top of React. The React Native documentation now says plainly that "if you're building a new app with React Native, we recommend using a Framework" and names Expo. You can still use React Native without a framework, starting from Android Studio and Xcode, but you take on the tooling that Expo would otherwise provide. The real choice in 2026 is between an Expo project (with or without EAS cloud services) and a bare React Native project you assemble yourself.

ConcernExpo projectBare React Native
Native folders (ios/, android/)Generated on demand by prebuild (Continuous Native Generation); you usually do not commit themCommitted and edited by hand
Custom native codeConfig plugins and Expo Modules API; local modules in the repoEdit Xcode and Gradle projects directly
UpgradesOne SDK bump; prebuild regenerates native projectsManual diff of native files per React Native release
RoutingExpo Router (file-based) or React NavigationReact Navigation
BuildsEAS Build in the cloud, or local buildsYour own CI (Fastlane, GitHub Actions, Bitrise)
Over-the-air updatesEAS UpdateSelf-hosted solution or a third-party service
Brownfield (RN inside an existing native app)Possible but not the main pathThe natural fit

Config plugins: why you rarely need to eject

Older advice said you would eject from Expo the first time you needed a native SDK. That is out of date. A config plugin is a small function that edits the generated native project at prebuild time: adding a permission to Info.plist, a Gradle dependency, an entitlement or an Android manifest entry. Most popular native libraries ship one. When a library does not, you write a local plugin of 20 to 50 lines, or wrap native code with the Expo Modules API in Swift and Kotlin. The native code still exists; you just describe it as code instead of hand-editing generated files that the next upgrade overwrites.

The New Architecture is no longer optional

Expo's documentation (checked October 2026) sets out the timeline: SDK 52 enabled the New Architecture (Fabric renderer, TurboModules, JSI) by default for new projects, SDK 53 and 54 turned it on for existing projects, SDK 54 was the last version where you could opt out, and SDK 55 and later run entirely on the New Architecture. This affects both paths equally. If an app depends on an old library that never moved to the New Architecture, you will need to replace or fork it whether you use Expo or not. In code audits this is the most common upgrade blocker we find, ahead of any Expo-specific issue.

EAS: what it does and what it costs

EAS (Expo Application Services) is the paid cloud side: Build compiles iOS and Android binaries without a Mac on every developer's desk, Submit uploads them to the stores, and Update ships JavaScript and asset changes to installed apps without a store review. You can use Expo without EAS and build locally or in your own CI. Prices from expo.dev/pricing, checked October 2026:

PlanPriceBuild allowanceEAS Update includedOverage
Free$0Up to 15 Android and 15 iOS builds a month1,000 monthly active usersUpdate capped at included users
Starter$19 a month plus usage$45 of build credit3,000 monthly active usersBuilds $1 to $4 each by platform and size; updates $0.005 per extra user
Production$199 a month plus usage$225 of build credit50,000 monthly active usersSame build rates; $0.005 per user above 50,000
EnterpriseFrom $1,000 a monthCustomVolume pricingCustom

For a typical startup app with a few thousand users, Starter covers it. An app with 100,000 monthly active users on Production pays about $199 plus 50,000 extra users at $0.005, roughly $449 a month, before build overage. Compare that with the cost of a Mac build machine, its maintenance and the engineer time spent on signing certificates: for most teams under ten mobile developers, EAS is cheaper.

EAS Update can only change JavaScript and assets. Anything that touches native code still needs a store release, and store rules still apply to what an update may change. Plan releases so native changes are batched.

When each fits

SituationOur recommendationWhy
New consumer or B2B app, iOS and AndroidExpoFastest start, easiest upgrades, config plugins cover native SDKs
Team without Macs for everyoneExpo with EAS BuildCloud iOS builds remove the hardware constraint
Frequent copy or content fixes after launchExpo with EAS UpdateFix JavaScript without a store review
Adding React Native screens to an existing Swift or Kotlin appBare (brownfield)The native app owns the project; React Native is a guest
Strict rules that all builds run on your own infrastructureExpo with local builds, or bareBoth avoid EAS; Expo still saves upgrade time
Heavy custom native work (camera pipelines, BLE, background audio)Expo with Expo Modules, or bare if the team is native-firstEither works; choose by your team's native skills
An existing bare app that upgrades smoothlyStay bareMigration is not free; do it when an upgrade hurts

Migrating a bare app to Expo

  1. Install the expo package and confirm the app runs unchanged; you can use Expo modules in a bare app without any other change.
  2. Audit native edits in ios/ and android/ and list each one: permissions, SDK keys, build flags.
  3. Move each edit into app.config.ts or a config plugin, then run prebuild into a clean folder and diff against the committed native projects.
  4. When the diff is empty or explained, stop committing native folders and build from prebuild in CI.
  5. Adopt EAS Build or Update only if they save you time; neither is required.

On a medium-sized app this is usually one to three weeks of a senior engineer's time, mostly in step 3. It pays back on the next major React Native upgrade.

Our React Native work

We have shipped React Native apps such as LogFish, an offline-first fishing log with Mapbox GPS tracking, Stripe payouts and NestJS microservices, and Treasure Island AI, a React Native app with speech-to-text, text-to-speech and an AI counsellor on a GraphQL backend on AWS. The trade-offs above come from building and maintaining apps like these. Our React Native development page covers how we run mobile projects, and you can hire Expo developers or React Native developers at $4,000 to $6,600 a month for seniors.

If you are still choosing a framework, read Flutter vs React Native. For budgets, a cross-platform mobile MVP typically costs $20k to $45k with us; the mobile app development cost guide and the app cost calculator break that down by feature.

Common objections, answered

ObjectionAnswer in 2026
"Expo apps are bigger and slower"An Expo project compiles to the same native binary as any React Native app; modules you do not use are not included. Performance depends on your code and libraries
"We will be locked in to Expo's cloud"EAS is optional. You can run prebuild and build locally or in your own CI at any time
"Expo cannot use library X"If X has a config plugin, or you write one, it works. Libraries that never moved to the New Architecture are a problem everywhere
"Over-the-air updates break store rules"Updates that change JavaScript and assets within your app's purpose are normal practice; native changes still go through review

What to check when hiring for either path

  • Has shipped at least one app through both store reviews, including signing, provisioning profiles and Play Console tracks.
  • Can explain prebuild and write a config plugin, or, for bare projects, read and fix an Xcode or Gradle build failure.
  • Has upgraded an app across major React Native or Expo SDK versions and can describe what broke.
  • Knows how to test on real devices, including older Android phones, not just simulators.

Sources

Need a number for your project?

Send a short brief and get a written estimate.

A senior engineer replies within one business day. No sales call required.

Zain Khalid Malik, CTO & Co-founder, Innovation Insight

Zain Khalid Malik

CTO & Co-founder, Innovation Insight

Zain owns architecture, engineering standards and the platform team at Innovation Insight. He sets the bar for code quality, security and the tooling every squad ships with.

LinkedIn
FAQ

Related questions.

Is Expo good enough for production apps?

Yes. The React Native team recommends starting new apps with a framework such as Expo, and config plugins plus the Expo Modules API cover native SDKs that once forced teams to eject.

Do I have to pay for Expo?

No. Expo itself is open source. EAS Build, Submit and Update are optional cloud services with a free tier; paid plans start at $19 a month (checked October 2026).

Can I add native code to an Expo app?

Yes, through config plugins that modify the generated native projects, or native modules written in Swift and Kotlin with the Expo Modules API.

When should I choose bare React Native?

When you are adding React Native to an existing native app, or your team wants to own every native file and build step. For new apps, Expo is the usual choice.

Does the New Architecture affect the choice?

Not directly. Expo SDK 55 and later run only on the New Architecture, and bare React Native has moved the same way. Old libraries that never migrated are a problem on both paths.