DEV Community

Cover image for React Native V/s Ionic V/s Flutter in 2019
Umang Darji for Enappd

Posted on • Updated on • Originally published at

React Native V/s Ionic V/s Flutter in 2019

React Native V/s Ionic V/s Flutter in 2019

Type caption for image (optional)

In this post, we’ll try to compare — Ionic, React Native and Flutter framework. All three technologies allow you to build mobile apps for both iOS and Android. All three are great frameworks because they allow developers to quickly prototype and publish apps on multiple platform with single source code.

The first great thing is — You can publish apps without the need to learn Swift, Objective-C, Java or Kotlin! Instead, you’ll use JavaScript (for React Native, and Ionic) and Dart (for Flutter). Hence you’re able to create native apps for both platforms with one language instead of two — this obviously reduces the learning effort you have to take to build your mobile app by a lot!

Great! So how do these technologies differ, which one is the best choice for your next mobile project? Let’s take a look…

What is Ionic 4?

Ionic Logo

Ionic is a complete open-source SDK for hybrid mobile app development created by Max Lynch, Ben Sperry and Adam Bradley of Drifty Co. in 2013. Ionic provides tools and services for developing hybrid mobile apps using Web technologies like CSS, HTML5, and Sass. Apps can be built with these Web technologies and then distributed through native app stores to be installed on devices by leveraging Cordova.

So, in other words — If you create Native apps in Android, you code in Java. If you create Native apps in iOS, you code in Obj-C or Swift. Both of these are powerful but complex languages. With Cordova (and Ionic) you can write a single piece of code for your app that can run on both iOS and Android (and windows!), that too with the simplicity of HTML, CSS, and JS.

What Is React Native?

React native Logo

React Native is a JavaScript framework for writing real, natively rendering mobile applications for iOS and Android. It’s based on React, Facebook’s JavaScript library for building user interfaces, but instead of targeting the browser, it targets mobile platforms. In other words: web developers can now write mobile applications that look and feel truly “native,” all from the comfort of a JavaScript library that we already know and love. Plus, because most of the code you write can be shared between platforms, React Native makes it easy to simultaneously develop for both Android and iOS.

Similar to React for the Web, React Native applications are written using a mixture of JavaScript and XML markup, known as JSX. Then, under the hood, the React Native “bridge” invokes the native rendering APIs in Objective-C (for iOS) or Java (for Android). Thus, your application will render using real mobile UI components, not webviews, and will look and feel like any other mobile application. React Native also exposes JavaScript interfaces for platform APIs, so your React Native apps can access platform features like the phone camera, or the user’s location.

React Native currently supports both iOS and Android and has the potential to expand to future platforms as well. In this blog, we’ll cover both iOS and Android. The vast majority of the code we write will be cross-platform. And yes: you can really use React Native to build production-ready mobile applications! Some example: Facebook, Palantir, and TaskRabbit are already using it in production for user-facing applications.

What is Flutter?

Flutter Logo

Flutter is Google’s portable UI toolkit for crafting high-quality native experiences for mobile, web and desktop in record time. Flutter works with existing code, is used by developers and organizations around the world, and is free and open source.

Flutter is built with C, C++, Dart, and Skia (a 2D rendering engine). See this architecture diagram for a better picture of the main components.

For developers, Flutter lowers the bar to entry for building mobile apps. It speeds up the development of mobile apps and reduces the cost and complexity of app production across iOS and Android.

For designers, Flutter helps deliver the original design vision, without loss of fidelity or compromises. It also acts as a productive prototyping tool.

What’s the point of comparing these 3 Best Tools for Modern App Development?

When developers (or even non-developers) want to create an app for their startup or business, the first question that pops up in their mind is Which framework is best for app development. The question becomes important from cost, performance and time point-of-view.

We’ve got your back in case you are finding the best tool to develop a new mobile app or revamp existing app. This post tries to solve all your questions regarding best cross-platform app development tools and what to choose and when.

We also want to make one thing clear that what to choose and when always remains subjective and depends on many factors. But this post can help you decide the best framework according to your needs.

