it seems ridiculous that we have to embed an entire browser, meant for internet web browsing, just to create a cross-platform UI with moderate ease.
Why are native or semi-native UI frameworks lagging so far behind? am I wrong in thinking this? are there easier, declarative frameworks for creating semi-native UIs on desktop that don’t look like windows 1998?
Ha! I’m partially looking at this issue in my bachelor’s thesis.
It’s not at all necessary to embed a browser, but it’s really easy to transfer your web app to a “near native” experience with stuff like electron, ionic, cordova, react native or whatever other web stuff is out there. The issue is mostly that native APIs are complicated and relying on web views or just providing your own “browser” is a relatively easy approach.
Stuff like Flutter, Xamarin or .NET MAUI compile depending on the platform to native or are interpreted by a runtime. There’s a study I use that compares Flutter to React Native, native Java and Ionic on Android and finds that unsurprisingly the native implementation is best, but is closely followed by Flutter (with a few hiccups), with the remainder being significantly slower.
The thing is. I don’t think these compiled frameworks lag behind in any way. But when you have a dev team, that’s competent in web development, you won’t make them learn C#, Xaml, Dart or C++, just to get native API access - you’ll just let a framework handle that for you because it’s cheaper and easier.
Edit: To add some further reading. This paper and this one explore the different approaches out there and suggest which one might be “the best”. I don’t feel like they’re good papers, but there’s almost no other write up of cross-platform dev approaches out there.
Edit2: I also believe that the approach “we are web devs that want access to native APIs” may be turned around in the future, since Flutter and now also .NET offer ways to deploy cross-platforn apps as web apps. I’ll get back to writing the thesis now and stop editing.
https://slint.dev/ has gotten there, IMO. They’re working on a python binding and even to compile to android apps.
The real question is how we got any portable solution to this problem in the first place.
To me problems are fundamentally economic and political, not technical. For example, the unique circumstances that led to a portable web standard involved multiple major interventions against Microsoft by antitrust regulators (in 2001, 2006, 2009, 2013, etc). The other tech giants were happy to go along with this as a way to break microsoft’s monopoly. Very soon after, Google and Apple put the walls straight back up with mobile apps.
If you go back before HTML, OS research was progressing swiftly towards portable, high-level networked GUI technology via stuff like smalltalk. Unfortunately all of the money was mysteriously pulled from those research groups after Apple and Microsoft stole all the smalltalk research and turned it into a crude walled garden of GUI apps, then started printing money faster than the US Mint.
Whenever you see progress towards portable solutions, such as Xamarin and open source C#, React Native, or even Flutter, it is usually being funded by a company that lost a platform war and is now scrambling to build some awkward metaplatform on top of everyone else’s stuff. It never really works.
One exception is webassembly, which was basically forced into existence against everyone’s will by some ingenious troublemakers at Mozilla. That’s a whole other story though!
You mean like qt/qml? Due mind that even with those ui toolkits you will need to ship ‘some’ library. In case of QT it is not minimal at all. GTK can be more minimal but it still is significant.
Also there is tauri. Which doesn’t ship a browser, but uses the platform native we view and is compiled while still having an amazing dev experience.