Native Mobile App Development or React Native vs Flutter vs Cordova: What to Choose in 2023

Native Mobile App Development or React Native vs Flutter vs Cordova: What to Choose in 2023

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%.

Mobile OS market share worldwide

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.

Mobile OS market share in the USA

At the same time if, let's say, you develop an app for Ukrainians, you can not count too much solely on iOS.

Mobile OS market share in Ukraine

 

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...

Google

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 three of them: Cordova, React Native, and Flutter.

Apache Cordova logo

What is Cordova?

Once a game-changer in mobile app development, Cordova (former PhoneGap) has been one of the very first cross-platform frameworks. At the beginning of the rise of mobile technology popularity there was a high demand for rewriting web applications into the mobile ones. Cordova, using HTML5, CSS3 and JavaScript, is fast for developers to pick up, allowing getting small mobile apps almost in no time. 

To achieve cross-platform development, Cordova provides native wrappers for app components, and uses a HTML Rendering Engine - WebView. Core plugins enable access to all hardware functionality. Besides, it’s possible to use third-party plugins or  create the new ones whenever necessary.

Advantages of Cordova

  • Free and open source
  • Easy learning curve due to being written with well-known HTML5, CSS3 and JS
  • Perfect solution for rewriting little JS web apps into the mobile ones 
  • High speed of mobile app development
  • Works well for development of little cross-platform mobile applications like MVP or PoC  

Disadvantages of Cordova

  • It’s a hybrid framework unable to provide fully native experience
  • WebView slows down app’s performance, which is more noticeable in larger applications with multiple features
  • Comparatively tiny community, which means that you may not get the required app development support on time... or even at all.

React Native logo

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. 

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, *but 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

Flutter logo

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. Here is a more detailed comparison of React Native vs Flutter.

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 vs Cordova

To summarize, let's take another look at the three platforms compared with one another.

React Native

Flutter

Cordova

Date of the first release

2015

2018

2009

Built by

Facebook

Google

Apple

Price

Free, open source

Free, open source

Free, open source

Programming languages

JS Native components can be written with Kotlin, Java, Swift, Objective-C, C++/WinRT, C, depending on a target platform

Dart, partly C, C++

JS, CSS3, HTML5

Supported platforms

Android, iOS, macOS, Web, Windows, Android TV, tvOS, UWP, VR

Android, iOS, macOS, Web, Windows, Linux, Google Fuchsia

Android, iOS, macOS, Windows; pending tests for Electron support

Operating systems the framework runs on

Windows, macOS

Windows, macOS, Linux, Chrome OS

Windows, OS X, Linux, macOS, depending on the operating system you develop your app for

Installation

 

  • Node.js 
  • React Native npm

*Expo is an optional toolchain that streamlines app development and testing, although it does have its drawbacks

 

Flutter SDK

 

  • Node.js and npm to enable command line tool
  • Cordova module

 

Performance

Native-like

Native-like

WebView rendering engine is one of the main reasons of slowed down performance

Apps the framework is most suitable for

 

  • Apps based on React.js web applications 
  • Any mobile applications

 

 

  • Apps with intricate design
  • Any mobile applications

 

Little mobile apps, created based on their web equivalent applications

Community: number of contributors at GitHub (October 2021)

1510

917

9

Number of GitHub stars (October 2021)

1175k

131k

339

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