Readit News logoReadit News
Posted by u/lincoln20xx 14 days ago
Ask HN: What toolchains are people using for desktop app development in 2025?
I recently came across a comment [0] here that highlighted the challenges of building native desktop apps with LLMs. The commenter pointed out how scarce training resources have become—few blog posts, tutorials, or open-source projects exist compared to web or mobile development. They also noted that while desktop app development was a solid career path in the 90s, it's now seen as a dead end for most, outside of big players like Microsoft or Adobe.

This got me thinking: My own experience with desktop development dates back to the late 90s using Turbo Pascal 6 in Delphi, and I'm out of the loop on modern practices. With the evolving landscape, I'm curious about what tools and workflows developers are actually using today.

Some questions to spark discussion:

- What programming languages and frameworks are popular for desktop apps? - Are there any go-to IDEs, build tools, or libraries that make development easier? - Do the above answers change if you care about code performance or efficiency (whatever that means to you)? - Is native desktop app development still viable as a career, or are most greenfield projects shifting to web-based alternatives?

I'd love to hear from folks with recent experience—success stories, pitfalls, and recommendations would be great. Thanks in advance for sharing!

[0] https://news.ycombinator.com/item?id=44841291

mg · 14 days ago
Now that Chromium supports the File System Access API on desktop and mobile, I am building every software I need as HTML+JS+CSS.

Before that, handling files in the browser was cumbersome. You had to offer download and upload links for users to manage files. And handling whole directories was impossible.

But now web apps are like native software tools that you can use to edit and manage files on the file system.

And the bonus point is that what you build this way is fully functional on mobile too. Right away, without any changes. At least on Android.

Mars008 · 14 days ago
What about FireFox, does/will it support file system access? I'm not an expert, just thinking this way and don't like Chromium. The idea is to use light web server in application + browser with JS. This makes it easier and more convenient as it can naturally run remote, on microprocessor. Also LLMs are good at generating such UIs.
rpdillon · 14 days ago
This is how I develop all the software that I don't work on professionally. I have a variety of small web servers with various capabilities that I use. The latest is Copy Party, which I learned about from HN a couple of weeks ago. My apps are then single files that know how to write modified copies of themselves back to the server. The server is dumb, it doesn't really know that it's anything other than just a file upload. I then use SyncThing to replicate that folder structure across all my devices so I have offline access by default.
8organicbits · 14 days ago
https://caniuse.com/native-filesystem-api

Looks like Firefox does not support it currently.

lyu07282 · 14 days ago
+1 Another bonus is that it's properly sandboxed, you only give access to the files/directories and other resources it needs.
robertoandred · 14 days ago
Except you lose native document UI features. Especially frustrating in Electron "apps".
jlarocco · 14 days ago
At work we use C#, .Net, and WPF. I've only used it at this company, and I can't say for sure if my dislikes are with WPF, or how our codebase is using it. Overall it's not terrible, except for being proprietary and Windows only.

Outside of work, I'm out in left field using Common Lisp for most of my projects, so I'm not sure how helfpul this is, but...

In the past, I used Qt4 because there was an amazing Common Lisp binding and it worked well on Linux, FreeBSD and OSX. It's increasingly hard to use Qt4 any more, though, and changes in the Qt project made the technique used by the Qt4 bindings impractical for Qt5 or Qt6 - at least that was my understanding when I looked into it.

For newer things I've tried LTK but don't really like the looks of it and I wouldn't say it's "modern". It seems to work across platform well enough, though, and for simple stuff it's okay.

More often than not I'm using a combination of the Slime tools in Emacs in combination with an GLFW/OpenGL window. Often I'll use the inspector to display data and make changes that show up in an OpenGL window, or run some commands in the REPL and pop up an image in an external viewer or load something in a browser. It only works for certain types of applications, and I won't even pretend it's practical for end users, but it works pretty well, and it's flexible as a developer.

I'm curious to see what other people say. It's been a while since I madea full blown GUI application.

MarkSweep · 14 days ago
There are defiantly better and worse ways to use WPF. Personally I dislike it when data binding is done in XAML, because there is no compile time error if you rename a property on the C# side.

When I wrote a WPF app at my last job, I write a micro MVVM framework. Basically just an implement ion of INotifyPropertyChanged on the model side and some extension methods to bind the properties to UI elements. It was as strongly typed as possible in WPF.

