Do you have a mobile app idea and want to build your app quickly? And do you want to save money by cross-platform development - but aren't sure which technology to choose? We compare the leading market players - Flutter and React Native - in this article.
Almost every company nowadays needs a mobile app or apps to stay competitive in the market. In addition, businesses are seeking a method to develop mobile apps that are quicker and use fewer resources. Apple and Google have provided native tools and technologies for app development.
iOS app developers can construct apps using Objective-C and Swift, while Android developers use Android Studio and Kotlin/Java to create apps. It necessitates engineers to become competent in two completely different languages. As a result, businesses have begun to use cross-platform technologies rather than native ones to produce apps for both iOS and Android faster.
Flutter and React Native are programming languages for cross-platform app development. Let us now go through the comparison between the two to see which one comes out on top. Note that this article primarily bases its points on technical specifications and features, rather than things like app store ratings or other marketing aspects.
What is Flutter?
Flutter (initially known as Sky) was announced in 2015 during the Dart Developer Summit. Originally, it enabled the development of applications for the Android mobile operating system. In February 2018, at Mobile World Congress, the first beta of Flutter was built by a team at Google. Flutter was deemed stable and production-ready in December 2018. On March 3, 2021, the second version of the SDK appeared, introducing support for the development of web applications and computer applications in the development version. Flutter has been continuously updated, and Google has been releasing new versions. Its most recent version is 2.2.0, which was announced at Google in May 2021.
Flutter is an open-source portable developer UI toolkit. In other words, it's a complete app Software Development Kit (SDK) with widgets and tools for creating native mobile apps, cross-platform mobile apps, desktop apps, and web applications. Flutter is an open-source software project that both Google and the Flutter community contribute to. Furthermore, Flutter 2.0.0 includes hundreds of improvements as a result of developer suggestions. Even though Flutter is a young platform, it has already achieved remarkable progress. We can claim that it's impressively developed and mature for its age.
You must be aware that Flutter is free. It's based on a fast, object-oriented Dart programming language. The software architecture is based on top-rated reactive programming (it uses the same style as React). Flutter includes its widgets, which are generated from its high-performance rendering engine (the rendering engine is designed predominantly in C++. ) and are quick, stylish, and customizable. Flutter apps have a great appearance and feel (while you may still make your custom design using readily accessible UI elements that follow platform standards) thanks to the widget experience.
What is Flutter for?
Flutter allows developers to create cross-platform apps quickly. Visual appeal, native code compilation, and a single codebase for mobile (iOS / Android), web, and desktop applications. The idea is that with Flutter, you won't have to develop separate apps for the web, mobile, and desktop. With Flutter, it appears as though there is only one tool that may be used to create applications efficiently.
Flutter for desktop
When creating desktop apps with Flutter, it's possible to generate a native Windows, macOS, or Linux app. Developers can also utilize Flutter's desktop support plugins, including Mac OS X, Windows 10/8/7, and Linux platforms. Alternatively, they may develop their own. Alternatively, they may develop their own.
Desktop support for Flutter is a beta feature. As a result, it still has functionality gaps. Flutter developers can try out a beta snapshot of desktop support on the stable channel or follow the latest changes to the desktop on the beta channel if they wish to do so.
Flutter for Web
The same experiences on the web as on mobile are available through Flutter's web support. It means you may now create Android, iOS, and browser-based applications from the same source code. Web support is most effective with:
- Progressive Web Apps (PWA)
- Single Page Applications (SPA)
- Existing mobile applications (Flutter's browser-based delivery model allows existing mobile apps to access existing mobile apps through a web interface).
So as you can see, you can create mobile, web, and desktop applications using only one programming language. That increases the time of the development process.
What are popular apps made with Flutter?
Flutter is becoming more and more popular. According to Statista, in 2021, Flutter is the most frequently chosen technology. In 2019, Flutter was chosen by 30% of software developers; in the following year, that number increased to 39%, and in 2020 to 42%.
This success can also be seen in the developed applications. Here are a few of them:
- Google ads app
- Google assistant
- The My BMW app
- The New York Times
Pros of Flutter
Updates for your app are simple to make on several platforms
App upgrades are more manageable when you have the same codebase for all platforms i.e. iOS, Android, and the web. Backend updates are also only released once per upgrade. When there are separate developers responsible for each platform (like in native development), the risk of synchronization difficulties arises because different development teams handle them.
Good app performance
Flutter performance, while not yet comparable to native developed apps, is still quite good in most situations.
With tens of millions of users, companies like Tencent or Google have many people satisfied with their Flutter apps' experience. If performance were a concern, well-known brands would not incorporate Flutter in their technology stacks.
Nevertheless, there are discussion threads on Reddit or Stack Overflow where programmers ask why their Flutter apps are sluggish. The cause of some Flutter apps' slowness is frequently unrelated to Flutter itself.
In most cases, suboptimal performance results from a lack of skills and adequate understanding of Dart and cross-platform development (that is why you need experienced developers).
You'll be able to construct apps that are quick in Flutter if you follow good practices. Flutter has a comprehensive section on recommended best practices in the documentation to help keep Flutter apps performant.
Less code is needed
When you pick cross-platform development with Flutter, the amount of code you must write and maintain shrinks considerably. Of course, you may need to make platform-specific changes in the code, but it will still be much shorter than two codes written separately.
Because there is less code to work with, each Flutter app iteration requires less testing to deploy. Because each new version of the native app (iOS and Android separately) necessitates testing for both platforms when you have two codebases. In Flutter, you can write and execute one test across all platforms on which your Flutter application may run (e.g., iOS, Android, and desktop).
A goal of a cross-platform framework like Flutter is to maximize code reuse across platforms. While you can't expect to cut development time in half, Flutter does help you save time. Cross-platform tools like Flutter will be an excellent option for app development when you need to validate your concept quickly, raise money, or build a user base.
UI components that are ready-made and user-friendly
Flutter has a whole collection of UI elements that further speed up production. While ready-made UI components (native components) might affect branding opportunities, Flutter also lets devs customize each component with platform-specific tweaks. Flutter's engine delivers a great user experience by rendering fast UI components.
Faster code writing (Hot reload)
The hot reloading option in Flutter eliminates the need to recompile code when a change is made. Instead, developers can edit code and make changes to it while the application is running. It significantly speeds up the development process.
Cons of Flutter
Libraries and assistance are not as extensive as native development
Google's support for Flutter is outstanding, but Flutter is still in its early stages. It means you can't always get what you need from existing libraries, so your developers may be required to create custom features, which takes time.
There are no “standards” for creating Flutter apps
That can be problematic when building more complex software. For example, Flutter lacks support for CI platforms like Travis or Jenkins. So, developers need to use custom scripts.
Despite Flutter's open-source status, if Google drops support for the project, it would be disastrous. We can't imagine a scenario in which Google abandons Flutter at the moment.
Flutter is still an immature framework
Flutter hasn't been around for long, so it's still not completely stable. Many of the features are unsupported, many libraries are still in the pre-alpha stage and Flutter demonstrates restrictions compared to native counterparts.
Dart is also pretty immature
It's kind of like taking a step back when compared to Swift and Kotlin: it has fewer features, or the existing ones aren't quite well-refined. Dart, as well as Flutter, is changing rapidly. That can cause maintenance problems.
What is React Native?
React Native is an open-source developer toolkit used for creating native, cross-platform, desktop, and web applications, developed by Facebook. It uses the React.js library. React Native started as an internal project in the Summer of 2013 during the Facebook hackathon. The first Preview release was in January 2015 at React.js Conference. The official launch of React Native took place in March 2018.
In the clash between Flutter, and React Native, two things are certain. React Native is older, and its community is bigger. Facebook is still improving its technology (re-architected UI layer - React Native Fabric or reduced the size of an app without removing features or components - Lean Core). In one word, the FB team has had plenty of time to refine this dev kit. They have also resolved many underlying issues like stabilizing the API.
What is React Native for?
React Native framework for web and desktop
What are popular apps made with React Native?
In 2020 React Native was the most popular technology, according to Statista, when it comes to cross-platform frameworks. In 2021 we saw a significant increase in Flutter supporters, but this fight is still even.
Here are a few apps made with React Native:
- Fb Ads Manager
Pros of React Native
Familiar ecosystem and ideas
In most cases, no further investment in training courses is required to learn about specific RN topics. All you have to do is download the necessary documents and ask for the help of a large community of RN developers.
Two coding bases for two platforms
"React Native isn't perfect, but the benefits of a single codebase are huge," this is what most companies opt for RN admit.
The logic layer of the application may be shared across iOS and Android using the React Native framework. You don't need two separate development teams if you want to distribute your project across mobile platforms. In one word you don't have to hire one team to develop in Java or Kotlin for Android and the other to work with Objective-C or Swift for iOS.
In theory, you'll complete the job roughly twice as fast and much less expensive than in the case of Android or iOS native development. In practice, time and cost savings are lower, but 90% of the code may be reused across platforms.
Components that are already finished - fast development
React Native provides a collection of pre-bundled components to save you time creating common blocks from the ground up. However, the Facebook team does not restrict you to the core collection. You may pick and choose from hundreds of libraries developed by React Native contributors which are available on GitHub. For example, React Native Elements to share UI elements between RN and React JS web apps (316 contributors, used by 95,200+ developers).
You may create MVP (Minimum Viable Product) to test your concept and production-ready applications at an accelerated rate, thanks to the abundance of prebuilt components.
Native APIs and views
React Native, unlike other cross-platform frameworks and progressive mobile app development approaches, has been designed to account for and celebrate differences between iOS and Android. It uses native APIs and native visual elements such as buttons, menus, status bars, etc. As a result, the same views will appear somewhat differently on Apple and Android devices.
React Native covers all essential user interface elements. However, if you want more sophisticated features, you may use plugins provided by the community to fill the gap. Another option is to create a native module within your JS code and access native APIs that aren't available out of the box.
Android and iOS have a better runtime thanks to the Hermes engine
For a long time, the function was restricted to Android. But with the most recent 0.64 version of React, iOS apps now run 40% faster due to Hermes’ support. The upgrade also includes another advantage: Developing cross-platform applications is now considerably easier.
Flipper and Better Debugging
Debugging was an issue with RN developers for a long time. However, things started to look up after introducing the Fast Refresh feature and out-of-the-box mobile app debugger Flipper.
Cons of React Native
On the other hand, the bridge creates "traffic jams" known as "the RN worst limitation." When developing animations and touchscreen interactions, the performance shortcomings become especially apparent.
The absence of native components' out-of-the-box support
What are they doing about it? With the community's expansion, more and more open-source libraries with native features are becoming available. Their use, on the other hand, still necessitates knowledge of a specific platform.
According to their comments, moving from one version to the next is one of the most challenging aspects of React Native by developers. The question becomes: why bother upgrading at all? There are many significant reasons, including:
- The objective of a software update - correcting bugs, increasing performance, and providing security updates
- Accessing new features and APIs
So, it's highly advised to upgrade React Native applications to the most recent version. However, upgrading takes time and effort, depending on the changelog. Keep in mind that missing just one step might take hours of debugging. However, if you are only one version behind, things aren't nearly as terrible.
The React Native community developed the Upgrade Helper tool to make it easier for developers to move from one version to the next. It displays differences between current and targeted releases, so you can see what has changed.
Flutter vs. React Native: Market Share With Real Statistics
It is estimated that 42% of developers prefer using React Native, while Flutter is a tool of choice by the other 42%. The remaining 16% uses technologies like Cordova or Ionic. Despite being a very young framework, Flutter led the market over the past year's Analytics according to Google Trends. But before you start looking for Flutter app developers, it is worth examining the real market stats to make an informed decision.
Mobile app development from Flutter and React Native developers view
When picking a cross-platform mobile app development framework, the underlying architecture is critical to consider. If we know the framework's inner workings, we can make an informed selection and choose the best framework for our project.
React Native - Flux
Flutter - Skia
Flutter makes use of the Dart framework, which contains most of the components by default, resulting in larger file sizes and a frequent need for the bridge to communicate with native modules. There are dozens of different Dart frameworks available, including Material Design and Cupertino. It includes all the required technologies for mobile app development, such as the Skia C++ engine, which has all the protocols, compositions, and channels. The Flutter engine's architecture can be found in the Github Wiki here. In a nutshell, the Flutter engine has everything developers need to build an app.
Anyone developing their first app should quickly grasp the installation procedure, and it shouldn't have too many phases.
React Native — NPM
Flutter — Binary download
Begin by downloading the Flutter binaries for your platform from the Flutter website or GitHub. On macOS, we need to download the Flutter.zip file and add it to the PATH variable. Package managers such as Homebrew, MacPorts, YUM, APT, and so on should be supported by Flutter to save users.
Setup and Project Configuration
It will take time to get the new framework up and running on the developer's computer. For scores of individuals, this operation would need numerous software installations to be configured. The technology should come with comprehensive instructions and documentation so that people can get started quickly.
The React Native project's getting started guide assumes that the developer has completed all required iOS and Android development setups. While there isn't much information about Xcode's command-line tools, it won't be enough to get you up and running. The manual provides step-by-step instructions for creating a new project.
Mac installation is straightforward, as is setting up Flutter on Linux or Windows. The Flutter Getting Started Guide for iOS and Android walks you through the installation process for both platforms. If the Flutter doctor command-line tool indicates that your system is healthy, you may move on to creating a new Flutter app.
UI Components and Development API
When creating cross-platform mobile apps, it's critical to have native component support. If our program lacks native component compatibility, it won't feel like a native app. For the framework to access the native parts readily, an API is required.
React Native — Fewer components
The core React Native framework only provides the React Native UI rendering and device access APIs, except for third-party libraries. Most native components are accessed through third-party libraries for React Native. There are simply too many third-party libraries required for React Native to operate correctly.
Flutter — Rich in components
The Flutter framework includes a wide range of UI rendering components and numerous libraries and API access. Because of this vast collection of components, third-party libraries are no longer required. If you obtain the Flutter framework, you'll receive all you need to create mobile apps for both iOS and Android.
Developer productivity is crucial for delivering apps more quickly. You must maintain your attention solely on app development at all times.
The sample app is straightforward to use, and Flutter also has a hot reload function. However, as applications get more complicated, developers will learn and embrace new Flutter solutions. Dart is not a popular software language, and many integrated development environments (IDEs) and text editors do not support it.
Writing tests for your code is a fantastic method to get quick feedback on it. Every mature technology has a testing framework that allows developers to create unit, integration, and user interface tests.
Flutter's comprehensive testing tools simplify testing applications at the component, widget, and integration levels. The Flutter testing documentation is outstanding. Flutter offers a great function that allows us to develop UI widget tests and execute them at the speed of unit tests to ensure they operate as expected.
Build and Release Automation Support
Releasing a mobile app to the App Store or Google Play Store is time-consuming and difficult. It entails a tough job of digitally signing every piece of software. Cross-platform mobile app development makes it significantly more challenging.
In the React Native documentation, there are no automated methods for putting iOS apps on the App Store. However, you may deploy the app straight from Xcode. In the meantime, we can use tools like Fastlane to deploy React Native iOS and Android applications. To summarize, React Native must rely on third-party libraries to automate development.
It's really elementary to create and deploy Flutter applications using the command line. We may make the application binary by utilizing the command-line tools and instructions in the Flutter handbook for developing and publishing apps. Fastlane has also published an official procedure for deploying Flutter apps.
DevOps and CI/CD support
Regardless of whether you are developing a mobile app or a website, any application must use continuous integration and delivery to get regular feedback and avoid releasing faulty code.
There is no official documentation on how to set up CI/CD with React Native. There are, however, several articles that go through the process of setting up CI/CD for React Native applications.
Flutter has an entire chapter dedicated to Continuous Integration and Testing, with links to external resources. Flutter's rich command-line interface makes it easy to set up CI/CD.
The future of React Native and Flutter
Building apps delivered on time is one of the most crucial aspects of mobile and web app development. Their cross-platform nature, combined with their third-party tools and prebuilt components, help you develop your application more quickly.
Project expenses are another benefit of Flutter and React Native. However, which solution provides the quickest development time? Or is best suited to your project?
That all depends on your project and the balance of your crew's talents.
- Do your developers know Dart? If that's the case, working with Flutter will be a breeze.
- Do you want to use native UI components in your app's user interface? If that's the case, go with React Native.
- Is brand-first design your primary goal? If you answered yes, we think Flutter is a good fit.
Remember that each application is unique, so you must evaluate each one on its own merits. It's always worth discussing your project with a professional team of developers who can assess various strategies and have a broad enough skill set when it comes to cross-platform development. Not to brag, but we are just such a company, so if you would like to discuss your project with us, we invite you to our Free Consultation.
About the author
Peter Koffer - Chief Technology Officer
With 13 years of experience in the IT industry and in-depth technical training, Peter could not be anything but our CTO. He had contact with every possible architecture and helped create many solutions for large and small companies. His daily duties include managing clients' projects, consulting on technical issues, and managing a team of highly qualified developers.