Flutter vs React Native vs Native
The fight that is as old as time.
For startups, everything starts on a clean slate without any legacy framework, this allows technology leaders full anatomy to pick the best tool for the job.
There are probably tons of articles written about this topic, so I won’t reinvent the wheel. I am not going to do a deep dive into things like, which framework has a better performance, how do each of them work differently under the hood. Instead I think I can add more value by providing my own experience and how it worked out for me in the real world.
“And before anything, sorry Xamarin Developers, I am sure more comparison will be available when it gets more market shares.”
I hold this framework close to heart because this was the chosen framework stack I decided to use to build my first startup — DayOne. The reason I chose this was very obvious.
- I am already proficient in JS.
- It is a JS developers market.
- The web platform is on ReactJS, so data flow frameworks like Redux can be shared between both framework (shared and reusability in libraries).
- Over the air updates from Expo.
Moreover in the CI/CD pipeline, React Native works very nicely with Expo which came prepackaged in their managed workflow. And recently with their EAS — Expo Application Service, which includes cloud build and management.
React Native created by Jordan Walke for Facebook has been around for a long time, thus there are tons of libraries to use, tons of eco-system built around it for shipping codes, etc. I also think Typescript is a MUST if you decide to use this framework, going with vanilla JS is just too dangerous.
This would be my weakest framework as I don’t use it extensively. I’ve built prototypes and simple apps with it.
Generally the structure of Flutter is like React Native, in simple, both approached apps building it in a modular component driven design methodology. But of course, that is the superficial way of seeing things as they are vastly different in how they are compiled and work.
The strength of Flutter comes in uniformity.
- Flutter guarantees WYSIWYG because of the way it works under the hood.
- Out performance React Native in ways that might not matters that much.
- You have to learn DART or get a DART engineer.
- There are build pipelines and test systems for DART but not as extensive as React Native because React Native can use JS test pipelines and libraries.
Full disclaimer, I never liked Android Studio and Java, and this article is much more skew towards iOS than android. I will just speak about the native experience on Xcode because I’ve published a few apps from writing in Objective-C to Swift.
I think Apple has gotten their development ecosystem right, though recently Xcode seems pretty bloated, but overall, the developer’s experience feels good.
And with the introduction of SwiftUI in recent years lowered the barrier of entry for developers unfamiliar with iOS development. The experience built by Swift is unmatched, with mobile phones moving 120hz refresh rate, having full control on your CPU threads make all the differences.
A lot of apps that have silky smooth performance, very bespoke branding and interactions are usually built upon Native.
- Silky smooth transition.
- Full control on concurrency thread.
- More resources needed as you need an iOS engineer etc.
- Fat client, just need to rehydrate with data, can do fancy things like caching, or offline/online syncing.
To sum up, here’s the decision tree.
- If your app is more functional and just uses very common user flows.
- If you are not planning to have a complex subscription and payment method on the app (and no 3rd party solutions).
- Please use Typescript if you decide to go this route.
Choose React Native.
- You need some very bespoke UI and the look on both iOS and Android MUST be the same.
- You have a lot more distribution channels — Flutter 2 is going to support a lot more platforms from Cars to Smart TVs.
- You really love Dart or any language Google invented for the sake of it.
- If you want the best experience that is most true to the platform for the users.
- If you need to use the latest most fancy API in the SDK for the platform.
“I believe going React Native is still the best solution if you were a startup and you need fast iteration because after 2 years it doesn’t matter.”
The reasons tech companies create their own framework is for control as well, and they always dress it up as open source projects.
“Product market-fit is king in a startup, not your tech stack.”
I believe going React Native is still the best solution if you are a startup and you need fast iteration because after 2 years it doesn’t matter. In 2 years’ time any features you’ve built in your MVP should now be on v4 or v5 (product version). Your team would have already grown and if you have setup the right processes — pipeline, testing, routing, etc, it is possible to mix systems down the road. If you started off building in React Native and decided to build some parts in Native, both frameworks can exist in the application.
I understand there might be some technology that might be hard to migrate, etc your authentication gateways, or your data structures. But like I’ve mentioned, if there is something so specific — for example you need to use Core Data in iCloud, if there’s such a bespoke use case, then you’ve already narrowed the stack you can choose and use.
What matters more in product building in a startup is iteration and pushing out values for your customers as fast as possible. Product market-fit is king in a startup, not your tech stack.