App Development

Flutter vs Expo: Which Cross-Platform Framework Should You Choose?

15 min read
Table of contents

Building a mobile app used to mean two projects: one for iPhone and another for Android, often written by two different teams. Today, many teams pick a cross-platform framework instead, write the app once and ship it to both app stores. Flutter and React Native are the two names on nearly every shortlist.

But Flutter vs Expo isn’t quite a contest between two rival frameworks. Expo is the framework and toolchain the React Native team recommends for building React Native apps, so the real choice is between Flutter and React Native built with Expo. It decides which language your team writes, how your app draws its screens and how you ship updates for years to come.

This guide compares the two on architecture, design, performance, tooling, web support and cost, with real apps built with each and a clear view of which one suits your team.

Flutter vs Expo at a Glance

Flutter and React Native with Expo both build iOS and Android apps from one codebase, but they share almost nothing under the hood. Flutter brings its own language and draws its own interface, while Expo builds on React Native, which uses JavaScript and each platform’s own native components.

FlutterReact Native with Expo
What it isA UI framework and SDK from GoogleA framework and cloud services for React Native, from the company Expo
Latest stable releaseFlutter 3.47 (August 2026), with Dart 3.13Expo SDK 58 (October 2026), with React Native 0.88
LanguageDartJavaScript or TypeScript, with React
How it draws the screenIts own engine, Impeller, draws every pixelEach platform's native components
Release codeCompiled ahead of time to native machine codeJavaScript compiled to Hermes bytecode, inside a native app
PlatformsiOS, Android, web, Windows, macOS and LinuxiOS, Android and web
Live reload while codingStateful hot reload, on mobile and webFast Refresh, which keeps component state
Custom native codePlatform channels to Swift, Kotlin and other native codeExpo Modules API, in Swift and Kotlin
Cloud builds and store submissionNot included: build with Xcode and Android Studio or your own CIEAS Build and EAS Submit
Over-the-air updatesNot included; third-party services such as ShorebirdEAS Update
CostFree and open sourceFree and open source; cloud services from $0, paid plans from $19 a month

What Is Flutter?

Flutter is Google’s open-source framework for building apps for mobile, web and desktop from a single codebase. Google ships a new stable version about every three months, and Flutter 3.47 arrived in August 2026.

Flutter apps are written in Dart, a language Google also makes. While you develop, Dart runs on a virtual machine that supports hot reload. For release, it’s compiled ahead of time into native ARM or x64 machine code for each platform.

Flutter’s defining choice is how it draws the screen. Instead of using the buttons, lists and text fields iOS and Android provide, it paints every pixel itself with its own rendering engine, Impeller.

Impeller is the only renderer on iOS, the default on Android 10 and later and, since Flutter 3.47, the default on Windows, macOS and Linux too. On top of it, Flutter’s widgets come in two design systems: Material, Google’s own, and Cupertino, which follows Apple’s design guidelines.

What Is Expo, and How Does It Relate to React Native?

Expo is an open-source framework and set of tools for building React Native apps. It isn’t an alternative to React Native: an Expo app is a React Native app, written with React Native’s components, with Expo’s libraries and tooling around it.

React Native is the framework Meta created for building iOS and Android apps with React. Since February 2026, it has been owned by the React Foundation, hosted by the Linux Foundation, with Meta, Microsoft, Amazon and Expo among its founding members.

React Native’s own setup guide recommends starting new apps with a framework, and says most developers benefit from one like Expo. Without one, you write your own solutions to core features or piece together libraries to do the same job.

Expo adds what plain React Native leaves to you:

  • Expo Router, file-based navigation for iOS, Android and the web, where every screen can be opened from a link
  • The Expo SDK, a library of native modules for things like the camera, notifications and contacts
  • Continuous Native Generation, which generates the iOS and Android projects from your app’s config, so nobody maintains native folders by hand
  • The Expo Modules API, for writing your own native modules and views in Swift and Kotlin
  • Expo Application Services (EAS), optional cloud services for builds, store submission and over-the-air updates

Expo Go, a free app for opening a project on your phone, is handy for experiments. For an app you’ll publish, Expo recommends a development build, which is your own version of Expo Go with any native libraries your app needs.

How Do Flutter and React Native Draw the Screen?

