I'm looking to build a social media mobile app (similar in flavor to LinkedIn but for a different use case) and considering various options. With some google search, I found that Flutter is faster than React native, but Flutter has less number of packages available. I didn't use Flutter before.
Recently, Alex mentioned that Facebook has deprecated React native internally inside Meta and is now using only native mobile development for all Meta applications. So, I'm wondering the reason behind this.
What is your eventual goal with the project?
Alex put a ton of thoughts here on the native vs cross-platform debate: Android (Kotlin) vs. React Native
I unfortunately don't know much about Flutter vs. React Native as I've literally never interacted with Flutter before. I've never written React Native code either, but I have helped with big efforts to rip it out of Instagram hehe.
If you're 100% sure you want to do cross-platform, I recommend sticking to your strengths. If you have written JavaScript/TypeScript before, React Native makes more sense. I think Flutter is written in Dart, so if you already have Dart experience somehow, do that. Another angle to consider is your network: If you have a ton of engineering friends who are Flutter masters, that's a great argument to just do Flutter.
How fast are native mobile apps when compared to react native/flutter apps?
This is a hard question as it depends on scale. If you are building a relatively basic CRUD app (i.e. many startups), the performance difference is negligible. If you are FAANG, the difference is huge; it can be up to 1-2 seconds latency delta when loading pages (this is the impact I saw when migrating React Native to native at Instagram). At that scale, that is easily a $50M+ improvement when it comes to revenue (I worked on ads).
Do native mobile apps inherently support some more features (like running ML models on-device?) that react native/flutter apps can't support?
Yes. Anything that's more performance-sensitive and complicated is much better suited for native development. Video is a great example here - There are so many OS-specific gotchas and it's so complicated that doing it in cross-platform is hell.
If you care about performance (like Big Tech) but are doing cross-platform, you have to do native bridging here. Either that or be content with shipping a very messy version (bad latency, more random errors, reliability issues) using the cross-platform video player widget.
Is it preferrable to use react native/flutter until the app reaches a certain scale and then switch to native mobile development?
That's a very, very painful migration. Engineering orgs and companies should make the right call upfront. For example, Robinhood knew from the get-go they wanted to deliver a world-class mobile experience (amazing perf, tight reliability, beautiful animations), so they started off with native and never looked back. However, there are counterexamples - Airbnb famously started off with React Native and then migrated over. However, these top-tier company examples of successful migrations from cross-platform to native are extremely rare. I literally don't know of any other examples besides Airbnb.