stassats · 13 days ago
> changes in the Qt project made the technique used by the Qt4 bindings impractical for Qt5 or Qt6 - at least that was my understanding when I looked into it.

It was hard to do reasonably with qt4 already. The best solution would be to support the C++ ABI natively, but that's never going to happen.

vladdoster · 14 days ago
Flutter is a super compelling framework (https://flutter.dev/multi-platform/desktop), but I’d live in fear of it randomly being sent to the Google graveyard.
x0x0 · 14 days ago
It had layoffs in 2024. And Google has emitted a bunch of words about their support for Flutter, but hasn't taken the most obvious step towards solidifying support: guarantee a minimal spend level on Flutter dev for a decade, either internally or by donating to an external foundation. eg we will spend $x on Flutter until 2036. :shrug: So they've carefully retained the option to cut support at will. Which is their choice, but I recently wasn't comfortable starting a greenfield project in it for that reason.
muzani · 10 days ago
Everyone says this but personally it's been fine for me in 2025. It won't land you a job or funding because people are afraid of it. But if you're going to just build tools, it works.
doawoo · 14 days ago
We shipped a project at work with Flutter recently, specifically using it on embedded Linux, basically a touch screen smart apartment tablet/thermostat combo.

Internally the “UI” team is tiny (basically me, a UI/Designer and one or two other part time engineers) and the productivity is astounding tbh

written-beyond · 14 days ago
Which embedder did you guys end up using, Toyota or flutter-elinux
gaws · 13 days ago
> I’d live in fear of it randomly being sent to the Google graveyard.

Knowing Google, this happening is almost a guarantee. You should consider moving to another framework with a longer shelf life.

mnk47 · 8 days ago
Go is still going strong after 15 years. Dart, the language of Flutter, is 13 years old.
zaphirplane · 14 days ago
I do have to wonder if decoupling dart from flutter would boost flutter. Flutter and typescript, dart is fine but you know most people have another major language with tooling and what not
doawoo · 13 days ago
I am primarily an Elixir engineer so Dart was the exact opposite of what I’m usually working in, that said it’s not hard to get up to speed on Dart conventions- and other team members were able to get up and contributing in a couple weeks
mikewarot · 14 days ago
Lazarus is the open source equivalent to Delphi these days, and for the most part it's awesome. (The documentation, on the other hand... just isn't fit for purpose)

I've been using Visual Studio Code and Github Copilot together, and it seems to work ok. I've not used it heavily, though, as I'm retired.

rcarmo · 11 days ago
Lazarus currently works very poorly on the Mac, alas. Everything from installing to actually building a simple form was broken in various ways.
phba · 11 days ago
Yes, Lazarus + FreePascal is great and imo preferable to Embarcadero Delphi nowadays.
dlachausse · 14 days ago
I've found that you can mostly just use old Delphi books as a starting point for learning Lazarus.
cosmic_cheese · 14 days ago
Still plain old Swift (or when the itch strikes, Objective-C) and AppKit. I don’t really build for platforms other than macOS because I haven’t found toolkits that feel right elsewhere. I would do just about anything for multiplatform AppKit.
1over137 · 14 days ago
AppKit is indeed great. Pity Apple doesn’t give it much love anymore.
dabockster · 7 days ago
I've built stuff in Qt before and it's great, but it's super expensive if you want to use it for proprietary work.
ivm · 13 days ago
One option would be using C# + AppKit on Mac and then WinUI on Windows, while sharing the view model and model layers between platforms with something like MvvmCross.

Here's my attempt from 2021: https://github.com/QotoQot/Octospace

foresto · 14 days ago
Topping my list of GUI toolkit requirements are cross-platform and native look & feel. As far as I know, Qt still beats everything else in these areas on the desktop. It's mostly excellent.

However, I find The Qt Group's commercial licensing (and their tactics as reported by various people on HN) a little scary. If I were to go commercial, I think I would stick with LGPL Qt and link dynamically or give customers my object files for re-linking, because I get the impression that accepting a commercial Qt license could restrict my ability to use open-source Qt elsewhere. I suppose there might be some other way to safely navigate those waters, but from what I've read, The Qt Group has a reputation for making this far from hassle-free. It's not an immediate problem because I currently use Qt only for open-source and personal tools.

I have grown tired of C++, so I've been using Python to drive Qt. The bindings are very good, mirroring the C++ API so closely that I just use the C++ docs when I need to look something up.

