I'm currently experimenting with the world of building GUI Based Desktop applications.

I have no prior experience in GUI & interface development (other then some HTML/CSS/JS experience).

However, I have now shifted my interest towards making GUI Based Desktop Applications but was wondering what were the best tools for the job. More specifically, what are the best languages and libraries currently available to build GUI Based Desktop Applications.

Here is a list of criteria (most important to least important):

  1. Cross-platform. This means maintaining one code base (same language & framework) for all platforms (mainly Windows and macOS)
  2. Native code capabilities (OS-specific features, reading and writing to files etc.)
  3. Good looking and customizable UI
  4. Packaging and distribution (ex. for commercial use) is possible. This means once packaged, users can just install the app and run it.
  5. Good Performance and not too resource-intensive
  6. Good docs.

I'd like to point out I'm ready to learn a new language and/or library to achieve this task.


  • 2
    Cross platform and OS-specific features are difficult to combine in one single code base.
    – Alejandro
    Jan 12 at 15:06
  • 1
    What kind of software do you want to develop? A game? A word processor? Jan 13 at 6:05

Best language: I don't think anybody can answer this satisfactorily. Just pick what you are best and most comfortable at. However, I would recommend to pick an object-oriented language for GUI development (particularly if it is going to be a big project).

Best framework: I would highly recommend you take a look at https://www.qt.io/. It's probably the most popular framework for building cross-platform, GUI applications and it's for a good reason. It's written in C++ but it does provide bindings for all popular languages and it's very stable (first release was 26 years ago). I've used it myself many times, documentation is really good and straightforward and it also looks nice (unlike other options like Tkinter where the graphics look very date).


So as performance was mentioned, C++ is the language of choice then. One of the GUI APIs was already mentioned Qt, which seems to be a wery popular GUI API. I personaly not a fan of Qt so will point to the alternative, which is wxWidgets. wxWidgets is cross-platform and open sorce, but other then Qt it´s 100% standard C++ without custom keywords.


You might like https://www.lazarus-ide.org/, which is free, and lets you build nice GUIs by point-and-click. Programming is in Pascal.

Alternatively, there is TKinter, also free, which is more-or-less the default GUI library for the Python language. Although I find it easier to do many manipulations of various kinds of objects in Python I often find that I run into brick walls with this approach. Still, many people find it a congenial environment.

Both of these products will develop software that can be made to work on multiple platforms.

About 'best'. Let me say that my attitude is, there isn't such a thing; there are invariably numerous criteria that apply.

If software cost is one of these then there's nothing better than 'free'. Even for experienced programmers the availability of easy access to many knowledgeable people who can offer tips and advice is extremely important. Without this I could sometimes spend days finding a solution to a problem. Therefore, for any product you consider, check for good sources of advice.


In addition / alternative of Qt, you could also try GTK (used in Gnome) or FLTK or FOX.

If you develop a gaming application, try SFML. Perhaps you want OpenGL support?

Do you care abound sound ? 2D or 3D drawings ?

GTK is usable from C code, from C++ code (with GTKmm), from Ocaml code (with lablgtk), from Python code, etc....

All of Qt and GTK and FLTK and FOX are cross-platform (the same source can be recompiled on Linux, Windows, MacOSX).

Be also aware of X11. You can run X11 servers on Linux, Windows, MacOSX, and these display servers can interact with (near) remote applications. They require a good network bandwidth and a low latency....

Qt and FLTK and FOX are coded in C++. GTK is coded in C. They have bindings to other programming languages. All are somehow open source frameworks. And SWIG could also be helpful (to generate glue code between a library and some interpreter).

In addition of look and feel, you may also care (or not) about internationalization. Do you want or need to adapt your software to French, Russian, Arabic, Japanese, Israeli or Chinese users? You'll then need to translate the messages or menus or GUI labels...

Another possible approach is to make your application a web server (using toolkits like libonion or Wt), perhaps running only locally on localhost, and reusing the user's web browser. That approach reuses your web skills.

There is no single best approach. A lot of factors are involved: do you want your application to run on several screens at once, or (the same process) used by several people (each with its laptop) at once (like chatting applications). etc. Do you want to show videos? Do you want your application to be usable in different countries (by different native speakers: French, US citizens, Germans, Japanese, ...). Do you need to mix on the same display different languages (e.g. Chinese and French)? You probably want to use UTF8 for strings.

Study also for inspiration the source code of open source GUI applications like GNU emacs.

Contact me by email at basile@starynkevitch.net for more.

  • He needs Cross platform.
    – convert
    Jan 12 at 21:15
  • Electron is cross-platform @convert Jan 13 at 13:05
  • My coment refered to your answer, befor it was edited.
    – convert
    Jan 16 at 11:44

Have a look at Electron, is the framework behind:

  • Visual Studio Code
  • Facebook Messenger
  • Twitch
  • Slack
  • Figma
  • etc...

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.