Last Updated on
May 11, 2024

Flutter vs Expo

Published in
Key takeaways:

Two hot technologies for cross-platform app development in 2024 are Flutter and Expo. 

They’re both frameworks that allow developers to build apps for iOS and Android from a single codebase - but the similarities don’t go much deeper than that. 

Both are very different technologies. 

At MobiLoud, we’ve developed thousands of apps over the past 10 years, so we’ve learned a few things about the mobile world and mobile tech. 

In this article, we’re going to break down the core differences between these two tools, compare their relative strengths and weaknesses, and guide you through choosing which one to use. 

Let’s get into the basics. 

What are Flutter and Expo?

Let’s give an overview of Flutter and Expo, so we can understand how each functions on a basic level. 

What is Flutter?

Flutter was released by Google back in 2017. It’s an open-source framework for building high-performance cross-platform mobile apps. 

This means that unlike traditional native development, which requires separate builds and codebases for each platform - with Flutter you can develop apps for iOS and Android from one single codebase. 

At Flutter’s core are widgets - reusable UI components that developers customize and combine to create rich interfaces. 

To build Flutter apps, developers use the Dart programming language, which was originally intended to replace JavaScript for web development but which found its niche for Flutter. 

Dart is compiled ahead-of-time (AOT) into native machine code for each platform. 

When Flutter apps run, the UI is “drawn” aka rendered onto the screen via Skia, an open-source 2d graphics engine beloved by Google. This gives pixel-perfect control over the entire screen, a major factor that makes Flutter so powerful. 

Flutter is mostly associated with mobile apps, but Dart can also compile to JavaScript for the web and even be used to develop desktop apps for Windows and Linux. 

We wrote about Flutter in far more depth here.

What is Expo?

Flutter is not the only cross-platform framework in town. Its main competitor is React Native, another framework for building apps for iOS and Android from the single codebase. 

They’re very different though. 

React Native uses JavaScript and React to build applications that can harness the native components and APIs of the platform by “bridging” to them. 

Flutter uses the Dart programming language, its own widgets, and its own rendering engine to create a consistent cross-platform UI. 

We compared Flutter to React Native in detail here

So, what does this have to do with Expo? 

Well, Expo is a framework for building universal React applications. 

It is built on top of React Native, specifically designed to provide a set of tools and services that enhance and simplify it. 

Expo abstracts a lot of the complexity involved in building with React Native, using its components and architecture to allow developers to write JavaScript code that compiles to native components. 

Some of the key features of Expo are:

  • Managed Workflow: Expo simplifies the development process by managing the app's build process for you, so you don’t have to worry about native environment setups
  • Expo Go: This is a mobile client that lets you open and preview your project on real devices instantly, without needing to compile the app first
  • Expo SDK: The SDK offers access to system features like the camera, notifications, and sensors, alongside standard UI components, with regular updates and support.
  • Eject to Bare Workflow: Should you need more control over your project, Expo allows you to "eject" to a bare React Native project, giving you full access to its capabilities while retaining the convenience of the Expo tools you've already implemented

So Expo is best thought of as an “enhancement” to React Native. It makes it easier to use, more beginner friendly, and overall more efficient. While Flutter is a complete framework for app development, Expo is “just” a layer on top of React Native. 

With Expo, you can't build apps that you couldn't with vanilla React Native. It doesn't actually expand the range of apps you can build. It makes them easier to build.

It achieves this, practically, by:

  • Making it easier to set up, configure, and start using
  • Making it more efficient by providing tools and services that accelerate development
  • Providing a ton of pre-build components and APIs to connect with the camera, sensors, etc
  • Over the air updates - allowing developers to push app updates without going through the standard app store cycle
  • Managed services - for tasks like compiling the app into build files

It is extremely popular.

In fact, these days React Native and Expo are becoming almost inseparable, with over 50% of all React Native projects relying on the framework.

Now let’s compare Flutter and Expo on some key points of difference.  

Hybrid vs Native (ish)

Flutter isn’t strictly “native” in the same way that apps built in the platform’s native languages are. 

But it does compile to native machine code for each platform, giving Flutter apps performance that rivals true native apps.  

Because Flutter controls every pixel on the screen, it results in interfaces that are consistent across platforms without the typical quirks often seen with cross-platform development. 

So Flutter is native(ish). 

On the other hand, Expo is a layer on top of React Native, which is a hybrid framework. Hybrid apps combine web with native technologies to create mobile apps. 

Apps built with React Native and Expo are written in JavaScript. 

