Even in a "post-vibe code" era I wouldn't want to create multiple versions of the same app, and none of the "platform-native" GUI toolkits run on everything.
SwiftUI is apple-only, gtk has pretty bad compatibility on non-linux, qt is decent but requires C++ or python, and even so still not much for mobile. Don't even get started on "Windows frameworks", because as I write this sentence they may have left a new one in the ditch.
Flutter may be the closest, but why didn't they go with e.g. Java instead of a new language?
So yeah, if you want a truly universal UI then web is your best bet.
Right. If you want your app to look the same, custom way, ditching what the OS has to offer.
Some developers still believe an operating system has useful UI components and patterns worth adopting. From this thread it's clear that there's plenty who don't. Personally I view that as a regression.
Well, maybe Java's AWT has been correct all this time.
Of course there is value in having "OS-native" buttons, transitions, windows etc. And many parts of GUIs are basically standardized. The problem is all the parts that are not, and have to look the same everywhere.
The OS-component-oriented approach was defensible in the days of desktop only (though personally I think it was a mistake even then), but it's not sustainable now. People want your app on their PC to look and behave like your app on their phone (whichever combination of PC and phone they happen to have), and that's a lot more important to them than having it look and behave like other apps on their PC.
> People want your app on their PC to look and behave like your app on their phone (whichever combination of PC and phone they happen to have), and that's a lot more important to them than having it look and behave like other apps on their PC.
They don't. No one generates GBs of simulation data and create plots on their phones, and this is what "app" I am working on is doing.
Many times I've thought "what kind of idiot would try to use our app on a phone?" only to find one of our execs was doing exactly that, but YMMV I guess.
Well, getting a hardware-accelerated blank buffer onto a screen to render video content is hardly the epitome of graphical user interfaces. VLC has very few and basic UI elements.
Jetbrains is a better example, using Java with Swing which is not a common choice. As seen from my other comment, I do think this is a good direction, but it ain't any more native than Flutter or for what it's worth an Electron app, none of these are "what the OS provide". FYI Jetbrains has to do quite a few platform-specific tweaks to make them better citizens on each platform.
Portable applications is not a recent need. The only requirement is to have a standardize interface and an implementation for each of the platform. Where you put that interface is an engineering skill.
VLC went with QT (which has done all the hard work) for the UI, and their own libraries for the media playing part. Other software like Emacs and sublime has implemented their own UI libraries. Some just ship libraries and others build UI for them.
The issue with Electron is that it brings a whole jungle and a gorilla holding the single banana that the devs actually need. And the dev flung the whole thing at the users. It's like establishing an iron mine, a steel factory and then pollutes the whole region when building a quick stone bridge would do. Because the only thing you know are suspension bridges.
VLC is not the example you're looking for. Written in Qt for desktop and their own libVLC wrapper for mobile. Yes, in the case of VLC, parent comment is right: you clearly see the issue. And a media player is a relatively uncomplicated piece of software, UI wise.
I never thought I'd defend Electron, but I'd rather use the bloated web UI than a vibe coded Qt/GTK version I'm positive will not have seen any human QA.
I have better things to do than spend my time adopting UI for various different systems. If Electron gives me the option to easily create a UI that looks the same everywhere, then I'll pick Electron over anything else any day.
Nowadays there isn't even an excuse anymore, just vibe code it away in native frameworks.