76
submitted 3 days ago* (last edited 3 days ago) by onlinepersona@programming.dev to c/programming@programming.dev

Desktop web-apps won. Simply because native UI libraries never evolved past their 90s days. Either the UI is defined in some DSL, that's loaded (or compiled) and then you spend most of the time writing getElement(pathToElement) and wiring it up, or you have to boilerplate create each element and parent.addChild(element).

And wiring it up is also a pain. Send a signal or event, add a listener or slot, or whatever fancy name each framework comes up with, and if you have to modify another element, it means querying for it, or having a singleton, or passing a reference/pointer, or whatever. It's so friggin-old school.

In the meanwhile, the web discovered reactivity, components, declaring the UI and having the logic in the same file, live debugging, tight development loops, and so much more.

Is it just too difficult for native frameworks? Is it a sunken cost issue or fear of breaking backwards compatibility? Why can't native UI development be as easy and approachable as web dev?

Don't get me wrong, I need webdev like a child needs cancer, but I've tried Slint, imGUi, Qt, Gtk, wxWidgets, and more and the experience makes me want to blow my brains out every single time. I dread writing any native GUI that I got desperate enough to try writing a TUI but that's unbelievably worse!

It's gotten so bad, that Tauri and Dioxus are now on the menu. I never wanted to mix web dev into my native applications, but it feels like the abominably anachronistic state of native UI development is just forcing not only me, but anybody who wants to have a good experience writing native UI apps (especially those that are multi-platform), to use a fucking web view! A memory-hogging web view!

top 22 comments
sorted by: hot top controversial new old
[-] baod_rate@programming.dev 70 points 3 days ago

my personal theory is that it's a cultural problem. same reason web apps are such memory hogs. front end web devs, as a culture, do not care about performance, but they really care about developer experience. the opposite is true of systems developers

[-] Swedneck@discuss.tchncs.de 8 points 2 days ago

You know what's funny? I've concluded that godotengine is probably the best option for people who just want to make a graphical program without having to spend more time learning the GUI part than the actual logic, and as a bonus you can use it to build for multiple platforms as well.

[-] OrekiWoof@lemmy.ml 1 points 1 day ago

the layouting is hot garbage, cumbersome

[-] onlinepersona@programming.dev 3 points 1 day ago

I tried and disagree. Godot engine doesn't have reactivity, is difficult to wire up in different languages (I tried rust), is a pain to allow making different components, isn't easy to style, and lacks an ecosystem (no graphs, maps, charts,...) It doesn't even have vertical or horizontal wrapping and there's more that I'm forgetting.

Maybe it is possible, but my experience with it wasn't as smooth as I had hoped. Did you have a better experience with it?

[-] Swedneck@discuss.tchncs.de 1 points 5 hours ago

if you're saying words like "reactivity" and "rust" then yeah, you're so vastly beyond my level of being willing to tolerate annoyance and complexity that godot isn't for you.

I'm talking about people who use python because it's almost possible to understand, for us mortals godot is hilariously much better than any other option. Just click some buttons, write the basic code you're capable of, and press export and you get something that just fucking works! Amazing!

[-] folekaule@lemmy.world 38 points 3 days ago

As a developer who has mostly worked with web, but also dabbled in some native app work: It's not that the web UI frameworks are so much nicer. The native libraries I've used, at least, are actually much nicer to work with. I've worked with Delphi, Java Swing, various Windows frameworks, etc. React and friends are a chaotic mess in comparison and HTML was not designed for app development. You want a button? Here's a div, go ahead and style it. Thanks, let me add 500 npm packages to my project.

No, the main reason I prefer to develop web apps is because they're effortlessly cross-platform and automatically updated and distributed. No maintaining multiple versions. Updates are basically instant and happen across your user base. No code signing or paying to compile code on a Mac. No asking for install permissions on stupidly locked down enterprise workstations. Just deploy and go.

I can count on one hand the number of times I've needed to create a native app due to some restriction like local file access or device access. Most of the time you're just entering values into a database, so that can just be a website. PWAs are a pain to develop but they are much easier to deal with once they're in the wild.

YMMV of course.

[-] MonkderVierte@lemmy.zip 5 points 1 day ago* (last edited 1 day ago)

and HTML was not designed for app development. You want a button? Here's a div, go ahead and style it. Thanks, let me add 500 npm packages to my project.

While i agree with the sentiment, please don't use for . And also please use html form elements for forms; no need to duplicate the browsers' capabilities in worse and brittle.

[-] folekaule@lemmy.world 4 points 1 day ago

Thank you for highlighting that. The example was intended to show the (maybe exaggerated) pathological state of web development and certainly not an example to be followed.

In seriousnes: yes please use a11y friendly markup. It helps your SEO, but more importantly it helps your visitors that use accessibility tools.

It doesn't have to be hard. I use component libraries that abstract it out and adds the necessary aria attributes and semantic markup for me.

As a bonus my web app development is closer to using the rich component libraries I enjoy in desktop apps. Just be aware of the absolute mess of npm packages that come with it.

[-] icerunner_origin@startrek.website 11 points 3 days ago

I recently needed to delete a node_modules directory for a relatively small app. 20 minutes of my life on that shite 💀

[-] ICastFist@programming.dev 5 points 2 days ago

Graphics in computer operating systems are, as a rule of thumb, a nightmare to program. My best experience with that was Delphi/Lazarus, which is a simple drag and drop to build the program window, though being Pascal, it's verbose as fuck.

[-] pelya@lemmy.world 6 points 2 days ago