Unlike Flutter’s Dart code, this does not compile into native code for iOS and Android. Rather, it runs the JavaScript in a JavaScript engine within the app itself. 

React Native and Expo communicate with native code through a bridge, which allows React Native to send commands to native modules and interact with native APIs and components. 

So Flutter is more directly running as native code, while with Expo there’s a “middleman” communicating between the app and the device which interprets the code as the app runs. 

This is why, although React Native and Expo can create apps that feel quite native, there can be performance bottlenecks and limitations compared to the more native approach of Flutter. 

UI and Design Experience 

Flutter is really known for its ability to create amazing, custom and detailed UIs. How about Expo? 

Let’s take a look at each from this angle. 

The Flexibility of Flutter's Widgets

Flutter has a large widget catalog, which developers use to design complex UIs that closely mimic the native components on iOS and Android. 

The rich set of widgets adhere to the design guidelines of both iOS (Cupertino) and Android (Material Design), which make it simpler to build responsive layouts with animations, gestures, and transitions that feel natural on any device.

This, along with the ability to control every pixel on the screen, makes Flutter incredibly powerful in the right hands for building rich UIs. 

Flutter’s hot reload feature also allows immediate previews of changes without needing to restart the app - great for prototyping new designs quickly. 

Expo's Component Library

Expo provides a solid and comprehensive component library. They’re not as customizable as Flutter’s widgets, but they are great for creating clean, modern UIs with relatively little effort. 

Expo’s components are easy to modify and implement, and cover many common app design tasks. 

Expo also has a live reload and hot module replacement feature through Expo Go. These are solid tools for improving developer workflows and like Flutter’s hot reload reduce the time needed to see changes in action.

Flutter’s features are considered more advanced in this sense though. 

In summary - both Flutter and Expo allow you to design rich and performant interfaces. Flutter has the edge here though, and is really in a league of its own when it comes to design freedom. 

If you only need an app that adheres to conventional UI standards and without any crazy graphics, Expo will likely serve you more than well enough. 

Successful Applications Built with Flutter and Expo

Both Flutter and Expo are battle tested frameworks, used by a huge range of businesses around the globe from small startups to large enterprises. 

According to Expo expert Evan Bacon, there are over 780k public repos on Github using Expo OSS.

Some famous Expo projects include:

  • Discord: a high-scale communication app designed for creating communities, offering text, voice, and video chat features (iOS/Android)
  • Steam: The mobile companion to Valve’s Steam platform, which allows users to browse, buy, and manage games  (iOS/Android)
  • Burger King: gives easy access to the Burger King menu, offers, and ordering food for pickup or delivery  (iOS/Android)
  • Coinbase: a secure crypto trading app that makes it easy to buy, sell, and store assets like Bitcoin, Ethereum, and more  (iOS/Android)
  • GameStop: users can browse the gaming catalog, manage rewards, and check local stores  (iOS/Android)

We can see that Expo is good for the big players, and powers some excellent apps. 

The same applies to Flutter, here are a few examples. We’ll include links to the Flutter case study in the app names. 

This is just a tiny fraction of what’s out there. 

According to Flutter’s official site, over one million apps have shipped with Flutter to hundreds of millions of devices.

We can see that both are well-tested options and have worked for businesses with the most demanding performance and scalability requirements imaginable. 

Flutter vs Expo: Which Should You Choose?

We’ve covered the core differences between Flutter and Expo now. 

We learned that Flutter is a full framework for building native, cross-platform apps - while Expo is a piece of infrastructure that enhances React Native and helps you to build hybrid apps more easily.

So it doesn't completely make sense to compare Flutter with Expo strictly - we're really comparing Flutter with React Native + Expo.

Expo makes the development of React Native apps quicker and easier but doesn't necessarily add new capabilities beyond what React Native already offers.

So the question is whether Flutter is better than React Native with a much better developer experience and tooling.

Fundamentally, the same points apply from our article comparing Flutter with React Native more broadly.

The core advantage of Expo

The primary advantage of React Native over Flutter is the ability for developers and teams from a web-heavy background being able to use familiar technologies (JavaScript/TypeScript + React) to build iOS and Android apps.

Although it is also efficient and very learnable - Flutter is more tricky in this sense. You need to use Dart, and learn a rather unique approach to app development and architecture.

With React Native web teams can use relatively familiar technologies, which can lead to better integration with existing tech stacks and easier product development.

With Expo on top, this becomes even more compelling. Expo further streamlines React Native development, allowing for faster development cycles and overall boosts in productivity.

The core advantages of Flutter

Flutter is also excellent for many tasks.

