RE:

There are some subtle architectural differences between Flutter and React Native.

Flutter compiles down to native code, so it's much more akin to a game engine like Unreal or Unity where you ship everything with the app. This shows in its performance.

React Native on the other hand ships with a JavaScript runtime and bridges to platform code. This is much more akin to how Phonegap, NativeScript, or even your browser work. React Native is changing this, but I am not familiar with all of the details beyond knowing that they are trying to remove the bottleneck of the bridge. Deep dive here

Reasons to choose Flutter

  • Performance
  • Design friendly
  • Animations
  • Greenfield development
  • Company lead
  • Language is the code

Performance

Flutter compiles to native code. Unlike most cross-platform solutions there is no bridge (even when making native plugins), which is the top bottleneck for performance. This performance does come at the cost of larger bundle sizes on average. In non-real world tests, Flutter has shown itself to perform very well. Regardless, you can write code that runs well with RN or runs poorly with Flutter.

Design friendly

Flutter has a deep widget library that ranges from low-level to platform level. This means you can build an Android application that looks like it belongs, but if you want to build a completely custom design you can do that as well.

Animations

Animations are built into the core of the framework. Also, Flutter allows you to use Animated images thru Flare.

Greenfield development

This is more personal opinion. If I'm starting a project from scratch, I like flutter because the setup is extremely simple. Even coming from JavaScript. To me, this is because all of the dependencies you need to get up and running are built into the framework.

Company lead

Although flutter is open-source, the majority of the framework development is lead by Google. They have several teams dedicated to Flutter development and developer relations. This is not a knock on RN so much as it is a hat tip to the teams behind Flutter. They regularly survey the community to determine the direction of Flutter and Dart.

Language is the code

There is a very strong coupling between Dart and Flutter. The language is essentially being built for front-end development in the same way that Swift and Swift UI are being tailored towards Apple development. There is a lot of strength in being able to direct a language towards a specific focus. Dart has improved the language several times to accommodate Flutter developers and the language design spec is available on github.com and welcomes contributions.

Developer experience

In my experience of using both, Flutter is faster and less buggy. Let me repeat the in my experience part. Hot reload and hot refresh exist in both, but Flutter has a clear advantage in speed and consistency. It's pretty common to see screens of death starting up "Hello World" examples in React Native. In Flutter, you almost always see them when you have done something wrong. Also, because Dart is strongly typed it appears the errors are a bit more meaningful. You can get static type analysis thru TypeScript (which I love), but dynamic, runtime analysis is where Dart shines.

Reasons to choose React Native

  • Larger community
  • Code push
  • Targets more platforms (currently)
  • Community driven
  • JavaScript ecosystem
  • Brownfield development

Large community

You can't talk about cross-platform anything without mentioning that most solutions are in JavaScript and JavaScript is the largest community by far. React Native being the king of JavaScript cross-platform development drives that point even more.

Code push

If you want to do hot code pushes, it is impossible to do in Flutter and currently there is no intent to add this feature because of security concerns. Because RN uses JavaScript and JavaScript is a dynamic language, RN has great support for this.

More platforms

React Native can currently target every desktop, mobile device, and web. Flutter has some efforts beyond mobile but they are still a ways off.

Community driven

More efforts are community driven in RN, which is a testament to it's popularity. Whether you believe that's a good or bad thing depends on your faith in open source.

JavaScript ecosystem

In most cases every 3rd party (Apollo, Redux, Realm, AppSync) is developed JavaScript first. For some integrations, support hasn't yet reached Flutter.

Brownfield development

The story for Flutter in brownfield development is still in its fledgling state. It was very much built first for greenfield. To my knowledge, RN on the other hand was built specifically for the need of adhoc adding components into existing apps, so it makes sense that they'd have a better story.

People with more experience can chime in further or correct any of these points. I have tried to represent the differences as fairly as possible.

really nice comparisons.

Reply to this…

(5 answers) Take me to the question