Flutter vs. React Native vs. Ionic

Flutter is a software development kit developed by Google by using the Dart programming language. React Native is an SDK developed by Facebook, and the designing of the mobile applications take place JavaScript. Ionic follows a different approach while compared to the other two. With Ionic, you will create a real native app using web app with HTML, JSS, and CSS. The wrapped web content ensures that you can re-use or re-code the code.

Top 11 Attributes to Consider While Selecting the Platforms for Cross-platform Mobile App Development

To decide which one is better for Cross-Platform Mobile App Development lets first define the attributes based on which we will compare all of the above. And, these are:

  • The Language Stack
  • Do not repeat yourself(DRY)
  • Rich pre-styled Component Library
  • Performance
  • User Interface
  • Ecosystem / Third-Party Libraries
  • Market and Community
  • Accessing Native Device Features
  • Supported Platforms
  • Popular Apps
  • Pricing

1. The Language Stack

With this metric, I want to explore which framework utilizes which programming languages and offer what benefits:

React Native: It utilizes JavaScript which is at present one of the most popular, dynamic and high-level programming language. It combines the advantages of JavaScript and React.JS and is backed by Facebook.

The solid side of React Native that makes it best among the other three frameworks in terms of PL is that it allows writing a few components in Swift, Objective-C or Java when developers require them. Utilizing native modules and libraries in React Native applications, you can manage computationally heavy operations like video handling or image editing.

Ionic framework: It uses HTML5, CSS, and JS to develop and run applications, and requires Cordova wrapper to access native platform controllers. Utilizing IONIC, you can also use TypeScript that improves the quality of the code.

Flutter: It utilizes Dart to develop high-quality applications for Android, iOS and the web. Dart is an amazing Programming language that offers plenty of benefits and is based on C/C++ and java. Despite being new, the language is soon expected to take the industry by storm.

Here is how you can rank these frameworks based on the advantages offered by their programming languages:

  1. React Native (React)
  2. Flutter (Dart)
  3. Ionic Framework (Angular)

2. Do not repeat yourself (DRY)

With this metric, I want to explore how much of the code you write can be re-used for both platforms.

Ionic: Awesome re-usability! The “wrapped web app” concept ensures that you can easily re-use your code — you’re just building a wrapped web app in the end. The great component library of adaptive components (i.e. automatically styled for the platform the app runs on) also helps.

Flutter: Also really great to re-use. The widgets it ships with often don’t adapt to the underlying platform, instead you use Material Design on both platforms by default. The Flutter team is providing more and more iOS-styled components though. You can find out on which platform you’re running and manually swap widgets but that’s, of course, a bit more work than required by Ionic. If you need platform-specific re-styling, you can move the position of Flutter on the slider further to the right.

React Native: Also compiles to native defaults but only provides a basic set of components to start with. You have to style most of them on your own, hence more work is required to achieve appropriate styles on both platforms. Generally, code can be re-used though (since you still only use one language and libraries like Redux need no adjustment).

Here is how you can rank these frameworks based on the Code Reusability

  1. Ionic Framework
  2. Flutter
  3. React Native

3. Rich pre-styled Component Library

How easy is it to build beautiful UIs? Do you have to create and style a lot of components (UI elements) on your own or do you have a rich suite of pre-built ones? Are the components adapting to the underlying platform automatically? That’s what this metric is about.

Ionic: Ionic in its core is a big set of pre-built (and pre-styled) components. The compiler/ toolchain which yields a native app is also part of the Ionic package (handled via its CLI) but it utilizes other packages like Cordova or Capacitor. The components provided by Ionic automatically adapt to the platform the app runs on and therefore, Ionic makes the creation of beautiful, native-looking apps a breeze!

Flutter: Flutter also ships with a comprehensive suite of built-in widgets. These mostly use the Material Design, some Cupertino-style (iOS style) widgets exist, too. More and more iOS-styled components are getting added. With all these widgets, you can quickly create nice-looking UIs without doing too much manual styling. Only if you need different looks for different platforms, some effort can be required since the widgets don’t adapt automatically.