I've also been watching for Qt bindings to other compiled languages, mainly for distributing non-Linux GUI apps more simply than Python allows. Such bindings often turn out to expose only Qt Quick, which lacks functionality that I sometimes need, but there are a few that expose Qt Widgets. For example, these Go bindings:

https://github.com/mappu/miqt

I hope we'll eventually see a cross-platform GUI toolkit rivaling Qt in a language more pleasant than C++ (and ideally easier to bind to other languages). The one being developed for internal use by the Zed editor has some promising ideas about how to render native-looking text, which I think is a good start:

https://zed.dev/blog/videogame

https://www.gpui.rs/

pastorhudson · 14 days ago
I’m hopeful that toga will be good for python dev cross platform including iOS and android. I haven’t tried it yet though. https://beeware.org/project/toga/
jenadine · 14 days ago
Gpui is not on crates.io. This is a problem with Rust UI in general that they are not stable and often change API. The only exception here is Slint which seems stable in 1.x for some years.
rixed · 14 days ago
I've been reading these threads litteraly for decades, hopping that someone would finally bring to light a better deal than Qt.

Will come back next year :-(

akkartik · 14 days ago
As someone who loved Turbo Pascal, for the past 3 years I use Lua and LÖVE.

https://akkartik.name/freewheeling

strickinato · 14 days ago
Just chiming in to say that akkartik is doing really interesting stuff and it’s worth diving deep on this site.

<3

akkartik · 14 days ago
Wow, thank you! <3
pull_my_finger · 14 days ago
Are you shipping apps bundled with LÖVE or just expecting users to obtain it and drag the files onto it? I know there are some scripts out there to produce stand-alone apps, but I wish it were more straight forward or that there were a 1st party tool that did it.
akkartik · 14 days ago
Yeah, my install instructions are consistently:

1. Download LÖVE from its website.

2. Download my app (as Lua source code).

It's not going to lead to Instagram-level downloads, but that's not the aim. My goal is to teach people a little at a time to be thoughtful about whom they trust to run code on their devices. Forcing people to take 2 steps hopefully has 2 benefits:

1. You start from day 1 to take baby steps in being mindful of how software is put together for you to use. It's not just a single hermetically sealed box. This part comes from one supplier, this part from another. Both can be modified, and require different skills to modify.

2. You start from day 1 to take baby steps in thinking about whom to trust. Here there are 2 separate projects that would be very hard to collude together. That limits at least the level of malicious stuff I can do.

Summary: I don't want a bunch of people blindly trusting me. I want a few people choosing mindfully to trust me.

nevon · 14 days ago
Last time I wrote any LÖVE games was probably more than 10 years ago, so perhaps this has been lost since then, but from what I recall creating a single executable of your game could be done by just concatenating a zip file of your game to end the of the LÖVE binary.
dlachausse · 14 days ago
Have you looked at Free Pascal and Lazarus? It's an excellent open source and cross-platform implementation of Object Pascal and Delphi.

https://www.lazarus-ide.org/

fuzztester · 11 days ago
Does LÖVE have support for widgets/ controls (such as labels, text boxes, combo boxes, etc.) for building GUI desktop apps, or is it only for 2D graphics? I could not make that out, on a quick look just now at the homepage and the various modules listed there.
akkartik · 11 days ago
There's a GUI library: https://github.com/flamendless/Slab

In general, if you use a minority platform you have to assume it has a tiny minority testing it and so budget for there to be more bugs and so on. LÖVE itself is rock solid, but programs built on it may not be. So I try to minimize the number of layers of libraries I add atop it. So far that has meant I found it easier to just draw my own UI in all my programs.[1] I've only played with Slab a little bit myself.

If you use Slab, please do report bugs. I've done that in the past when I've used it. That's what it takes to make a minority platform more stable.

[1] Drawing all my own UI also keeps my download sizes small. For example, https://akkartik.itch.io/carousel is 400KB. If you take out 4 fonts and the extensive online help, the code itself is only 100KB. By comparison, Slab seems to be almost 1MB of code. But that's just me. I care a lot about being easy to download on slow internet connections, and less code seems more hackable. But I give up some creature comforts, and reasonable people will disagree with me about the value of a UI library.

dazzawazza · 14 days ago
Within game development it's Dear ImGui. https://github.com/ocornut/imgui

Normally with the Windows DX12 backend, sometimes with the SDL+OpenGL backend if you want cross platform support.

Other frameworks are sort of disappearing. C++ all the way although some use it with C#.