Flutter and React Native take opposite approaches to drawing an app’s interface, and most of their other differences follow from that one choice.

Flutter owns the whole stack. Your Dart code builds a tree of widgets, and Flutter’s engine lays them out and paints them with the phone’s graphics hardware. The platform’s own UI toolkit isn’t involved, which is why a Flutter app looks the same on an older Android phone and a new iPhone.

React Native hands the drawing to the platform. Your JavaScript describes the interface with components like View and Text, and React Native turns them into real native views, the same ones a Swift or Kotlin app would use.

The connection between JavaScript and native code used to be React Native’s weak spot. Older versions sent every message through an asynchronous bridge, which had to serialize the data each time.

The New Architecture replaced that bridge with the JavaScript Interface (JSI). JSI lets JavaScript call native code directly, with no serialization, and read layout synchronously, so screens don’t visibly jump as they settle.

React Native 0.82, released in October 2025, was the first version to run entirely on the New Architecture. On the Expo side, SDK 54 was the last version where you could turn it off.

Neither is a hybrid framework that renders its screens as web pages, the way Ionic does. Both produce native apps; they just build the screens in different ways.

Which Gives You More Control Over Design?

Flutter gives you more control over design, because it draws everything itself. Custom shapes, transitions and animations behave the same on every platform, and you’re never limited by what the native components can do.

That makes Flutter ideal for brand-led apps where the interface itself sets you apart. Since Flutter 3.47, its Material and Cupertino widgets also ship as standalone packages, separate from the core framework.

React Native built with Expo gives you each platform’s own look for free. Lists scroll, text fields behave and menus open the way iPhone and Android users expect, because they’re the real native controls.

Expo UI goes further, letting you build screens from SwiftUI components on iOS and Jetpack Compose components on Android, straight from React. The trade-off is that a pixel-perfect custom design takes more work to match across both platforms than it does in Flutter.

Is Flutter Faster Than React Native?

Flutter has the edge in raw rendering performance, but for most business apps the difference is too small for users to notice. Both frameworks run smoothly on modern phones.

Flutter compiles to machine code and draws every frame itself, so it never waits on a hand-off between two runtimes. Impeller also compiles its shaders when the engine is built rather than while your app runs, which avoids stutter the first time an animation plays.

React Native closed much of the gap with the New Architecture. JSI removed the cost of passing messages across the bridge, and Hermes, React Native’s default JavaScript engine, compiles your code to bytecode at build time so apps start faster.

You’re most likely to see a difference in:

  • Long, complex animations and custom transitions
  • Apps that draw their own graphics, like charts, editors and games
  • Screens with many layered, moving elements

For ecommerce, content, booking and productivity apps, either framework is fast enough. How well your team builds the app matters more than which framework it uses.

Developer Experience: Language, Tooling and Hiring

Expo’s biggest advantage is that it runs on the languages most developers already know. In Stack Overflow’s 2026 Developer Survey, 62% of the 14,099 developers who answered had done extensive work in JavaScript over the past year and 44% in TypeScript, against 4.9% in Dart.

That matters for hiring, and for teams that already build with React on the web. Components, hooks and state management work the same way in React Native, and JavaScript-only npm packages carry over. Web and mobile developers can share business logic and types too.

Partiful, the event planning app, is a good example. It started as a web app, and its React and TypeScript team chose Expo over Ionic, native Swift and Flutter when it built its mobile apps.

Flutter asks your team to learn Dart, but Dart comes easily to anyone who knows TypeScript, Java or Kotlin. In return, the language, framework and tooling all come from one team at Google and were designed to work together.

Both give you a fast feedback loop while you code:

  • Flutter’s stateful hot reload injects changed code into the running app and keeps its state, on mobile and on the web. Widget Previews, stable since Flutter 3.47, render individual widgets on their own while you edit them.
  • React Native’s Fast Refresh shows most edits within a second or two and keeps the state of function components. It’s on by default in every Expo project.

Native code is within reach in both. Flutter talks to Swift, Kotlin and other platform code through platform channels, while Expo’s Modules API lets you write native modules and views in Swift and Kotlin, connected to JavaScript through JSI.

Building, Releasing and Updating Your App