React Native: A decent set of built-in components is provided but a lot of them need to be styled by you. And they’re non-adaptive, instead — just as with Flutter — you get alternatives for both operating systems. That requires adjustments in your code, where you have to choose, use and style widgets conditionally.

Here is how you can rank these frameworks based on the pre-styled Component Library

  1. Ionic Framework
  2. Flutter
  3. React Native

4. Performance

This metric is the most important one and speaks for itself — how do the apps made in different frameworks perform from a run-time performance perspective?

React Native: The performance it provides is very similar to native applications as it renders code elements specifically to the native APIs. React additionally allow developers to use native modules written in native languages to write code for complicated operations. However, they can’t be reused across two platforms; their main purpose is to provide higher performance.

Ionic: In terms of performance, Ionic loses the game. Its performance isn’t as similar to React Native or flutter offers since it utilizes web technologies to render an application. This approach significantly decreases the speed. Also, it doesn’t utilize native components and tries to create a native look and feel by using web technologies.

The upside of Ionic is its quick testing process that runs instantly in a browser that streamlines the development process.

Ionic offers a poorer performance among these 3 as it’s a wrapped web app in the end. But this is often misunderstood! “Worse” sounds extremely bad but “worse” doesn’t actually mean “horrible” or even “bad”. Instead, you got worse performance than with the other approaches. In fact, on the devices we got these days, your app will probably run more than smooth! If you only (imaginary!) got 100fps instead of 105fps — would you notice a difference? You wouldn’t, so keep Ionic in your mind for your next app!

Flutter: When compared on the basis of app performance, it is the Flutter that takes the crown over its competitors. Because it has advantages of Dart and there is no JavaScript bridge for starting interactions with the device native components, the speed it offers is amazing.

Here is how you can rank these frameworks based on the performance they offer:

  1. Flutter
  2. React Native
  3. Ionic

5. User Interface

Users judge apps within the first few seconds of usage and that’s why GUI of an app must be engaging while being easy — let’s see what these frameworks offer:

React Native: React Native modules associated with native UI controllers, which gives amazing user experience that is very close to native apps. It additionally utilizes the ReactJS library with extensive UI elements and streamlines the UI development.

Ionic: Ionic UI doesn’t utilize native elements at all and renders everything in HTML and CSS. Then it applies Cordova to give native mobile experience. Angular components that accompany the framework also enable Ionic apps look like the native ones.

Flutter: Flutter provides the best User Interfaces. No doubt Ionic give us cross-platform apps but their efficiency and performance cannot beat Flutter and React Native. They stuck and lack in responsiveness if an app is heavy and more native UI components are used.

Here is how you can rank these frameworks based on the UI they offer:

  1. Flutter
  2. React Native
  3. Ionic

6. Ecosystem / Third-Party Libraries

What does the ecosystem look like? Is it easy to find help (on Stackoverflow etc) and are there enough third-party libraries available to add that one feature your app needs?

Ionic: Ionic uses JavaScript for its logic — and whilst you can use it with any (or no) JavaScript framework, it provides especially great support for Angular. Therefore, you benefit from these ecosystems. And the JavaScript, as well as the Angular ecosystem, is huge! Thousands of threads on Stackoverflow and packages on npm help you solve your problems.

Flutter: Flutter is seeing tremendous growth! You find quite a lot of discussions on Stackoverflow and third-party libraries and packages (on its own platform). Despite being relatively new, it’s already quite mature and has a decent ecosystem.

React Native: It uses JavaScript and React, hence you got those ecosystems available. Additionally, React Native on its own has quite a vibrant ecosystem and community, hence you find many threads on Stackoverflow and a lot of third-party packages that add missing functionalities. A downside is that you often need to rely on the ecosystem (like plugins, starters etc.) since only core features are included in React Native itself. React Native’s ecosystem in not as strong as others, and often keeps changing or the third-party plugins can’t keep pace with changing React Native

Here is how you can rank these frameworks based on the Ecosystem / Third-Party Libraries

  1. Ionic
  2. Flutter
  3. React Native

