HACKER Q&A
📣 djanowski

React Native or Flutter for a new app in 2023?


App has typical requirements plus some interactions with OS native APIs.

This is a startup so the returns of using a single development platform to target iOS/Android seems unquestionable.


  👤 pritambarhate Accepted Answer ✓
I would say Flutter. Performs much better than React Native.

Upgrading old RN version to new RN version has always been a very painful experience. Flutter in our experience has been easier to upgrade.

Also Flutter has support to call native APIs using platform channels. (https://docs.flutter.dev/platform-integration/platform-chann...)

At my company we have multiple Flutter Apps in production. The experience has been quite good so far. In fact we are converting some of our native projects to Flutter in order to reduce the maintenance burden.


👤 joshuawright11
Purely curious; why not start natively with iOS or Droid (depending on which one your target audience uses more)?

You'd have the easiest native API access and fewer headaches. Once you hit PMF & have proven the idea, add the second platform.

Is there a benefit to launching on both platforms out of the gate? Unless perhaps there are specific React web assets you'd like to reuse to get up and running faster via React native.


👤 jconley
React Native. TypeScript. NestJS backend, NextJS frontend. The ability to easily share code across the full stack is underrated. Of course you need someone that thinks at that high level building it.

👤 brigadier132
Gonna say something controversial, the future of mobile apps is going to be webviews. It's already the case for desktop. iPhones are getting cpus that are close to desktop CPUs from 5 years ago and they can run 3d games.

👤 meitros
React native imo. Expo is terrific and the library ecosystem, while it might feel like it’s one step down from web JavaScript, is still robust enough for what you need since there are more than enough people out there shipping rn apps.

👤 sureglymop
I would use Kotlin multiplatform and Jetpack Compose multiplatform. But mainly because I already know Kotlin. It's definitively nicer than typescript though.

👤 bickeringyokel
Flutter is an awesome developer experience and would probably also make sense for small team that needs to support many platforms. I think I would target flutter if I had to support desktop OS.

React-native would probably be preferable if you are just doing iOS/Android/Web due to the maturity of the ecosystem and wide use in the industry.


👤 winrid
Nothing beats native.

2nd best is what you know.

I'm using egui right now for quickly putting together a native cross platform tool. For a startup, again I'd pick what you know. RN and Flutter will provide similar experiences for most apps. Flutter will perform better with charts etc.


👤 dvh
I really don't see flutter surviving long term. As it matures it will accumulate hard to solve issues and making shiny new thing will be easier. Does Google have track record of maintaining these kind of projects?

👤 hbcondo714
I'm building an app right now in Expo / React Native + Typescript for its Authentication library[1] that allowed me to easily integrate Stripe's web login[2]. Expo apps can also be exported as PWAs via Workbox[3] so you could have your app distributed on the web plus have a native version in the app stores using a single code base.

[1] https://docs.expo.dev/develop/authentication/

[2] https://github.com/hbcondo/revenut-web#-authentication

[3] https://docs.expo.dev/guides/progressive-web-apps/


👤 brokenbyclouds
React Native over flutter all day every day. There's almost nothing you can't do in the react native world when sticking with the managed Expo workflow these days.

After Compose Multiplatform has matured a bit more I'd be seriously considering using that for everything going forward.

https://www.jetbrains.com/lp/compose-multiplatform/


👤 jbirer
I have been developing in React Native since 2019, the ability to quickly create one app for web, one for Ubuntu, one for Windows, one for MacOS while using React functional metholody for me is indispensable. I hate Flutters rendering system and Dart.

👤 WorldMaker
Have you considered MAUI?

I was looking at the newly announced VS Code extension for .NET 8 MAUI development and that piqued my interest again in MAUI. (Also the in-progress performance metrics of the .NET 8 preview using .NET NativeAOT versus classic Mono AOT are fascinating.)

The stuff I've been directly building in the last few years has just been PWA/WebView [Ionic's Capacitor], because web stack is reliable and even more "single development platform", but I've been keeping something of an eye on MAUI in case it grows up into something great. The newly announced VS Code support helps a lot, especially because that gives you a consistent IDE across Windows, Linux, and macOS. (Which can be important if you are targeting iOS because you have to have at least some macOS time, regardless of what you prefer as your main development environment. In this case, VS Code is much more consistent cross-platform than the odd differences between Visual Studio and Visual Studio for Mac, despite the shared brand name of all three.)


👤 mikece
Why not a PWA using Ionic (or similar)? A PWA can be packaged as a hybrid app if your need to access native APIs beyond what PWA supports.

👤 ac130kz
Native

+: Great performance, Compose (with multiplatform) is awesome, you also can write basically anything

-: Cost is at least 2-3x, if you use a lot of system dependent libraries (and you'll probably do), higher skill ceiling and harder learning curve (you'll have to learn everything - 5x of RN or Flutter)

RN

+: Shared web stack is a killer feature, easily pushable code, native look

-: Awful performance, the ecosystem is a bit beaten, lots of plugins are poorly supported

Flutter

+: Time to market is king, performance is fine, huge standard lib, superb libraries for state management, less tiresome to setup proper types than Typescript

-: Some long running issues like the lack of static metaprogramming are nuts, wonky threading, non-native look and feel is still (and will probably be) a thing, library support is okayish, could be better (especially, if google actually cared about basic features like a good http client, for example)


👤 TechBro8615
Interesting timing, since I've just started experimenting with this. I'm a Web/TypeScript developer who wants to create a mobile application which doesn't do too much fancy stuff, but will rely on some esoteric WebView logic (think injected scripts) and possibly a Rust module. I've been reading up on Flutter and React Native, and am currently in the process of the Flutter "Hello World" tutorial. So far I've been really impressed with the docs, but I'm literally on hour two of this experiment.

