I think React Native solves an organizational bandwidth issue. Building true native applications per platform will always outshine any results you get from React Native, both in performance and capability. However, if you have just a few developers, I think React Native is a practicable compromise.
Companies like Airbnb have the engineering bandwidth to develop bespoke platform specific applications, it's up to you and/or the company you work for to know what compromises can be made.
1. If you truly need all the advantages of native performance and integration, just go native. Yes, you'll need to "write it twice", but you'll find that it's actually easier to hire top notch iOS or Android devs in the first place (in my experience they tend to be partisans) with high productivity.
2. I think the biggest thing that has changed since React Native first came on the scene is that the browser-based cross-platform toolkits, things like the Capacitor framework (and starting with Progressive Web Apps in the first place), have gotten much better, and browser tech now gives loads of access to underlying devices and sensors (accelerometer, cameras, biometrics, etc.) React Native really came out with the idea of "I've got all these web devs, can I make them productive on native mobile?" I think things like Capacitor and their ilk are a much better option for this issue now.
So in my opinion, if you really need native, use the native frameworks, but if your app doesn't need that and you can do cross-platform, use one of the web-view-based cross-platform frameworks.
Evan Bacon does some tweets on it, but it’s one of the most popular libraries when you filter for top 100 apps in almost any category in the App Store.
If you want an active community and a bootstrap repo that is very robust, check out Tamagui (my project) which makes building universal native and web apps a breeze.
This isn't coming from the usual "JavaScript is bad" crowd, but from someone who is generally quite favourable to JavaScript in general (while also recognizing its downsides). Overall, the experience is far from perfect, but I imagine you could make wonderful apps when you get the stack to work.
(In general, if there's one thing I can't stand, it's debugging toolchains and build systems. Extremely boring, frustrating and tedious.)
Libraries have always been a unique problem to React Native. A lot of the time not maintained, and can be low quality too - like half baked re-implementations of existing native components, skipping the whole ‘native’ part
There’s not really another cross platform mobile framework in the same league. Flutter exists, and has its positives, but will never be an amazing experience on iOS. They don’t use native components, and the native components can access OS stuff not accessible by people other than Apple
As React Native matured in the past few years, the community developed improved solutions to common problems, and many older stop-gaps were rendered obsolete. Perhaps that's what you're seeing.
The only major competitor to React Native that I'm aware of is Flutter, but it has several drawbacks that make me hesitate to recommend it.
Part of the reason you see abandoned repos is because the community has adopted libraries like Reanimated, React Native Gesture Handler, and React Navigation, which offer a lot of leverage to implement ambitious animations and native experiences in JS/TS.
React Native is mature enough to build big apps, and the community is active. It's still necessary to reach into Swift/Kotlin to implement some things, but for large apps that's not an unexpected lift. For cross platform JS/TS apps, no alternative offers the code sharing and delivery flexibility advantages of RN. I expect it'll remain relevant due to it's unique advantages and the community library stack will continue to mature.
[1] https://discord.com/blog/android-react-native-framework-upda...
It's the same thing with the Flutter ecosystem. Half of the libraries I use in my existing projects haven't been updated in a year (they were active when I picked them). They still work, but considering Flutter (and Dart) move so fast, it gives me the heebie-jeebies.
If you're comfortable with JS, go for it (React Native). But before you commit, think ahead of the must-have UIUX features for your app and build a PoC. Don't be surprised when you can use built-in/stock camera access in less than an hour, but you need hundreds of hours to make a custom camera screen.
It's a large skillset people want - you need to know Javascript, then probably some HTML and CSS, then the React framework. Enough to get you a job as a React JS programmer - but then you should know React Native as well. Plus, RN does not cover every case, so know the Android ecosystem (Kotlin and Android SDK, plus maybe some Java) and the iOS ecosystem (Swift and iOS SDK, plus maybe some Objective C). Most large companies tend to have a separate Android and iOS app, although not all (Discord is React Native IIRC).
It makes some sense in a startup possibly - have a few RN programmers and have one or two dive into RN and do Android and iOS apps for your product, some of it using your existing codebase. From all I have heard, it does not scale, although maybe companies like Discord make it work for their use case. Once a Series A or series B kicks in, engineering has to stop and look whether they want to continue adding on to this rickety future, or get a small Android and iOS team together and do native apps.
My reasoning for wanting to use React Native is primarily because I think the iOS ecosystem is a real mess right now. SwiftUI is not mature, and UIKit is antiquated compared to the needs of today. If you’re just starting out, the force multiplier you get from RN is almost too difficult to ignore.
1) Even in the last couple years, React Native has gotten much better. The performance gap is not noticeable anymore. In fact, in some cases I think it has been easier get better performance in RN than using native.
2) It does feel like there was a wave where tons of libraries were created and then abandoned. But overall there are lots of libraries which are good and well maintained.
3) Native is still better if you need really tight experiences, but this gap is also closing. Since you can easily drop down to native, this issue shouldn’t be a big deal.
I have heard people recommend Flutter recently, but I have even less knowledge about that than the anecdata I have about React Native.
As someone who has tried most of the options for streaming realtime mobile app, I landed on RN/EXPO for the sole reason of community size and ease of use. Basically everything is possible!
Typical recommendation has been to build MVPs in RN and then switch to native after your raise funds, but strongly advise against it unless the nature of your app demands native implementation. You can stick with RN all the way to FB/Instagram scale!
Recently I started working on an mobile application as a personal project. It involves scraping web pages and generating ebooks from them with an inbuilt reader with visual controls.
I’d never worked with Swift or UIKit previously and I’ve worked professionally with React for a few years so I considered using React Native.
100s of abandoned repos, janky build tooling, a and a weird split with something called expo caused me to avoid React Native altogether and I’ve been happily learning SwiftUI and UIKit.
It’s not the worst thing in the world, but React Native makes your entire app feel kind of janky and clunky. It’s frustrating when something as simple as a push transition looks and works 1000X better with a few lines of SwiftUI.
https://www.jetbrains.com/lp/compose-multiplatform/
I think it's new, and I haven't tried it myself.
If you're just getting started I highly recommend expo. I wrote an article on building a game using it over say unity not too long ago https://parrisneeds.coffee/posts/making-a-game-in-react-nati...
A lot of SaaS providers offer React Native components that are ready to go, even newish startups. The ecosystem feels strong and it's way more economical than writing two separate apps.
You want a primarily information-oriented software, without lots of manipulation/interaction, then go with Webview based solutions (capacitor + react).
You want performant manipulation/interactive software, go native.
https://devblogs.microsoft.com/react-native/2023-09-08-rneu-...
The expo approach to generating the native projects is just better than the OOB react-native stuff which makes upgrades extremely tedious.