Expo’s cloud services are the clearest practical difference between Flutter and Expo. EAS Build compiles your iOS and Android apps on Expo’s servers, EAS Submit uploads them to App Store Connect and Google Play and EAS Workflows automates the release from end to end.

That means a team can ship an iPhone app without setting up Xcode, certificates and provisioning profiles on its own machines. incident.io, the incident management company, says Expo lets its team get away with never installing Xcode or Android Studio at all.

Flutter leaves builds and releases to you. You build with the Flutter command-line tool, which needs Xcode on a Mac for iOS, and automate releases with your own CI pipeline or a third-party service.

Can You Update an App Without App Store Review?

An Expo app can update its JavaScript, styling and images over the air with EAS Update, without a new app store release. Changes to native code, permissions or the Expo SDK version still need a new build.

New York’s MTA built its TrainTime app for Metro-North and Long Island Rail Road riders with Expo, and uses EAS Update for hotfixes to core flows like trip planning and ticket purchasing. Its team says it can deploy a fix in under 90 seconds from the first user report.

Flutter has no built-in equivalent. Shorebird, a third-party service, adds code push to Flutter apps.

Store rules still apply either way. Apple’s Guideline 2.5.2 bars apps from downloading code that introduces or changes features, so keep over-the-air updates for fixes and small changes, and ship new features through the stores.

How Much Does Expo Cost?

Expo, React Native and Flutter are all free and open source. You only pay if you use Expo’s cloud services, and even those have a free plan.

EAS planPriceBuildsOver-the-air updates
Free$015 Android and 15 iOS builds a month, in a low-priority queueUp to 1,000 monthly active users
Starter$19 a month plus usage$45 of build credit, high-priority queueUp to 3,000 monthly active users
Production$199 a month plus usage$225 of build creditUp to 50,000 monthly active users
EnterpriseCustomFrom $1,000 of build creditVolume pricing

Building on your own machines with Expo costs nothing, so EAS is a convenience rather than a requirement. Flutter has no paid tier of its own: what you pay for there is your CI and any third-party services you add.

Can Flutter and Expo Build for the Web and Desktop?

Flutter targets more platforms than Expo. Alongside iOS and Android, it builds for the web, Windows, macOS and Linux from the same code, and its showcase reaches beyond phones: Toyota uses Flutter for infotainment systems, and LG for its webOS platform.

On the web, Flutter compiles to JavaScript or WebAssembly and draws the page the way it draws an app. Flutter’s own docs say it suits complex, interactive web apps, but that text-heavy, document-style content like blog articles is better served by the regular web.

Expo builds for iOS, Android and the web. Its web support runs on React Native for Web and React DOM, and pages can be statically rendered for search and speed. Expo SDK 58 also made server-side rendering, data loaders and middleware in Expo Router stable.

That makes Expo the better fit when the same codebase should also power a website people find through search. Desktop isn’t Expo’s focus: it relies on Microsoft’s React Native for macOS, and SDK 58 doesn’t support macOS until that project catches up.

Apps Built with Flutter and Expo

Flutter and Expo both run apps with millions of users, from Google’s own products to New York’s commuter rail apps.

Built with Flutter, according to Flutter’s showcase:

  • Google Pay, Google Earth and NotebookLM, among Google’s own apps. Google built and shipped the NotebookLM app in seven months.
  • Nubank, SoFi and Betterment, in banking and investing
  • Headspace, Wolt and Universal Studios, in consumer apps
  • Toyota and LG, in cars and TVs

Built with Expo, according to Expo’s customer stories:

  • The MTA’s TrainTime app, built with Expo in 2022
  • Partiful, the event planning app, and incident.io, the incident management platform
  • Cameo, Mollie and Hipcamp, in consumer, payments and travel apps

React Native also powers Microsoft Office, Outlook and Teams, Amazon Shopping and every one of Shopify’s mobile apps, according to React Native’s showcase, although not all of them use Expo.

Flutter or Expo: Which Should You Choose?

Choose Expo over Flutter if your team knows React or TypeScript, or if fast releases and over-the-air fixes matter most. Choose Flutter if your app’s design is its selling point, or if you need desktop or embedded screens as well as phones.

