← Back

React Native vs Flutter

4 min read
react-nativeflutter

Making a choice between two hybrid app development giants.

React Native and Flutter are two hybrid app development technologies. Both very popular and somewhat similar, they have different characteristics that should be taken into consideration before starting a project with one or another.

Recently I had an inquiry about creating a mobile and web POC (Proof Of Concept) application for already existing core backend service.

Below you will read about what I’ve taken into consideration and at the end what was my decision. :)

#1 Platforms

Both React Native and Flutter can build their code for three platforms mandatory for this PoC - Android, iOS and WEB - from a single codebase. Mobile fundamentals remain essential and pretty much the same - navigation, permissions, storage.

#2 Language

React Native uses JavaScript. Web developers who already write JavaScript for web apps will profit from it instantly.

Flutter is based on Dart programming language. Developers with experience with strongly typed languages, like Java, Kotlin, will be more at home here.

Personally, as I’m primarily web developer with strong JavaScript expertise, writing Flutter code was easy, as I use TypeScript for all my projects, types were not a problem. Also, Flutter offers flutter-hooks package which injects React hooks “type and feel” of code in Flutter.

#3 Performance & DX

Flutter uses ahead-of-time compilation for production builds. Dart code is compiled directly to native machine code (ARM/x64) before the app runs, which is why Flutter apps generally have good performance. React Native uses Hermes engine by default which performs AOT compilation to bytecode (eliminating the need for runtime parsing and JIT compilation that JavaScriptCore used), but it’s not compiling all the way down to native machine code like Flutter does. The bytecode still needs to be interpreted/executed by the Hermes virtual machine.

As I created several apps in both technologies, to be honest most of them straightforward CRUD apps, I never experienced any performance-wise problems with either technology that would make me instantly switch to other one.

DX is a different story. Flutter offers so much out-of-the-box features that you almost don’t need to install anything else. Without complicated development setup and bunch of node packages as in React Native, Flutter is like a breath of fresh air. With Flutter I don’t need to think so much about re-rendering and performance optimization, while in React Native that isn’t always the case.

One big selling point to mention, in Flutter everything is Dart :)

#4 User Interface

Flutter implements its own UI, it uses Material (Google’s Material Design) and Cupertino (Apple’s iOS design) widgets to create visuals inside application. When created they match across all platforms (Android, iOS, WEB), that is a huge advantage, as your design system is therefore a lot easier and maintainable, the UI looks the same on all platforms and on all device versions.

React Native preserves platform look and feel because it uses native platform widgets that match iOS/Android convetions automatically. React Native therefore relies on platform’s UI → lowest common denominator issue & OS updates may change app’s UI.

UI design system for mentioned PoC wasn’t a big question, so I didn’t give too much weight to this.

#5 Community

Both React Native and Flutter have strong corporate backing (Meta, Google), great community support, with vast number of open-source packages and integrations.

Conclusion

Creating apps in Flutter feels more pleasant, and Flutter has a better DX than React Native as it offers out-of-the-box guidances and tooling. If I would starting from zero and have to choose one, it would be Flutter.

Nevertheless, both technologies are excellent, you can’t really go wrong with either option. Choose what you and your team have more experience with.

As what I decided just aligns with the previous sentence. My team and I are primarily web developers with a lot of experience in React building SPAs (Single Page Applications), therefore having smaller learning curve while opting for React Native. Economically speaking, as always, it didn’t make sense to spend time on Flutter education, and also hiring solely Flutter developers was expensive for my company. Therefore, I decided to go with React Native in this case.