Compared to React Native + Expo - Flutter wins when it comes to high-performance, graphically intensive apps that rely on demanding animations and complex UIs.

Because React Native + Expo bridge from JS to the native APIs, this can introduce performance limitations and bottlenecks.

Flutter's compilation to native code and ability to control every pixel on the screen allows, in theory at least, for more performance when it comes to the most sophisticated UIs.

Flutter vs other options

As part of this series, we compared Flutter to other options for app development.

For a start, we weighed it up vs vanilla React Native.

We also compared it with other cross platform frameworks Ionic and Xamarin, and to pure native languages Swift and Kotlin.

Check them out for more context - but now let's wrap up the Flutter vs Expo discussion.

Flutter vs Expo - the bottom line

Let's sum up the points we've made, and give a very general recommendation:

  • Consider React Native + Expo: if you or your team are already familiar with JavaScript/React, and are looking for easy setup and quick development cycles, especially for simpler applications or prototypes
  • Consider Flutter: if performance, particularly for complex UIs or high-frame-rate animations, is crucial, and there is a need for a single codebase across multiple platforms including desktop

Both come with their obvious merits and downsides relative to each other. But both also have shared downsides.

The problem with both Flutter and Expo

The most important problem with both Expo and Flutter is the investment required.

This comes in the form of both time and money - and introduces a lot of risk.

Consider this - to get relatively simple apps launched with either React Native + Expo or Flutter will involve:

  • $100k+ investment
  • At least 3-6 months of effort

Then you need to consider that apps require constant updates and maintenance, which adds to your team's workload and typically costs (at least) tens of thousands annually.

With such a significant investment - are you confident that it makes sense from a business and financial point of view?

Does the risk make sense? What about the opportunity cost - what else could you do with that time and money?

For massive businesses, a few extra development teams and a few extra million here or there isn't a major issue. For smaller businesses though, the investment and risk of app development is significant.

If this describes you - MobiLoud is a better option than Flutter or Expo.

Why MobiLoud > Expo and Flutter

MobiLoud is not a framework, programming language, or toolkit of any kind - we are a full service.

Essentially - we take your existing website or web app and we convert it into high-end mobile apps for iOS and Android.

MobiLoud converts web apps to native apps

The apps will be ready in just weeks, for a fraction of the cost of Flutter or Expo development - eliminating 95%+ of the risk.

All you need is a good website, web app, or online store. We take that foundation, tweak it, and add all the native parts to make it look, feel, and perform like a native apps.

This means that your MobiLoud apps keep everything that already works for the web - and also get all the important native features like push notifications, native navigation, and much more.

The ability to keep what already works from your site and combine it with the key native app elements is what makes MobiLoud so powerful.

Whatever features, custom functionality, or tech stack you currently use for the web - all that will work in your MobiLoud apps straight out of the box. You could realistically never achieve this with Flutter or React Native, both of which involve building apps from scratch.

If it works on the web, it will work great in the apps.

It also means there's no extra work for you or your team.

For starters - your MobiLoud apps will sync automatically with your site, reflecting any changes you make on the web in real time.

Secondly, our team are very proactive.

Not only do we handle the entire app build, configuration, and testing process - but we also publish the apps for you on the App Store and Google Play.

Even better, we handle all ongoing updates and maintenance for the lifetime of the apps, so there will never be any technical fails, extra work for your team, or unpleasant expensive surprises.

MobiLoud is a proven model, powering the apps of 2000+ businesses, from small startups to multibillion dollar multinationals.

The Jack & Jones apps, built with MobiLoud

So if you already have a website or web app, and you want the most efficient route to the app stores - perhaps you should reconsider Flutter and Expo.

Instead, you can preview your MobiLoud apps, read about some of our customers, and get in touch with one of our app experts for answers to all your questions.

Let's get you on the app stores.

Book a demo call today.

Native, web or hybrid app?
Understand the key differences to make the right choice for your business.
By submitting, you agree to receive emails from MobiLoud. Unsubscribe anytime.
Thanks for your interest! Click the button below to download our free resource.
Get a free app preview
Oops! Something went wrong while submitting the form.

Convert your website into a mobile app

Get custom mobile apps for iOS and Android that update automatically with your site and work with your entire tech stack.
Thank you! Your submission has been received!
Oops! Something went wrong while submitting the form.
Or Book Free Consultation
Rainbow Shops logo.Bestseller's logo.John Varvatos logo.
Only & Sons iOS app.

Read more posts like this.

Thank you! We'll be in touch within 48 hours :)
Oops! Something went wrong while submitting the form.