If you…UseBecause
Have developers who already write React or TypeScriptExpoSame language, components and hooks, with logic and types shared with your web app
Want an app that looks identical everywhere, with custom animationFlutterIt draws every pixel itself
Need to ship fixes between store releasesExpoEAS Update is part of the toolchain
Need Windows, macOS, Linux or embedded screens tooFlutterStable desktop support, and it already runs in cars and TVs
Want the same code to power a website that ranks in searchExpoStatic and server rendering on the web
Would rather not manage Xcode, signing and store uploadsExpoEAS Build and EAS Submit handle them in the cloud
Want language, framework and tools from one teamFlutterGoogle builds Dart, Flutter and its tooling together

Expo is best suited to product teams with web roots, startups that need to move fast and companies that want one JavaScript skill set across web and mobile. Flutter is a strong fit for design-led consumer apps, teams happy to learn Dart and products that run on more than phones.

Compared with the gap between either one and building two separate native apps, the gap between Flutter and Expo is small. For most business apps, the skills your team already has should decide it.

When You Already Have a Website

Flutter and Expo are built for teams creating a new app from the ground up. If you already have a website or online store that customers use every day, building the app in either one means rebuilding your catalog, checkout, accounts and integrations in a second codebase, then keeping the two in step for as long as you have an app.

MobiLoud transforms your website into a custom native app, powered by the same underlying code as your website. We build the app from your site’s code, so it launches with your products, menus, content and features like search, loyalty and subscriptions already in place.

Then we design a fully custom, native interface for the phone and add what only an app can do: push notifications, app-only pages your team builds in your own platform, native features, SDKs and device integrations. Our team builds, launches and looks after your app - you’ll typically go live in 2 to 4 weeks.

We’ve helped brands like John Varvatos, Jack & Jones and Tadashi Shoji launch their apps this way. If your app is a new product with no website behind it, Flutter or Expo is the right tool.

Final Thoughts

Flutter vs Expo is really Flutter against React Native built with Expo, and both are mature, production-proven ways to build one app for iOS and Android. Flutter gives you a self-contained stack that draws every pixel and reaches desktop and embedded screens. Expo gives you React, native components and cloud services that make building, shipping and fixing an app faster.

Neither is the wrong choice for a capable team, so let your team and your app decide. If your developers write React, start with Expo. If your app’s look is the product, or it has to run beyond phones, start with Flutter.

Thomas Goss

Thomas Goss

Content Marketer

Thomas writes about media trends and business models - and hosts the Digital Media Growth Podcast, where he interviews fascinating people from the world of digital publishing. In his spare time, he likes reading, skiing, fitness, cooking and learning languages.

Frequently asked questions

Is Expo the same as React Native? +

Expo isn't the same as React Native, but an Expo app is a React Native app. Expo is a framework and set of tools built on top of React Native, adding file-based routing, a library of native modules, generated native projects and optional cloud services for builds, store submission and updates.

Is Flutter better than Expo? +

Flutter is better than Expo for apps with a highly custom, animation-heavy design and for apps that also need to run on desktop or embedded screens. Expo is better for teams that already write React or TypeScript, and for apps that need over-the-air fixes or a website from the same code. For most business apps, both do the job well.

Is Expo free to use? +

Expo is free and open source, and so is React Native. Only Expo's optional cloud services cost money: the free plan includes 15 Android and 15 iOS builds a month and over-the-air updates for 1,000 monthly active users, and paid plans start at $19 a month plus usage (October 2026).

Does Flutter support over-the-air updates? +

Flutter doesn't include over-the-air updates the way Expo does with EAS Update. Teams that need them use a third-party service such as Shorebird, which adds code push to Flutter apps. With either framework, Apple's rules mean over-the-air updates should be kept for fixes and small changes.

Do you need a Mac to build an iOS app with Flutter or Expo? +

Building a Flutter app for iOS needs Apple's Xcode, so you need a Mac or a CI service with macOS machines. Expo's EAS Build compiles iOS apps on Expo's own servers, so you can build and submit an iPhone app without a Mac, although you still need one to run the iOS Simulator.

Is Dart hard to learn? +

Dart isn't hard to learn for developers who already know TypeScript, Java or Kotlin, because it's a typed language with familiar syntax, classes and async code. Most of the learning curve in Flutter comes from its widget-based way of building interfaces, not from the language itself.

Related reading

Get a free preview of your app

See how your store would look and feel as a mobile app, before deciding whether to build.

No credit card required.