Because I was recently working in app developement, I have decided to make a short list of popular GUI frameworks, with some additional information added, best practices, etc.
Electron.js
Used by: Discord, Balena-Etcher, Figma, Slack, Skype, VS Code, MongoDB Compass, Github Desktop, MS Teams Language: Javascript/Typescript (Node.js) Website: https://www.electronjs.org/ License: MIT Comment: You basically design an web application (in React or plain HTML/CSS/JS) which is then bundled into an app rendered by packaged chromium
Popular, but also controversial GUI framework for Node.js. It allows you a big flexibility, because you can do many things just like in a webdev (like working with WebGL, Canvas, popup windows - alert
, confirm
, etc.).
It has also large community and support, because It is used by some of the tech giants (Discord, Microsoft), but because It basically bundles a whole chromium inside, it takes a lot of system resources and also unnecessarily big for small apps.
Overall this frameworks is great for developing a large app where you are focused on good community support.
Tauri
Used by: https://github.com/tauri-apps/awesome-tauri#applications Language: Rust, Javascript/Typescript (Node.js) Website: https://tauri.app/ License: MIT Comment: Same as electron.js, but It already uses systems default browser so It doesn’t take up additional space, also highly optimized
An alternative for electron apps. It works the same way as electron (bundling a web browser into app) but it uses systems default browser (doesn’t take extra space). Whole frameworks is in Rust and poses like a successor to electron.
Overall this framework is great for developing small apps in electron-like enviroment.
Sciter
Used by: TeamViewer, avast, Bitdefender, samsung, HP, ESET Language: C/C++ Website: https://sciter.com/ License: https://sciter.com/prices/ Comment: Also utilizes web built into desktop app, but much more lightweight than electron and tauri
If you don’t want to work in NodeJS enviroment but in something more low-level, you can use sciter framework, which allows you developing web app inside a desktop app container which runs on C/C++
Overall this framework is highly efficient and interesting alternative to Qt and wxWidgets
Tkinter
Used by: https://github.com/Miraj50/Awesome-Tkinter-Apps (I did not manage to find any companies who use tkinter for their apps) Language: Python Website: https://docs.python.org/3/library/tkinter.html License: BSD Comment: This library is mainly used for small open-source apps that do not require to have slick GUI, I do not recommend using it for anything really big
Natively installed in python, lightweight framework. I really recommend to not use it for any big apps, because after some elements it just becomes too disorganised to handle and also this framework is not really made for any big developement.
NOTE: If you want more modern UI, I recommend using customtkinter
package (https://github.com/TomSchimansky/CustomTkinter).
Qt
Used by: KDE Plasma, Adobe, AMD Radeon Software, Autodesk EAGLE, Krita, Source 2, Telegram, Oracle VM VirtualBox, Wireshark, and even more! Language: C/C++, Python (PyQt) Website: https://www.qt.io/ License: https://doc.qt.io/qt-6/licensing.html Comment: Widely used C/C++ framework, lightweight and with good community and support. Many OSes utilizes this framework for their system apps.
Cross-platform framework for C/C++ with wide support. Developed in 1995, but is still a big player in app developement. It also has its own IDE called Qt creator.
wxWidgets
Used by: FileZilla Language: C/C++, Python (wxPython), Ruby (wxruby), Lua (wxlua), Perl (wxPerl) Website: https://www.wxwidgets.org/ License: wxWindows Library License (similar to L-GPL) Comment: Also widely used C/C++ application developement framework with a lot of bindings.
Cross-platform framework for C/C++, also with wide support and big community, developed in 1992.
Of Course there are more frameworks That I did not cover in this article, but I hope this small overview helps you in choosing the right framework for your app.