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.

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.
| Concern | Expo project | Bare React Native |
|---|---|---|
| Native folders (ios/, android/) | Generated on demand by prebuild (Continuous Native Generation); you usually do not commit them | Committed and edited by hand |
| Custom native code | Config plugins and Expo Modules API; local modules in the repo | Edit Xcode and Gradle projects directly |
| Upgrades | One SDK bump; prebuild regenerates native projects | Manual diff of native files per React Native release |
| Routing | Expo Router (file-based) or React Navigation | React Navigation |
| Builds | EAS Build in the cloud, or local builds | Your own CI (Fastlane, GitHub Actions, Bitrise) |
| Over-the-air updates | EAS Update | Self-hosted solution or a third-party service |
| Brownfield (RN inside an existing native app) | Possible but not the main path | The 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:
| Plan | Price | Build allowance | EAS Update included | Overage |
|---|---|---|---|---|
| Free | $0 | Up to 15 Android and 15 iOS builds a month | 1,000 monthly active users | Update capped at included users |
| Starter | $19 a month plus usage | $45 of build credit | 3,000 monthly active users | Builds $1 to $4 each by platform and size; updates $0.005 per extra user |
| Production | $199 a month plus usage | $225 of build credit | 50,000 monthly active users | Same build rates; $0.005 per user above 50,000 |
| Enterprise | From $1,000 a month | Custom | Volume pricing | Custom |
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.
When each fits
| Situation | Our recommendation | Why |
|---|---|---|
| New consumer or B2B app, iOS and Android | Expo | Fastest start, easiest upgrades, config plugins cover native SDKs |
| Team without Macs for everyone | Expo with EAS Build | Cloud iOS builds remove the hardware constraint |
| Frequent copy or content fixes after launch | Expo with EAS Update | Fix JavaScript without a store review |
| Adding React Native screens to an existing Swift or Kotlin app | Bare (brownfield) | The native app owns the project; React Native is a guest |
| Strict rules that all builds run on your own infrastructure | Expo with local builds, or bare | Both 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-first | Either works; choose by your team's native skills |
| An existing bare app that upgrades smoothly | Stay bare | Migration is not free; do it when an upgrade hurts |
Migrating a bare app to Expo
- Install the expo package and confirm the app runs unchanged; you can use Expo modules in a bare app without any other change.
- Audit native edits in ios/ and android/ and list each one: permissions, SDK keys, build flags.
- 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.
- When the diff is empty or explained, stop committing native folders and build from prebuild in CI.
- 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
| Objection | Answer 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
- React Native docs, get started with React Native: https://reactnative.dev/docs/environment-setup (checked October 2026)
- Expo docs, the New Architecture: https://docs.expo.dev/guides/new-architecture/ (checked October 2026)
- Expo pricing: https://expo.dev/pricing (checked October 2026)
- Expo docs, config plugins: https://docs.expo.dev/config-plugins/introduction/ (checked October 2026)
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 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.
LinkedInRelated 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.