SDL provides you a framebuffer with 640x480 pixels and 24-bit color, with a delicious pixel-perfect 8x12 monospace font, on every OS and every device, and this is everything you will ever need. Titlebar? Close button? Your app is perfect, it needs no close button. It will be running 24/7 in a fullscreen mode, and the user will be happy! Other apps? Pah! Let them run on a second, smaller monitor!

[-] sus@programming.dev 1 points 2 days ago

But is it better than ncurses?

[-] protogen420 1 points 1 day ago

nothing is, ncurses is a gift from god

[-] qevlarr@lemmy.world 4 points 2 days ago

What didn't you like about imGUI? Just curious

[-] onlinepersona@programming.dev 2 points 1 day ago

Maybe I used it the wrong way, but it had to pass down the UI and state object into every method that wanted to draw or update anything. It felt like it required a singleton or some other global object. Basically, that shared global state felt like a really great way to introduce bugs.

And for battery-powered applications, recalculating every single thing every time feels like a battery-hog. But that's a problem with immediate mode in general, not imGUI itself. Maybe there's ways to reduce framerate or introductle conditional rendering, but that would go counter to immediate mode.

[-] tal@lemmy.today 15 points 3 days ago* (last edited 3 days ago)

I'm pretty sure that most developers that use web UIs do so for portability.

There are non-Web-based cross-platform GUI toolkits, like Java's Swing.

As to why cross-platform desktop toolkits haven't really caught on...I'd say that it's because there are things that you can't really abstract all that well. There are ways that a well-written MacOS app should function, ways that a well-written Windows app should function, ways that a well-written GTK app should function, and so forth.

EDIT:

I dread writing any native GUI that I got desperate enough to try writing a TUI but that’s unbelievably worse!

Honestly, the same is true of TUIs, too. Like, MS-DOS/Windows TUI conventions and Unix TUI conventions aren't really the same. Like, in a typical Unix TUI program, I expect "q" probably quits. At text prompts, I expect that I probably have readline support and likely the vi/emacs key support there. It probably defaults to white-on-black. In an MS-DOS TUI program, Escape probably exits, and I'm probably using white-on-blue. I'm probably using Code Page 437 box-drawing characters.

EDIT2: ncdu on Unix:

WordPerfect for DOS:

[-] brian@programming.dev 3 points 2 days ago

I wish the desktop react native renderers took off. I definitely do prefer the react style of colocating everything + reactive state, and being able to swap different renderers for actually native feel doesn't really seem like a goal for any maintained projects anymore. on that note, you could write your tui in react with ink or opentui if you want to go that route

dioxus does have a native renderer (in the not webview sense, it still draws it's own components, but most of the options do). if you're looking at rust already, iced seems pretty close to react style, and has a decent number of things written in it already. relm4 is a different style rust framework for gtk that you might like as well.

again not native appearance, but avalonia funcui can be pretty close to the react feel too if you're open to f#

[-] graynk@discuss.tchncs.de 9 points 3 days ago* (last edited 1 day ago)

I usually reach for JavaFX because I know it well (or Fyne if the app is very simple), but these days I'd start with Avalonia first. But that's for a very generous definition of "native" basically meaning "not web"

[-] eager_eagle@lemmy.world 5 points 3 days ago* (last edited 3 days ago)

I feel you. I don't particularly like any frontend work, but desktop frameworks can go to hell. No wonder why electron apps took off in the last decade, despite all its problems.

[-] CorneliusTalmadge@lemmy.world 5 points 3 days ago

I share your frustration, so I am also interested in seeing some responses here.

The closest I have got is trying out flutter.

[-] TheMightyCat@ani.social 4 points 3 days ago

I had my own library for UI that tried to have a element model, but it was bloated and didn't scale well. Now im drawing everything via vulkan compute shaders and its fast and looks great.

I think the philosophy needs to switch from elements back to pixels, atleast that is what worked for me.

i dare to say its as easy as webdev

snippet from my game:

DrawMenuButton(buf, btnExit, "Exit to title", exitHover, exitHover && window.mouseLeftHeld, false, font, topFontPx, exitCol);
DrawMenuButton(buf, btnSave, "Save changes", saveHover, saveHover && window.mouseLeftHeld, false, font, topFontPx, saveCol);
PushPanel(buf, titleRect, panelBgColor, 6.0f * s);
PushBorder(buf, titleRect, borderColor, 6.0f * s, 1.5f * s);
DrawText(buf, "OPTIONS", titleRect.x + titleRect.w * 0.5f, titleRect.y + titleRect.h * 0.5f + topFontPx * 0.32f, font, topFontPx, textUnfocusedColor, TextAlign::Center);

this is in the draw function, and along with the other code produces this menu:

[-] UFODivebomb@programming.dev 4 points 3 days ago

Mac UI development was the nicest last i tried. Even that has a slow dev loop compared to Web.

I did ok with GTK plus a nicely fixtured launcher. Cut the cycle time down to dozens of seconds. But still... Meh.

this post was submitted on 09 May 2026
76 points (100.0% liked)

Programming

26895 readers
235 users here now

Welcome to the main community in programming.dev! Feel free to post anything relating to programming here!

Cross posting is strongly encouraged in the instance. If you feel your post or another person's post makes sense in another community cross post into it.

Hope you enjoy the instance!

Rules

Rules

  • Follow the programming.dev instance rules
  • Keep content related to programming in some way
  • If you're posting long videos try to add in some form of tldr for those who don't want to watch videos

Wormhole

Follow the wormhole through a path of communities !webdev@programming.dev



founded 2 years ago
MODERATORS