Pros: native code is going to be the fastest possible to run and have the smallest dependencies
Cons: have to write all your code 3+ times in different languages, have less time to develop new features and optimize existing code.
Progressive Web App:
Pros: single app, write once runs anywhere, no signing keys, no lock in, can be hosted anywhere, runs on everything
Cons: artificially limited by Apple on iOS, doesn’t have access to deep operating system resources, only what’s exposed through the browser, limited multithreading capabilities
React Native:
Pros: single app, write once, runs anywhere, similar enough to React Web that a lot of developers will have an easy time learning it
Cons: still kinda finnicky, not super easy to make it work and perform well across all platforms, you’ll probably still end up having to write some native code, not actually CSS / React Web so still a bit of a learning curve coming from there
Qt:
Pros: single app, write once, runs anywhere, low level / compiled means that it will be small and performant
Cons: written in C++, harder to find developers for, harder to implement modern out of the box niceties that CSS gives you for free, poor devX compared to react
.NET MAUI (formerly Xamarin):
Pros: single app, write once, runs anywhere, low level / compiled enough to be more performant than most web apps out of the box, well documented
Cons: written in C#, easier to find devs for but not many experts in it specifically, MVVM model is not as pleasant of a devX as React, again no css
Electron:
Pros: single app, write once, runs anywhere, has full access to operating system resources and deep multithreading if needed, can be as simple as web app in a container or as complex as something like VSCode.
Cons: takes up more storage and ram since you’re bundling chromium with your app
Options:
Native app for each platform:
Progressive Web App:
React Native:
Qt:
.NET MAUI (formerly Xamarin):
Electron:
Flutter is quite nice too. Closer to web dev, but still pretty close to native.
Tauri is also a more recent option, which uses the native webview. Not sure if it’s suitable for production yet though.