If so, apart from Electron, what framework are you using? I'm taking a look at Qt but it seems to have a steep learning curve. Lazarus (https://www.lazarus-ide.org/) is also an alternative but its language doesn't really appeal to me.
Came across this question very late, but it's highly relevant for my project these days. I wrote my Mac application using FLTK. It's a very easy and extreme fast C++ GUI framework, but the application screams "I'm not native" in your face. That's the reason why I'm considering to switch to Qt or wxWidgets for version 2.0.
I've been looking into flutter lately. I wish it was more mature.
Is Flutter a good choice for a desktop application? I can't find an example application. And I'm not very keen to use Dart for my projects, especially as some of them process a lot of data.
That is a valid concern I think. I don't know whether flutter would be a good fit for processing a large amount of data, I don't know how it would perform. But they are definitely working to make it a viable option for desktop apps. Their target is now mobile, web, and desktop as stated on the project's home page. If I'm not mistaken they are using GLFW on the desktop, it should be quite performant. https://github.com/google/flutter-desktop-embedding
I used to build apps with Qt professionally for several years, and it's a great framework to work with. Its API is very well-designed and well-documented for the most part, and it's possible to achieve highly polished UIs, native controls or not.
(Someone mentioned wxWidgets, which I tried out for one project in 2004 and it seemed out of date already then, so I don't even want to think about what it would be like to use in 2018. Qt seemed like a clear winner out of these two.)
And unless they've changed something, the licensing should not be a problem. In 2014, I worked on a commercially released application built with the open-source version of Qt.
And yet, I chose Electron for my most recent project.
The main reason was that Qt is getting old and seems to be losing in relevance these days, and I'm not sure how well it's kept up with recent developments in the Windows and Mac worlds. I was also worried about the community not being very active any more and being able to provide timely support.
One of the main pain points back in 2014 was getting the build configuration right on Windows. Setting up MinGW, gcc and linker etc was a big hassle. In general, it felt like Qt is based on many old APIs that MS is keen to move away from. Build configuration hassles in general is a strong motivation to move away from C++ for me.
So, to summarise, 10 years ago, I would have recommended Qt without hesitation. These days, it's not so clear cut any more. Qt might still be a good choice, and I did seriously consider it for my new project, but was also very curious about Electron and the ability to use modern web tech like TypeScript, RxJS etc, so I took the plunge. I'm still not convinced it was the right choice, but time will tell.
These are interesting points, I wonder however if the hassle to get a Windows build doesn't pay off for its improved performance when compared to Electron. In my experience, Electron apps really lack a native feel and are known for consuming too much RAM also it has a bigger installer, hasn't it?
I would say it depends on your use case. Performance and native look and feel (what does that even mean these days?) were not priorities for my application. And only other developers care about the size of installers. ;)
If you already have some C++ experience though, and the points you raise are important for your use case, Qt sounds like a great choice. But if you first have to learn C++ as well, prepare for a substantial time investment.
My choice of Electron was partly motivated by curiosity after all.
I was with Delphi for years, Lazarus was interesting unfortunately it's 32bit only on MAC so there is no way to go. I think the Electron is the only solution today when it comes to community/support.
I am. I'm using Java and JavaFX. Stay away from it. I also tried Electron and abandoned. I used to use Qt back in the day (when I was a KDE developer... heck, I think I still have my @kde.org email address).
I have a long list of reasons why JavaFX is terrible. One day, it'll be a blog post. I can share my notes if you want.
Regarding Electron, there's only one reason: JavaScript. Even using another language that compiles to it to avoid such a horrible programming language, you are still stuck with a horrible way of doing multi-threading. If your app resembles a web site, you might be OK, but if it has a lot of background threads doing lots of work, you might also run into lot's of trouble.
If I had to start over, I would use .Net for Windows, which is my number one customer. Then I would build a Swift solution for Mac OS. Grass-greener and all of that might be deceiving me from the problems in that approach. There's only one way to know.
What made you go with JavaFX to begin with? I thought pretty much everybody but Jetbrains gave up on desktop Java 15 years ago!
Lazarus and Pharo are my two favorite options. Both are way less bloat than Electron and reasonably quick in terms of development time.
How is it like to develop with them? Can you share any app you've written using one or another?
Other than what I build during my Elixir-teaching screencasts, I try to keep my apps to myself.
Lazarus is a rapid application development framework. It's a stable, powerful dev environment and far more flexible than Electron. Pharo is a modern Smalltalk! If you've never used Smalltalk, it will be a fantastic learning experience that changes how you think about programming.
Looking at Pharo's website it is not clear what it is supposed to be. Is it also a framework to develop GUI?
It is a Smalltalk environment. It's hard to say if it's a framework for developing a GUI or not. That really depends on how you look at it.
It doesn't fit cleanly into any category you've seen before, but it cetainly can be used to make powerful cross-platform GUIs.
To clarify, you won't be writing a bunch of code and text, compiling it and then running it. You'll be starting with a GUI image that's working, and then editing things and making changes to the image as it's running. As you add functionality, you gradually morph it into the application want and then you strip away the tools for editing and introspection and ship the smaller image as your finished app.
The special thing about Smalltalk is the environment and the way of developing more than the syntax of the language itself. It's actually the environment where GUIs were originally developed (along with OO and other innovations).
Don't go with Pharo if you're not up for dealing with a new (but actually really old) paradigm.
Me! I've been building an app in C# WinForms that several people use on MacOS or Linux. You can run WinForms under Wineskin or Mono but it's slow and buggy, and the wrappers are 500mb+.
I'm looking at migrating to an OpenGL-based UI (maybe a library, maybe scratchwritten) actually. That way the actual windowing can be done via Qt# or Gtk# or whatever with minimal work, and the UI can have fancy graphics.
OpenGL runs everywhere.
I was eyeballing with alternatives for a while, Qt seems attractive.
I used to do wxWidgets in the past, was nice, but used some native components, which made the dispatched events platform-dependent. That was cumbersome.
Note: it seems with Qt you can use QML to build interfaces (http://doc.qt.io/qt-5/qtqml-documents-topic.html), and even use JS with it (http://doc.qt.io/qt-5/qtqml-javascript-expressions.html).
Qt does seem attractive. I however have a hard time understanding the licensing situation, if it's OK to distribute commercial apps without having to buy a license.
Thanks for pointing out!
From https://www1.qt.io/faq/#_Toc_3, section 3.5 and 3.7 tell that as long you only use the LGPL libs and follow a few other requirements (like dynamic linking), it's fine to use in commercial app. But it seems certain libs are under GPL, which is not fine for close-source distribution. It depends if you need those libs I guess.
Commercial starts from ~$450 per month per dev... pricey (for us).
wxWidgets is still not a bad choice :)
I'm using wxWidgets for my app "Coollector Movie Database". If I had to make a choice today, I think I'd choose wxWidgets again and again. You have very little to change between Windows and Mac versions, and in my opinion the framework is very well designed. I particularly like that it uses native controls and that there isn't any license issue (contrary to QT).
@Coollector
Did you try Qt , i have allot experience with Qt .
But now because the license issue which it not clear what is GPL and What is LGPL and what is allowed and what not im thinking about using wxWidgets Although wxWidgets is also LGPL right?
I've chosen wxWidgets over Qt many years ago because of the licensing issues, and because of the native controls approach. I've never developped with Qt, only kept an eye on it but was never tempted to make the switch. WxWidgets is completely free, that's for sure. It's LGPL plus an exception to ensure that developpers never have any problem at all:
"The wxWindows Licence is essentially the L-GPL (Library General Public Licence), with an exception stating that derived works in binary form may be distributed on the user's own terms. This is a solution that satisfies those who wish to produce GPL'ed software using wxWidgets, and also those producing proprietary software."
Another think with Qt as they changed the license from GPL to LGPL and now to LGPL + GPL , they can decide one day to make it GPL again this is big risk for indie developers.
But i must say their Framework is one of the best C++ framework i worked with . work of ART
As someone who has never written a single line of C++, how long would you say to be productive in Qt? Also is there official bindings for let's say Python?
IF YOU relay musty on the Qt modules you can definitely write your app in Qt . they also have great GUI designer and IDE ( if you want to use it ) and the examples and Documentations are very good .
i know at list 2 people that Qt was their entry point to learn C++.
Qt have also Qml script but i never used it
I'm actually downloading/setting Qt right now and I was looking into Qml, it seems "easier". Also, it looks like there are several different ways or libs inside Qt itself to write your app: Widget, Quick, Qml...
Indeed their licensing model is really confusing :/
People have already mentioned Lazarus, Qt, Pharo, and wxWindows. Another one that I've used for various projects is PLT Racket (https://racket-lang.org/). It provides cross platform GUIs written in Scheme, and one click creation of native Windows, Mac, and Linux executables.
The other approach is to examine how much market each platform is likely to give you. If 99% of your market is Windows, develop a native Windows application with the native tooling. If it's 99% Mac, use Apple's tooling. If you can't answer that question, you need to do more data gathering first.
Hey, do you have an example of an app written in Racket?
John Carmack switched his son to it from Unity for learning to write games, and had high praise for it. Hacker News runs in a dialect written over Racket's runtime (since Racket is also a language workbench). The PLT folks a specialized Racket language as their replacement for PowerPoint. I had a case where I needed to read in an XML file from an automated microscope, calculate out a bunch of stuff, and write back a new XML file defining a new experiment on a rather locked down Windows box, so I wrote a little GUI in Racket that did so. It's probably still in use. Code like that never dies...
I used Qt for many years , and it is great c++ Cross Platform framework
the problem is the licensing which is very confusing .
I used python to develop a cross platform desktop app. Not very sleek but gets the work done. I am looking at Ionic framework as an option to migrate to.
What Python framework did you use?
I've used Tkinter.
Did you manage to make it look native-ish? I keep on reading that it's possible that modern tkinter (at least Python 3.5+) looks much better, but I'm yet to come across a good tutorial on that. Any links would be appreciated!
Its a very simple app in regards to UI, just a couple of text inputs for some settings and a text area for a communications log. It was built on Python 2.7 and is used on MacOS and windows 10, both have a native feeling.
It was my first attempt in developing a desktop app and I remember having quite a hard time finding out resources on how to best approach this. Since I didn't use an IDE for designing it, trying to get the grasps of how to make elements appear where you actually want them on a window was a bit of challenge. I used code found mainly in Stackoverflow as an example on how to proceed. No specific links to provide as a suggestion, sorry.
wxPython creates truly native user interfaces. wxPython is wxWidgets for Python. Personally I develop in C++ with wxWidgets.
libui-node (https://github.com/parro-it/libui-node) and proton-native (https://github.com/kusti8/proton-native) are options as well. They both need work but I plan on shipping apps with them at some point.
Before my current project, I was writing desktop software designed to connect and configure hardware devices using primarily https://electronjs.org/ so that I could design the UIs exactly like I wanted them using the tools I was used to. Obviously it isn't for everyone. For embedded devices I primarily designed UIs using OpenGL or SDL at higher levels. This was for the gaming industry, however, and those devices had a completely different set of constraints and requirements than standard desktop software.
Looking forward to hearing more!
-- Jimmy
Using OpenGL to write UIs seems really interesting. Was it cross platform?
Generally yeah, but it was very verbose. We had to target a different range of processors and GPUs across hardware platform revisions.
Though, again, this was for an embedded system where resource constraints were rather critical. :)