7. Market and Community

Having a dynamic ecosystem is something worth being thankful for — but it matters how popular is an option? Let’s see:

React Native: React Native is the king when it comes to market and community recognition. The network of its developers is quickly growing and as of now has many experienced React Native Engineers. This makes it easy to kick start a React project. It utilizes an amazingly popular library (React) and the most essential web development language (JavaScript) and provides real native applications. These qualities make it a strong platform and are the reasons behind its fame.

Ionic: It is the second most popular framework after React. It empowers developers to build native mobile apps in the fastest possible way. Ionic has a huge community support, as well as a great marketplace where you can find a lot of starters and templates to jump start any app from Uber to Spotify.

Flutter: Flutter is a new framework for community right now and not very popular. But, it’s intensely advertised by Google that shows they want to make it a major thing in mobile world. Whilst it still has some tingle points, using it is fun and you can go rapidly from idea to prototype to app.

Here is how you can rank these frameworks based on their industry recognition and reliability:

  1. React Native
  2. Ionic
  3. Flutter

8. Accessing Native Device Features

Your mobile apps most likely need access to some native device feature like the camera or GPS. How easy is it to get that access? And how easy is it for relatively new features (e.g. AR APIs provided by Android/ iOS)?

Ionic: Ionic uses Cordova or its own solution, Capacitor, to give you access to native device features. It provides a very decent set of packages to access common native device functionalities like the camera. You can also write your own wrappers around native functionalities and then include them in your code of course. Also, Ionic/Cordova and/or Angular plugins are very stable, and update readily with platform updates.

Flutter: Over the last year, the Flutter team put a lot of effort into providing official packages for some of the most common native device features you need access to. There also is a very vibrant ecosystem and hence you find a package for pretty much any native feature you might want to access. You can also write and connect real native code if you need to.

React Native: Being the most popular solution, you find a rich set of third-party packages as well as some built-in APIs for accessing native platform functionalities. Relying on third-party packages (which you mostly have to do) of course has the disadvantage that the core maintainers of that package might quit, hence the support is not on the same level as it is with Ionic or NativeScript.

Here is how you can rank these frameworks based on the Accessing Native Device Features :

  1. Flutter
  2. React Native
  3. Ionic

9. Supported Platforms

React Native: Android 4.1+ , iOS 8+

Ionic: Android 4.4+ , iOS 8+ , Windows 10

Flutter: Not sure

10. Popular Apps

React Native: Facebook, Instagram, UberEats, Airbnb (they later removed RN from usage. Read More here — Why Airbnb left React Native)

Ionic: JustWatch, Pacifica, Nationwide and many more.

Flutter: Hamilton

11. Pricing

React Native: Completely open-source frameworks. Engineers can utilize this system and their libraries for free.

Flutter: Completely open-source frameworks. Engineers can utilize this system and their libraries for free.

Ionic: It is a free open source framework for developing cross-platform mobile applications. But, the organization offers its Pro Development Environment which is paid. The company guarantees that Ionic Pro accelerates the development process.

Final Words

Which Framework Is Best, When, And Why?

A broad comparison tell us this much

Ionic is popular for its easy learning curve due to web technologies while Flutter requires developers learning Dart to build apps. Also, Ionic is not a preferable choice for intense graphical apps or game development because of wrapper plugins that cause performance issues sometimes. Flutter is new and gradually growing with the support from best developers of Google and the community.

But, let us say that all these frameworks are best at their own. While choosing a framework for your cross-platform app development, you need to analyze many factors like budget, time, application size, platforms, and so on.

Let us know your views on different frameworks via comments below.

Next Steps

Now that you have learnt the major differences between Ionic framework, react native and flutter for mobile app development.

If you need a base to start your next Ionic 4 app, you can make your next awesome app using Ionic 4 Full App

Type caption for image (optional)

If you need a base to start your next React Native app, you can make your next awesome app using React Native Full App

Type caption for image (optional)

If you need a base to start your next Flutter app, you can make your next awesome app using Flutter Full App

Type caption for image (optional)

Top comments (0)