I'll probably try React native too, but I've been using React for six years and frankly I'm sick of it - I wanted a change of pace, and I feel like React Native is a bit of a crutch for web developers. Sure you can keep using TypeScript and CSS and everything in a WebView, but you end up with a janky application that buckles under the weight of all its abstraction layers. And it seems like a lot of effort just to avoid learning something new.

What I absolutely do not want to do is code the same thing twice, once for Android and once for iOS. So far it seems like Flutter or React Native are the best options. This blog post [0] convinced me to experiment with Flutter first.

[0] https://stackoverflow.blog/2022/10/31/comparing-frameworks-f...


👤 Oras
Been thinking of the same question recently. Appreciate all comments sharing their experience.

For those saying to native, I completely disagree. Going native for the same app running on multiple platforms will face the following issues:

- hard to be consistent.

- hard to get the exact same design especially when using native components.

- release lags and platform specific bugs. Unless you want to block releases for one app waiting for the other app to catchup.

- support effort will double especially if you’re making screenshots and screen recordings.


👤 kcorey
Depends. If it's a hobby, learn both to be more valuable.

If it's for a business? How much money do you have to throw away? Does the app pay for itself, or is it a cost centre? (99.9998% of the time, it's a cost centre.)

You really asked the most boring part of that question. Most of the answers below suggest that the app is defending its territory, etc. Malarkey.

Just like you're not winning the lottery, you're not writing a standalone app that can pay for itself.

Why? Hundreds of thousands of apps exist on each platform right now.

For your app to stand out enough to be successful it needs synergy with something. A web site, a service, a IRL business.../something/.

Tha says to me: do the cheapest possible thing. If you have React devs, use that. If you don't, find the alternative cheapest possible way. Flutter? Maybe. Nocode (like Glideapp, https://www.nocode.tech/category/app-builders)? Maybe.

Pick the fastest/cheapest way to get an app out to validate the concept. Once validated, then you'll have enough information to know what pain points you have, and what solutions you /really/ need.


👤 flax
I've been building a game in Flutter for the last couple of years, and I absolutely love the dev experience. Dart is the best language I've used professionally in 20 years (for reference: Dart, Java, JavaScript, TypeScript, ActionScript3, Kotlin).

I do web stuff for my day job, and I just HATE the javascript/typescript house of cards build system and npm. Flutter's pub is great, and the builds just work.

I chose Flutter because I already liked Dart, and I was building a game to play with my wife, so it had to be cross-platform from the beginning. That was difficult since I don't have any Apple hardware. But I was able to get things going by borrowing hers for a minimal setup then offloading production builds to codemagic.io.

Shameless self-promo: https://MarkMyWordsGame.com


👤 starik36
There are also 2 paths that .NET offers that you might want to consider.

First one is Maui, which is a cross-platform toolkit supporting iOS, Android, Mac, Windows, etc... This generates a native app on each platform. Second path is embedding a Blazor app in a Maui skin, so Electron like.


👤 wiradikusuma
If you don't mind following my approach, I'm writing a book ( https://opinionatedlaunch.com ) for building and launching mobile apps end-to-end. It's for solopreneurs who can code and a small team of up to a dozen devs.

It covers not only the mobile app, but everything else. So, opinionated. There are many ways to make a mobile app and its supporting ecosystem, and it defeats the purpose if I simply explain everything there is and let the reader decide how they want to proceed. Not to mention I will never finish writing that kind of book :)


👤 solarkraft
As a user I tend to prefer React Native apps. Flutter feels distinctly off in some places (more on Android than on iOS) and apps made with it sometimes show serious slowdowns, which the native toolkits tend to not do.

👤 willio58
The fact that Flutter is tied to Google is a huge reason in my eyes to not trust that it will survive long-term.

I agree with others saying native is the way to go.


👤 jamil7
If mobile is integral to this business then go native and launch with whichever platform makes sense first, push as much logic to the server as you can or write some shared Kotlin Multiplatform or Rust components. Otherwise I’d start with a webapp or maybe React Native, Flutter still feels pretty risky to me personally.

👤 kahnix
This might be derailing but I've personally had a lot of success with CapacitorJS + Nativescript, which is a Webview with hooks into native API's for anything you might need access to at a lower level. But out of the list I'd probably pick Flutter, I don't really see Google culling it anytime soon.

👤 theironhammer
What about https://dioxuslabs.com/?

It uses the Rust language for development.

"One codebase, every platform. Dioxus is a React-inspired library for Rust focused on developer experience. Build fast, beautiful, and fully-featured apps for every platform in less time."


👤 swah
Are you going to code it? If its "business app" I'd say RN is great (Expo?). PWA also to consider for some cases. Honestly I wish PWA was a bigger thing. Why do I have to install an big app just to rent a bike, etc.

👤 keb_
For what it's worth, I've actively started to avoid React Native apps due to performance and APK-sizes, especially now that phones become obsolete so quickly.

Haven't had much experience with Flutter apps.


👤 wetwater
I am in a situation right now where I have to deliver on all three platforms. I chose Flutter because I just couldnt do anymore JS.

👤 upmostly
Neither.

The developer experience for both is awful, especially after you've been spoiled to an amazing dev ex from RedwoodJS.


👤 patatino
I worked with both. Honestly, it doesn’t matter. Choose what you like more

👤 moomoo11
Flutter

Dart is a nice language.

Lots of libraries.

Easy to fill in the gaps.

Manageable to bridge native.

Great community.


👤 revskill
Why not web PWA ?