React Native vs Flutter Comparison: Which One is Better for Native Mobile App Development? [Infographic Included]
React Native vs Flutter debate seems to never cease. Both platforms are widely used and supported. The first one is backed by Facebook, the latter - by Google. Both are great, both have their limitations.
Which of these frameworks should you learn? Which framework is best for native mobile app development? Find the answers to these questions and more in our latest and most comprehensive React vs Flutter review.
Native mobile app development: Android vs iOS
The first time I faced an issue of choosing between Android or iOS app development was in 2012. Two of my friends from the biomedical engineering department were about to build an app for senior people providing real-time messaging with their doctor. Yet, they couldn't prove to each other which operating system was better: both certainly had a point.
There are several things to consider if you need to pick a native platform, including:
- target audience: is it a particular little community or users all over the globe?
- locale: where do the potential app users live?
- monetization, if any: do you plan to sell the app itself, or, possibly, get revenue from paid ads or other indirect ways of monetization?
According to statcounter Global Stats data, the worldwide market share of Android devices is 70.77%, while for iOS gadgets it's just 28.52%.
However, the general picture is not enough for making a definite decision, and should not discredit iOS. Platforms' popularity differs for each particular region, e.g. in the USA iOS market share is substantially higher than the one of Android.
At the same time if, let's say, you develop an app for Ukrainians, you can not count too much solely on iOS.
Despite the difference between them, both operating systems constantly improve and create excellent user experience. Here is a closer comparison of iOS and Android that highlights their peculiarities.
Things to consider
Android
iOS
Date of the first release
2008
2007
Built by...
Apple
Price
Free, open source
Free, open source
Programming languages
Kotlin, Java, C++
Swift, Objective-C
Tools for app development
Android SDK supported on all platforms
Xcode+iOS SDK supported only on macOS
Ease of app development and testing
With a broad variety of android devices you need to take into account their peculiarities and a rather wide range of screen sizes. This also makes testing more complicated.
Relatively small number of devices and screen sizes for which you develop the app. Testing is rather straightforward.
Customization
Quite flexible material design and app quality guidelines: bring your idea to life just the way you see it!
Strict design requirements making app customization more challenging.
Deployment
App submission to Play Store requires meeting less restrictions compared to App Store, thus it’s usually simpler and faster.
To get the App Store approval, you have to provide an explicit description of your application according to the numerous requirements. The app itself undergoes a thorough app review, which may last up to a few days.
Monetization
The majority of Android owners look for budget solutions, which means that it makes sense to look for indirect ways of app monetization, e.g. advertising.
iOS devices are more costly, and, as a rule, their owners are more ready to pay for access to applications.
Native vs cross-platform development
Both Android and iOS provide seamless user experience, and if a couple of years ago cross-platform frameworks struggled to repeat the native feel, today they have hit this target. Android frameworks have also made significant improvements in replicating the native look and feel, providing a seamless user experience similar to iOS.
Pros of cross-platform app development
- One programming language to develop apps both for Android and iOS
- Completely shared codebase, resulting in time and cost efficiency: one team of developers is enough to handle mobile app development for both platforms
- Reach both Android and iOS users in significantly shorter period of time and with lower cost of development
- Ease of app support due to shared codebase
Cons of cross-platform app development
- Compatibility issues: the most common reason is that it takes time to adjust to native frameworks updates
- Developers need to take into account design requirements and devices’ peculiarities for both Android and iOS platforms
- Despite drastic improvement of cross-platform frameworks, some performance limitations still occur
- Applications require more storage memory compared to the native ones
Although nowadays there are several frameworks for cross-platform development, in this article we’ll take a closer look at two of them: React Native and Flutter.
What is React Native?
RN was developed by Facebook as an extension of React.js. It uses components to build mobile applications both for iOS and Android. It is possible to work with native modules, and to create your own ones.
React Native reaches native modules through JavaScript bridges, which once used to be a source of performance bottlenecks when it came to animation. In the latter RN release this issue was eliminated as animation runs with a native code without necessary passing of every frame through the JS bridge.
Hermes, a JS engine that achieves 2-3 times shorter app’s start time and reduces memory usage, is compatible with RN versions starting from 0.60.4. It is available for iOS starting from 0.65 release as well, which means that the same JS engine is used both for iOS and Android applications. This ensures similar code execution for both platforms, and eliminates bugs e.g. when something works well on Safari, but fails on Chrome.
Several limitations have been removed, concerning React Native compatibility with Expo, so it's much easier to streamline cross-platform app development. Now it's possible to
- use all Expo libraries for an RN project initially built without Expo
- add your own native components to an Expo project
- create a hybrid RN application combining both Expo and native module
Here is a step-by-step guide on how to deploy React Native apps to the App Store and Google Play. Also here you can find two articles that highlight popular React Native apps, their value and functionality, and demonstrate some practical RN capabilities.
How does React Native work?
React Native apps have a UI thread for displaying elements, JS thread for dealing with logic, Native Modules thread for access to platform API, and Render thread (Android 5.0) for generating OpenGL commands to draw UI. These threads interact with one another and make the app run.
To get started with React Native, follow this easy-to-follow React Native tutorial:
1. Make sure you have Node 10 LTS or greater installed
2. To run React Native, run the following command:
npm install -g expo-cli
3. To create your first React Native app, simply run:
expo init AwesomeProject
cd AwesomeProject
npm start #you can also use: expo start
If you wonder how to run a React Native app once you’ve deployed your React Native app, install Expo client and follow the instructions.
What is React Native used for?
React Native is the framework of choice for many developers who need a cross-platform mobile solution. React Native has been around for over 5 years and has been used for mobile development by Facebook, Instagram, Pinterest, and more.
Advantages of React Native
- Free and open source
- Provides native feel and high-quality user experience
- Quite easy learning curve, especially for those familiar with React: it’s written with JS, and has explicit documentation
- UI components reusability
- Fast Refresh shows how the changes to app code work as soon as you save them, no recompilation required
- Much better performance compared to the frameworks that use WebView. It aims to reach 60 frames per second, that makes it similar to native apps
- Expo and Hermes benefits
- Framework’s maturity
- If you already have a web application built with React, a mobile RN app can be supported by the same team
- Moreover, some React code can be reused for React Native application
- Large active community, including support from Microsoft, Shopify, Twitter, Callstack and many others
Disadvantages of React Native
- Some libraries are not supported any more, However, you can easily find their more recent alternatives or build your own components
- A few components right out of the box. However, there are plenty of open-source components developed by the community, 3rd-party tools support, and possibility of custom component development.
What is Flutter?
Flutter is a cross-platform app development framework created by Google. It offers a wide variety of widgets to build the application with. Flutter uses Dart programming language, which is relatively easy to pick up if you are familiar with JavaScript, Java or C++.
If you need to implement a unique feature and can't find a corresponding widget, it's easy to use the device's native APIs. A huge advantage of Dart is that it directly compiles into native code without having to use bridges or third-party tools to do it.
Flutter’s rendering engine Skia also greatly contributes to the high level of app performance. It's easy to build a great design for any screen size with native feel and 60 fps frame rate.
The main difference with React Native consists in Dart programming language, otherwise these two platforms are pretty much equally performant.
How does Flutter work?
Simply said, Flutter starts with a blank window and draws whatever needs to be rendered on the screen. With Flutter, you get access to numerous widgets that can be joined together like building blocks and customized to your needs.
To install Flutter, follow this simple Flutter tutorial:
- Get the latest version of Flutter on their official website
- Extract the zip file in the desired location
What is Flutter used for?
Flutter is used for cross-platform mobile app development. It’s used for a great variety of mobile applications in various industries from healthcare to entertainment. Alibaba, Tencent, and Google are just a few prominent examples.
Find the best tech solution for your project!
Advantages of Flutter
- Free and open source
- A complete set of tools for app development right out of the box
- Dart directly compiles into native code without any auxiliary tools
- Hot Reload shows the results of any code changes directly on real or virtual device almost in no time
- Perfect for apps with customized or even intricate design, native performance guaranteed
Disadvantages of Flutter
- Rather challenging learning curve: you have to learn Dart and get acquainted with numerous widgets. However, once you do it, the productivity of development will steadily increase
- Dart is a platform-specific language, which means that there is smaller pool of developers to provide app support
React Native vs Flutter showcase
React Native vs Flutter for developers: which one to learn?
Every mobile application developer has to face this dilemma sooner or later in their career. Once you’ve delivered a knockout app to the iOS market, eventually you’ll receive a lot of these: “When is out on Android? When is it coming to Android?” Or vice versa.
Feeling like a heavy hitter, you may, of course, do it the hard way and build a native app from scratch for another operating system. If you decide to follow that path, however, every update or bug fix would have you on the ropes.
After all, maintaining two codebases in two separate languages is not a walk in the park. That’s a lot of work down the line; simply put, you’d end up doing double work. Or even more, considering you’d have to take care of a massive array of screen sizes and aspect ratios. Here’s where React Native and Flutter come in.
React Native vs Flutter: Out of the box feature set
React Native
React Native comes with a quite limited set of features. React Native UI rendering will let you display content on the screen of the device. With React Native you’ll also get solid access to various features of that physical device. For example, you’ll get a chance to access to the device’s camera or geolocation. For something more advanced like navigation or testing, you’d need to start reaching for third-party dependencies. That’s one of the reasons why React Native falls out of favor for many developers.
Flutter
Once you have Flutter installed, you have everything to build an entire app. Just like React Native, Flutter comes with UI rendering and device API access. Flutter packages will also give you access to navigation, testing, state management, and Widget Library. Flutter software development tools provide you with everything you need. A lot of developers prefer Flutter for that matter because it’s a total package right off the bat.
React Native vs Flutter community support
React Native
Ever since the launch, React Native became widely recognized and used. React Native conferences, workshops, and meetups have been taking place in almost every big city year after year. React Native EU 2023 conference held in Wroclaw, Poland, gathered over 300 attendees and 25 speakers from all over the world. Seasoned React Native developers and advocates gladly share their projects to React Native community on GitHub.
Flutter
Flutter mobile framework popularity has been growing exponentially since it was introduced to the public at Google I/O conference back in 2017. Flutter becomes used more, and more people want to talk about it. Flutter enthusiasts regularly gather at international conferences. Although, it’s still hard to find answers to some basic problems, and decent Flutter development courses and resources are sparse, Flutter community promises to catch up.
React Native vs Flutter language choice
React Native
With React Native you have the option to use dynamically typed JavaScript, or statically typed TypeScript or JavaScript with Flow. To develop React Native applications, you have a wide choice of languages that are already familiar to most developers.
Flutter
The only language we can use to make Flutter applications is Dart. It uses C-like syntax and is statically typed. Flutter programming language, although rather similar to JavaScript and TypeScript, is still not used that much. However, with its short learning curve and high productivity, Dart promises to toss its hat into the ring in 2020. Some even call Dart ‘JavaScript killer’. Yikes.
React Native vs Flutter difficulty curve
React Native
With React Native it’s fairly easy to begin. Building something simple is rather straightforward and not that challenging. However, as your project grows, it becomes more difficult to implement more advanced features, like navigation. To create more complex components, you’d have to wrap your head around multiple third-party libraries. Quite often, these libraries are developed as a side-project or a hobby and, therefore, are rough around the edges. Using third-party libraries will also bring about a fall in productivity: outdated documentation and countless unresolved issues will only slow development down.
Flutter
With loads of documentation, built-in functionality, and numerous widgets and classes, Flutter may be difficult to pick up. Don’t forget about Dart - you’ll have to learn it as well. Obviously, Flutter’s learning curve is rather challenging, but once you’re past that stumbling block, things will become much easier. Having that many tools and repeating them over and over again make using Flutter for mobile development painless and enjoyable. At the beginning, you won’t be able to do much, but after you get a sense of Flutter, you’ll experience a long-lasting productivity boost.
React Native vs Flutter state management
React Native
In the React Native world, we get access to component level state which allows us to tie some data to each component rendering. With React Native you also get to work with Redux and Mobx. As a highly admired state container, Redux helps you create applications that can run in various environments (client, server, native) and behave consistently. MobX, a standalone library, provides a powerful addition to React Native.
Flutter
When it comes to state management in Flutter, by default you’ll get to work with Stateful Widgets. Unfortunately, stateful widgets are not that good to use in large applications. Solutions for large applications include Scoped Models, Redux, and BLOC Pattern. The problem here is that you’ll have to figure out which one of those solutions works for you. There’s really no consensus in the Flutter community on which state management tool is the best.
React Native vs Flutter for business owners: Which one to choose?
Choosing what’s best for your business may be not so easy. Mobile app development may be a costly and time-consuming process if done with the wrong tools and by the wrong people. To decide which cross-platform development tool, Flutter or React Native, you should opt for, let’s look at these frameworks from the business owner’s perspective.
React Native vs Flutter platform support
React Native
React Native is used to build applications for Android, iOS, Web Apps. You can also get early access to React for Windows. There are quite a few experimental macOS forks and extensions targeting desktop platforms. React Native offers stable support for mobile and web development, although, some limitations are still present in web dev.
Flutter
Flutter supports Android (ARM devices) and iOS starting from iPhone S4. Early access is granted to web and macOS projects. Support for Windows and Linux is currently under development. Flutter is expected to catch up with React Native in terms of platform coverage in a couple of years.
React Native vs Flutter development speed
React Native
React Native’s fast refresh feature lets developers inject new code snippets directly into a running application. With the fast refresh, developers can see how the app changes without having to rebuild it. The latest version of React Native’s fast refresh unifies hot and live reload and makes development faster with resilience to mistakes and typos. React Native also uses native and bridge components which may slow down development.
Flutter
Flutter makes coding fast with hot reload which helps with showcasing instant changes, fixing bugs, adding new features, and experimenting with multiple solutions. Skia Graphics library ensures that UI is redrawn quickly at 60 frames per second. Since Flutter is widget-based, Flutter app development is usually smooth and swift. Using Flutter for cross-platform development for that matter might be a better choice.
React Native vs Flutter development cost
React Native and Flutter
Both platforms are open-source, which means development cost will depend mostly on the team, any additional resources they might use, project size, etc. Contact us for a detailed project estimation on the platform of your choice.
By and large, both Flutter and React Native come with their own advantages and disadvantages. Platforms like Flutter or React Native are developed with an issue or inconvenience to be resolved in mind. Flutter and React Native are similar and different at the same time. Each of them solves a specific problem set at a certain cost. None of the frameworks is perfect per se, but either of them can be the ultimate solution for multiple businesses.
Let's sum it up!
It looks like the times when you had to choose between iOS and Android operating systems are over. Cross-platform application development confidently reaches native level, and opens access to broader audiences within significantly decreased time and budget.
The last releases of React Native and Flutter provide developers with nearly equal capabilities. The platform choice may depend on the programming language required. While RN uses JavaScript, it may be easier to find a dedicated team for your project. Dart is a less widespread programming language, but its popularity increases.
If you have any questions, or would like to discuss your project idea, feel free to contact us!