I’m primarily a web developer that’s long been interested in native mobile environments and after trying out many of these cross platform frameworks (all the way back to Appcelerator for those who remember!) my conclusion always ends up that they’re almost always a bad idea. The experience is inferior to native, it’s full of compromises to make cross platform work and you’re at the mercy of a company standing between…
True native development is, indeed, much better. But a small team will be hard-pressed for doing good work on both platforms, especially once you start fiddling with more important APIs. Configuration and getting your system to compile things to properly is almost a job in itself. Sigh.
KMM, Flutter, and MAUI are all promising, but with different trade-offs.
So we’re stuck with RN/Expo… At least Expo promises some stability between upgrades, by handling the package compatibility checks for you. Well, when it works.
“Make a progressive web app”: yes, that might be the way to go; provided you can get the users to ‘install’ it on their devices. For some companies that’s not optional due to different pressures (e.g. teachers would expect students to have our app installed on their phones).
Neither of these 2 solutions is that simple. There are trade-offs involved, and each team must compromise where they can/are weaker. All in all, if you MUST do RN, at least Expo saves you a lot of headaches with config/build/compatibility. It’s mediocre, but worlds better than pure RN (at least for me).