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

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