Hacker News new | past | comments | ask | show | jobs | submit login
Ask HN: How to choose the desktop platform and tech for desktop app development?
22 points by wayoverthecloud 10 months ago | hide | past | favorite | 41 comments
I am looking to create desktop app for one of my projects(The project is a video-creator app for musicians- https://vinlo.co ). The reason being I feel somethings are just not for the web. It takes a lot of time to perform FFMPEG operations on web. I want users to have a seamless experience and web is limiting in that sense.

I am well-versed in web tech, C++, Python. I have done my research and here's what I arrived at. I would love it if HN people weighed in.

Mac: Users are used to paying for apps. Swift looks good. But very low market share compared to Windows.

Windows: Too many ways of doing things and too much options(C# WPF, Winforms).

Cross-platform(This would be best for me): Electron/Tauri/Wxwidgets/Qt. Electron is a whole browser. Tauri uses the default web view but that means I'll have to configure for every platforms. And also Tauri is not great with documentation. I am weighing between wxwidgets and QT but QT needs a commercial license which is pretty expensive. Wxwidgets is at least native. But looks almost dead?

I would appreciate any personal opinions. Thanks!




I think i would go with Electron in that case.

You get process spawning / IPC access via node and the view layer is easy to implement and change. Especially for 'custom views', which you'll likely want for a fancy/sleek UI. The main downside of Electron imo, the large binary filesize, won't be that important to your target group i guess.


I’d recommend Flutter Desktop if you/your team are already comfortable with React development. Even if you don’t know Dart, it’s easy to pick up, has mature tooling, and Flutter’s UI API is very similar to React and will be comfortable for a lot of devs very quickly.

It also leaves open the possibility of eventually supporting your app on web (with, say, a backend or even WASM doing the FFMPEG stuff). Few desktop UI lots offer this.


If you really are doing this for yourself, Flutter has the best development efficiency and you can use animations and such pretty easily to make a slick product.

But no-one hires Flutter developers at least in the US and Canada. It’s pretty popular in India and China and some other parts, but you’ll struggle if you want to find work doing this, or if you try to hire someone to do it (although the latter wouldn’t be terrible, and you’d be hiring someone who’s choosing a tool for its virtues, not just its market share).

If those considerations bother you, then Electron or something lighter weight like Gluon or Electrino.

The other major alternative is React Native. You should look at that also.

But if this is really just you, Flutter, no contest. Desktop, mobile and even web (although it is not ideal for just a web app, but it would let you offer a web version with minimal extra affort, and it’s improving in this area rapidly).


Qt is a good choice.

I would also consider SDL or Raylib if you don't mind having to code your own UI. It is not that difficult in practice, most music software have their own custom built UI and that gives them a lot more personality than generic stuff, IMO.


> QT needs a commercial license which is pretty expensive

Are you sure about that? Most of Qt for desktop is licensed under LGPL or similarly permissive licenses that don't require you to open source your project or pay licensing fees.

Some specialized components in Qt are GPL/commercial, but those are for things like automotive use.

I use Qt/QML for desktop applications and never had to buy a license.

Check this out[1] and sort by license to see if you're actually using modules that require a commercial license. Chances are you aren't.

[1] https://www.qt.io/product/features


Half-seconded. I wouldn't claim to have fully understood how the Qt licensing model works (and I think it can be different if you do servers, or deliver binaries), but it's definitely worth checking out your exact use case, because I find developing in Qt really good.


There's a cross-platform option that will give your users the best experience but will also be the most amount of work: make a separate - native - UI per platform.

By this I mean put as much of your core logic and functionality as possible into a shared library, and then make a separate Swift/WinForms/whatever codebase for the UI of each native platform you want to target. Each UI app would call into your shared library.

There is a bit of duplicate work in making separate UIs, but the UX is far superior (IMO) and you have the advantage of not needing workarounds or plugins to access platform-specific features.


I think this is the best way for most apps. But in this particular case, the main part of the UI is the preview animation, which by principle needs to look and behave the same on every platform, anyway.


On paper, Compose Multiplatform lets you do that. It's still bumpy.


I do not develop desktop apps professionally. But I have noodled around with a side project in windows. Professionally I work on Android apps, and I found Winforms to be very fun to develop in. I use it very differently from intellij/Android Studio, but I think Visual Studio might be my favorite IDE. So as far as dev experience goes, I think I'd prefer Windows only if it makes business sense. I did spend some time looking into the cross platform options, but didn't end up going that route, so I can't really speak to that. I think you should be able to distribute through the windows store, offer free trials and subscriptions. My project hasn't gotten that far, so I don't know how well that all works. Most windows apps I've bought seem to roll their own licensing solution probably to avoid the app store tax.


I shipped desktop app for all three major OS Linux, Windows and macOS.

Because of the programming choices of Rust for application/backend and Typescript for frontend - Tauri was perfect fit for me.

So far Tauri documentation has been sufficient (and good) for me to achieve what I wanted inside the application. However, platform specific packaging required extra effort because the app required installation of system service/daemon in addition to the frontend app binary - so platform specific pre-install and post-install scripts which setup (or remove on uninstall) those daemon services were not natively supported in Tauri packaging.

You can browse the code here to see what it takes to package and sign installer for various desktop platforms: https://github.com/upvpn/upvpn-app


I have never used it, but I often see Lazarus mentioned on HN as a multi-platform solution. The downside is that it is Delphi / Pascal, but perhaps the lure of cross-platform native apps would make it worth the investment?


My next side project will be a desktop app for Mac and Windows (I do not thing the linux market for the app will be big). I will first try to see how far I get with Fyne which is a kind of cross platform framework in Go. It supports all desktop and mobile platforms. I experimented with it about two years ago and liked it then already.

I dislike to install browser based apps so I prefer not to build those myself either.


If your app is only as complex as what it appears from the website, I imagine it wouldn't be too hard to build multiple apps to do that. From your description I was imagining some kind of nonlinear editor but it seems to be more constrained in functionality.

Might want to do some investigation on your web analytics to see what percentage of your uses are on mac if you're looking to have some justification for making a mac native app.


My main test for a UI framework is if I could solve the hardest 'widget/interaction/perf' problem and if I need to make that myself or need to just tweak it.

For example, because I work on business apps, I need a solid "DataTable". Na dit needs a lot of features to be useful. And need to be fast, so my 1sec queries run in 1sec, not 10secs.

So, look for what is the hardest problems then which UI toolkit solve them.


Flutter is a good option. A developer experience that is second to none (e.g., hot-reload, excellent developer tools, good editor/IDE integration and great documentation). What’s more, it really does make cross-platform a reality (MacOS, Windows, Linux, iOS and Android) from a single code base. Targeting the web is probably its weakest point. But, all in all, Flutter is a viable alternative.


It’s probably a few months away from being production ready but might want to check out electrobun.

It’s like tauri, but instead of rust you write typescript.

https://github.com/blackboardsh/electrobun


I really like Wails (wails.io). I also evaluated Tauri, Electron, pywebview, pyqt, etc.


I have a similar set of requirements. Here are my notes: https://taoofmac.com/space/dev/native


This will sound strange, but try Godot.

15 Apps Created using the Godot: https://www.youtube.com/watch?v=7jJ-3DJN1yI


Why does Qt need a commercial license? I thought it is available under LGPL?


Presumably because they don't actually want to license their project under the GPL.


LGPL doesn’t require them to license their project under GPL, it’s more permissive than you seem to think: https://fluendo.com/en/blog/gpl-vs-lgpl/


Ah, I either didn't see the L or you edited it in after I already started replying. I thought Qt was plain GPL.


LGPL only stipulates that users have the freedom to link against their own version of the LGPL library you're using. You don't have to open source anything if you don't want to.


I'd just write a native Mac app; that's where your users are.


I would keep things simple and make an Electron app, then either bundle ffmpeg or use ffi to call out to it. That'll get you going right away with the performance you need


Electron app, simple? LMAO!!

There are only a few viable routes to go when building a desktop app without pulling out any remaining hair you might have, and as usual HN delivers reems of bad advice to use the worst of the worst.


Electron is the worst for the user, sure, but it's the best for your average HNer who is a web dev.


Net Core and Avalonia UI is another option for cross-platform.

https://avaloniaui.net/Showcase


So I have not done this myself but perhaps look into what game engines have in terms of UI options paired with cross platform support.


At some point, I need to dig into how good a general UI environment I get with Godot. There appears to be something at least usable there.


I personally prefer Qt, but as was discussed elsewhere in this thread, there is definitely some FUD around licensing. You should be able to build your entire app with Qt's LGPL modules, though, which allow you to remain closed source while not paying for Qt.

If you go to the effort of making your app cross-platform, please go ahead and add official Linux support as well. I don't personally have a need for your app, but I'd love to see more apps for the Linux ecosystem that aren't just "we built a FOSS alternative because $SOFTWARE doesn't support Linux".


Jetpack Compose Multiplatform, packaged in a fat JAR. App in Kotlin.


WPF puts everything else to shame.


Take a look at Juce (juce.com)


C# with AvaloniaUI


As a Mac user I hate everything Electron and multi platform with a passion. You can totally feel what was done as a multiplatform app and it weights a ton.

Yet again don’t overinvest time in doing it perfectly the first time because you will never ship.


I significantly prefer the Mac user experience over Windows (it’s bad, but Windows is abominable).

Still, I use Electron apps that UI-wise are fine. Well-known examples include Discord and Slack. They’re big and a bit slow, but they’re fine and I appreciate the uniform user experience when I use those apps on other platforms.

Flutter is just better, provides something close to a native experience, and slick experiences at that (really slick animation is easy) while being an efficient cross-platform development solution (for mobile, also).

But electron etc are a fine choice. The heft of the Javascript ecosystem, if nothing else, is a serious consideration.


Agree. No Electron stuff will be run on my Macs.


As a true multi-platform user I don't have strong feelings if Windows apps, or KDE apps, or Gnome apps are better. I've not much experience with Macs, but it usually also worked out ok.

But yeah. Electron is usually bad, it gets worse if it's just a tiny app that you never interact with (all the problems, plus the RAM, for something that doesn't even need a good UI), and usually only tolerable for actively used foreground apps, if there was a ton of dev investment. Most hobby electron projects suck, if not for the the fact that they at least shipped something.




Consider applying for YC's Spring batch! Applications are open till Feb 11.

Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: