React Native, Flutter or Ionic? A 2019 comparison.

Mobile app development has been moving rapidly ever since the first iPhone was introduced by Steve Jobs. Developers have more choices than ever. Not only can we develop apps natively, but also interesting alternatives have entered the arena, such as React Native, Flutter and Ionic. But will they stack up against good old native? And if so, which one to pick?

As an innovative company, RB group-aero wants to be agile. Developing and testing new features takes a lot of time and effort. Being a first-mover in aviation space, we are constantly questioning our methods and improving our processes.

For this particular question we turned to Akira Chow, a software engineering student from The Hague University. Upon our request, she has delivered a research report comparing React Native, Flutter, Ionic and other options. So what did she find?

Native vs Cross-platform

Akira Chow
Akira Chow

Ever since I found out about cross-platform frameworks I have been fascinated by them. It takes the best of both worlds of mobile development, namely iOS and Android, and puts them together in one codebase. There are a numerous amount of advantages to cross-platform development, such as faster development and deployment speed, and maintainablility of the code. Of course, there are downsides as well to cross-platform development – most of the frameworks die off quickly or move very fast which can break ill-maintained dependencies.

It’s a big decision to take up cross-platform development and for that you need to research if it is the right step for a company to take. At RB group.aero, the RosterBuster application is being developed natively for iOS and Android. A well developed native application will always outperform a cross-platform application in terms of speed, reliability of dependencies and documentations, and Native API’s are instantly available. As soon as a new one is out, it can be used immediately. But developing and maintaining two separate codebases is the a major downside to native development.

I think it’s important that RosterBuster is showing interest in cross-platform development. It is still a relatively small company, but is growing quickly. Exploring alternatives of native development might bring in exciting and promising endeavors or shine light on how current development might be improved.

Comparison

 

Ionic

React Native

Xamarin

NativeScript

Flutter

Supported platforms

Android, iOS, Web (PWA)

Android, iOS

Android, iOS

Android, iOS

Android, iOS

Developers

Drifty.co

Facebook Community

Microsoft

Progress

Google

Nature of apps

Hybrid (PWA), Cross-platform (Cordova)

Cross-platform

Cross-platform

Cross-platform

Cross-platform

Language stack

JavaScript, HTML, CSS, TypeScript

JavaScript (JSX)

C#

JavaScript, HTML, CSS, TypeScript

Dart

Ecosystem

Mature

Mature

Mature

Growing

Growing

Performance

Medium-Good

Good

Good, close to native

Good, close to native

Good, closest to native

Hot reloading

Supported

Supported

Not supported

Supported

Supported

Native widgets

No

Yes

Yes

Yes

No

Firebase integration

Yes

Yes

Yes

Yes

Yes

Offline usage

Lacking

Good, Realm.io supported

Good, Realm.io supported

Lacking, Realm.io not yet supported

Lacking, Realm.io not yet supported

Wearables support

Not Supported

Not supported (yet?)

Supported

Android only

Supported (but limited)

Code sharing

Yes

Yes

Yes

Yes

Yes

Community & support

Strong & stable

Strong & stable

Small and inactive

Small and inactive

Medium, growing, active

Documentation

Up-to-date

Up-to-date, imprecise

Up-to-date

Up-to-date, imprecise

Comprehensive, up-to-date

Pricing

Free, or up to $29 to $199 per month

Free

Free, or up to $1199 per developer per year

Free

Free

GitHub stars

36.9K

73.5K

3K

16K

52.5K

Initial release

November 2013

January 2015

February 2013

March 2015

May 2017

Popular apps

Pacifica, TD Trading, Sworkit, MarketWatch, ChefSteps, JustWatch, Diesel, Nationwide

Instagram, Bloomberg, Walmart, Soundcloud, Tesla, UberEATS, Skype, Tencent QQ, Discord

FreshDirect, Olo, The World Bank, Insightly, Alaska Airlines, Vanderlande, Evolve, Storyo

Strudel, BitPoint Wallet, Daily Nanny, Regelneef, Dwitch,Tripist, Hoppin

Alibaba (Xianyu), Hamilton Musical, Google Ads, Google Greentea, Tencent QQ, Reflecty

Conclusion

The main objective of the study has been to report the advantages and disadvantages of several cross-platform frameworks designed for mobile development (iOS and Android) as well as to list possible ways to improve the efficiency of native development.

Current native development can be improved by utilizing some new tools and techniques. Unfortunately code sharing directly between Kotlin and Swift in not yet possible, but it is possible to write code for both platforms using a single codebase. This can be done through C++, specifically with a cross-platform library such as Djinni (by Dropbox) or Boden. Code is compiled from C++ to native machine code for Android and iOS. Another way to boost development efficiency is to implement reactive programming libraries, such as RxKotlin and RxSwift. Using these libraries some code become very similar when shown side-by-side. This can improve readability and thus maintainability of the native code in both codebases.

For a smaller company, supporting and maintaining 3 codebases introduces additional costs before switching over completely from native to cross-platform. Furthermore, when new native APIs are released, there is a gap in time where you would have to wait until it arrives to the cross-platform framework. From the findings of this study it seems the advantages of cross-platform far outweigh the disadvantages and would be worthwhile to invest in.

The verdict: React Native or Flutter

As such, I would recommend either React Native or Flutter, as these are the most popular and most performant frameworks with React Native being the first option given the matureness of the framework and Flutter coming in as the second choice due to being relatively new yet extremely popular due to compiling to native machine code.

It is, however, important to keep in mind that these frameworks are under active development and can change significantly in the future.