When I was a student I had to make quite a few Qt application with C++ (for Linux). However, I bring the food on the table doing web (recently only the backend). During that time, the languages for web were something like Python - concise, convenient in terms of ecosystem and distribution, but bloated in terms of memory consumption. "Hello World in Java almost doesn't hang" he-he. Anyway, my first thought when I found Rust I dreamed to make a GUI application.

Unfortunately, I had the expectation that it should be as simple as making an HTML page. My failure to find a library or a framework to make GUI application made me learn a lot about how GUI works. I realized that making GUI for browser and for desktop are quite different problems. Browser makes easy what's difficult having a desktop oriented GUI framework - text rendering. However, the situation is fair the other around. GUI framework makes easy what's difficult in a browser - drawing arbitrary shapes. As a result, a web-frontend programmer struggles to figure out how to write some text having something like Qt, a GUI programmer tries to find the API to the bitmap in a browser.

It's fair noticed in the previous comments that a GUI framework brings a lot. That's because the problem is complex:

1. Create a window

2. Communicate with the window compositor (you do in WinAPI too btw). How to access the system tray and the child window.

3. Communicate with the operating system.

4. Handle the user input. Callback vs event streams. The user has 4 keyboards for some reason.

5. Rendering. Subpixels, shapes, different DPI. The user has 6 monitors.

6. Text rendering.

7. Widgets. Where probably the most difficult part is to make a textbox, because it involves the solutions of all previous steps.

The steps above touch only the visual part. There's also audio, accessibility, somebody wants the GUI framework to solve the networking.

After all of this research, I picked simply SDL for my project.

1. It's easy to compile.

2. It's small.

3. It relies on the subjectively common dependencies.

4. It's fairly straightforward to upgrade. Given that, you have to create a lot from scratch the part with updating is smaller comparing to a Qt-based solution.

5. It has batteries. My favorite is SDL_ttf which allowed me recently to implement selection of the text which is quite a bit through towards a textbox.

Having a project on SDL requires a lot of knowledge, but not a lot of code.