Hacker Newsnew | past | comments | ask | show | jobs | submitlogin
Short history of all Windows UI frameworks and libraries (irrlicht3d.org)
59 points by st_goliath on Feb 10, 2024 | hide | past | favorite | 47 comments


It's ugly and not cross platform, but WinForms still holds a special place in my heart. So quick and easy to build something good enough for many internal uses.

For everything else, unfortunately, I reach for React, which isn't listed.


100% this.

For all it's "faults", WinForms worked and it was pretty sane for doing desktop apps.

Everything after that ranged from bad to absolute disaster and to prove it are the 9 (!!!) frameworks/libs they released since then.


Using the Godot game engine for GUIs feels reminiscent of a modern WinForms to me, especially since it's all event-based.


This. I don't even really do Windows or Desktop dev anymore, but if I want to make a GUI desktop app, WinForms is still the first thing I reach for. Making a basic window with a few standard UI elements and some modest amount of code in a reasonable language to drive the actions is dead simple. And you can be confident it will continue to work fine for years, decades even.


For someone who’s not a Windows developer this situation is incredibly confusing. I have no idea what is the correct way to make a modern Windows application.

It seems like everything made after 1995 is a deprecated abandonware, and whatever UI they’re building next is going to be dead before they finish implementing it.


Genuinely asking: nowadays, are there desktop UI application beyond the well known ones? Many of the new popular ones (e.g. Slack) basically have an HTML renderer.


The problem is twofold:

App developers want consistent look of their application across various OSes, be it Mac/Win/Linux. This means developing with gtk for linux and winUI for windows is out of the window. Why do app developers want consistent look? because alternatively they would have to create documentation and screenshots for each os separately. And users wouldn't be able to help each other because Mac user would know different interface/look from Linux user.

OS developers, Apple/Microsoft don't have singular look. Microsoft didn't rewrite everything into WinUI settings , and anytime anyone needs to do anything serious they have to go through the win32 settings panels. This lack of OS coherency means that app developers don't feel need to stay consistent with OS, since OS itself is not uniform.


> App developers want consistent look of their application across various OSes, be it Mac/Win/Linux.

No, app developers want to write their code once. A consistent look is just a byproduct of that desire.

I’m also glad you didn’t mention anything about the customer, because ostensibly the app developer is doing this so they can deliver customer value faster, but at the cost of having an application that doesn’t fit into the native operating system. “Consistent look of their application across various OSes” usually means “invent your own custom look and behavior that isn’t standard for any OS”, which means customers have to spend extra time and effort to learn your bespoke UI customs rather than just use the ones they already know from their OS (gives the finger to Visual Studio Code).

The end result is that nobody gets to have an application that looks and feels like their chosen OS, and nobody gets to have a cross-platform application that looks and feels like other cross-platform applications unless they’re from the same vendor (and even then, it can be iffy).

> And users wouldn't be able to help each other because Mac user would know different interface/look from Linux user.

Not really. Customers can handle reasonable variations between software running on different operating systems. They do it today, for applications that work across different operating systems. Even when such an application takes most of its cues from another OS, there’s at least some deference to the native platform design in terms of menu design or control behavior.

What it would mean for the app developer is that they actually have to understand the design systems for the different OSes in order to build a design that can reasonably adapt to Mac/Linux/Windows. That’s why the “one design fits all” approach is so appealing when it comes to look and feel. You don’t have to understand anything. You don’t have to care about the native platform at all. There’s no extra work involved. You do whatever you want, the way you want it, and then throw it over the wall at the customer to deal with.


Agreed, especially about OSes not being consistent themselves. Even Apple dropped the ball with macOS being a mix of old Cocoa, SwiftUI-isms, and iPadOS transplants.

I think third there's also a third reason: flat design. It used to be nearly impossible to make custom UIs look as polished as the native ones with all their complex gradients and pixel-perfect bevelled edges. Now developers can use anything that can render a rectangle.


Microsoft doesn't even seem to care to dogfood outside of using those things for the most basic apps bundled with Windows and those basic apps really show why nobody should use those toolkits.

I have a laptop with a Ryzen 7 4800HS. It's a few years old but it has no business feeling slow. Yet opening the new winUI explorer or notepad shows visible lag in rendering the title/tab bar.

Native gui toolkits with no benefit over using electron, if anything I've seen plenty of electron apps that were more snappy than these. WinUI 3 is a dumpster fire.


I write little desktop apps pretty much every day on Windows to automate some little development task.

I just select WinForms in Visual Studio and use that. Very simple. Can make a pretty complicated GUI app in about 5 mins.


It misses WTL [1], could also include WinUI and Fluent UI [2] and the Windows Ribbon Framework [3].

Until 2024, history shows that Microsoft is the only company who can make a lot of failed or legacy technologies over and over and continue to be a successful business.

[1] https://github.com/Win32-WTL

[2] https://developer.microsoft.com/en-us/fluentui#/

[3] https://learn.microsoft.com/en-us/windows/apps/winui/ and https://learn.microsoft.com/en-us/windows/win32/windowsribbo...


I actually really liked WTL, super lightweight, super fast and modern C++ that removed a lot of the low level C API cruft.


There was the old saying about not using anything with version <= 3.1 from Microsoft.


It wrongfully states that Win32 was the first framework. In fact, Win16 was the first framework. Win32 only appeared in Windows 3.11 in 1993 (also, in the newly released Windows NT as well).


Actually it incorrectly states that Win32 is a framework--it's an API that all frameworks use.

Also the 'Win32' for 3.11 (and 3.1) was a (s)ubset thus named Win32s.


It also says Win32 was released in 1985, so the author probably just meant Windows API.


It's indeed not the absolute first, but it's the 'first' among those that are still in use today and whose compatibility wasn't dropped (you can't run 16 bits software on 64 bits windows without a third party tool).

For better or worse, win32 is still relevant today, and many latter UI layers were wrappers over it (MFC, WTL, WinForms, WxWidgets, SWT [...])

win32 is by far the most enduring set of GUI APIs out there.


In the time spanning from WPF and UWP is when I lost all interest in developing for Windows as a platform.

In particular I was interested in developing for Windows Phone, only to discover that the UI SDKs for them were same in name only and largely incompatible, so devs had to use similar tools to recreate similar UIs independently for desktop and mobile. That discovery also dissuaded me to not develop for Windows Phone either.

Of all the rest in that time, Silverlight was actually the best for rich client apps. I did a performance/capabilities comparison of Silverlight, Adobe AIR, and JavaFX and found Silverlight to be highly capable and performant on common hardware. It then went into a state of becoming discontinued though still used/supported for a good number of years. Netflix used Silverlight for the browser and apparently only stopped supporting it on Sept 13, 2023 though MS says it was unsupported since Oct 2021.


Silverlight UIs delivered via the browser plugin were terrible on the Mac. The look and feel was completely off somehow. Even Flash/Flex was better.

I don’t know if Silverlight was better on Windows, but as a cross-platform solution it never worked as advertised.


Interesting, I had only tested on Windows and Linux. I suppose both MS/Apple were playing the same "worse experience on other platfoms" game, a la iTunes of the day. (Now Apple Music sucks period)


Also worthy of mention ReactNative Windows which wraps around winui with JavaScript, which is widely used by Microsoft both on windows as office, also worth mentioning that FluentUI web is also widely used at Microsoft to build OS apps (copilot as an example) with wrappers of the chromium web view


20 years on, and so much of this still resonates with me: https://www.joelonsoftware.com/2004/06/13/how-microsoft-lost... especially after reading the OP.

Lots of memories reading the OP, some good, some not so good. I still think WPF was really wonderful. It had a steep learning curve but it was so versatile and modern in so many ways. It’s a real shame that Microsoft lost all interest in it when moving on to the far inferior (IMO) UWP. WPF could be used for writing huge and complex apps while UWP never seemed to be good for much more than toy apps in my experience.


I feel the need to note that Apple’s attitude to compatibility was always more nuanced than Joel portrays it in this post: they did actually try to maintain compatibility in classic Mac OS. They weren’t quite as obsessive about it as Microsoft was, and would sometimes deliberately break with the past to improve maintainability of the OS, but it was not in their interest to break apps and they knew it. To this day, there are hacks even in modern macOS to support badly behaving apps.


Apple’s approach to back compatibility was always give a stopgap to bridge generations. The irony is they would undergo heroics to support that back compat across generations (Mac 68k emulator, Classic environment, Rosetta, Rosetta 2) only to unceremoniously dump that work as soon as they could.

Microsoft can be almost religious about back compat to where long standing bugs won’t get fixed lest they break something (or special compatibility shims have to be built in to maintain those bugs for certain apps). You can’t run any Mac OS software from the 1990s on a modern Mac without emulation, but you can still run plenty of Windows software from the same time period as-is on a modern PC.

Of course one can argue which approach makes the most sense and there’s certainly merits to both.


To be honest, Maui evolves xamarin.forms and winui3 is an evolves from winui, uwp and winrt.

That kills half of the entries. Maui/xamforms is not a ui toolkit but an abstraction... So plays in a different league (with e.g. react native for windows which is also maintained by microsoft).

Silverlight and wpf are the original sin here and born in and hyped by the dev division in a time where the Windows division was busy fixing XP and failing on Longhorn.

I would add that the webview2 (since html is definitely a ui toolkit on its own). And when you add Maui then you may also add Blazor.


I expected this to be longer. I wish it was longer. Plus, if you want to be somewhat-complete, theres so many that are missing:

- Chromeffects

- DUI

- Splash (Media Center)

- Splash (Zune)

- Silverlight (Phone)

- Silverlight (C#)

- Silverlight (JavaScript)

If you want to stretch it a little:

- Visual Basic

- Blackbird


So basically use MFC if you care about longevity otherwise good luck.


Oh wow, Irrlicht! I remember very briefly messing around with that in ~2008. Seems like it's still around but the OP left the project[1].

1. https://irrlicht3d.org/impressum.html#:~:text=Irrlicht

I wonder if Blitz BASIC is still going...


Still a used engine, Minetest maintains a fork called IrrlichtMt which is more actively developed. I'm not sure the OG Irrlicht gets a ton of love anymore.


The most important Windows UI framework is missing - Electron


Mentioned in another thread, but the existence of tools like Figma is a side effect of WYSIWYG GUI building becoming so difficult.


I wonder how accurate that is. I heard before that Microsoft’s WYSIWYG (Expression Blend) was shunned by designers who preferred other tools which didn’t output useable code. Maybe Figma is an effect of designers’ preferences? Both might be true I think.


Oh, WinForms. We had some good times in high school and college. One of my fondest projects was learning the Boids algorithm and creating a fish ecosystem.

https://twitter.com/vyrotek/status/1489300258790129666


One thing in common is that to write a GUI application they're all much simpler, faster and more powerful than modern Javascript frameworks. Yeah distribution sucked but I feel we've got a long way to keep up.


You can kind of see the desktop UI train wreck in real time here.

We started with simple stable APIs for a common look and feel. For a while these were evolved and made available in other languages. This was back when native apps were consistent and intuitive and you could… uhh… actually write and ship them without bundling giant runtimes or checking a huge compatibility matrix.

Then around 2012 the train rounds the bend and screeeeech it hits some bad track and starts to derail. UI starts trying to emulate the web, a terrible UI platform, and sane compositional UI libraries and APIs are abandoned in favor of XML soup.

Since this stuff is a trash fire, this is followed by multiple incompatible attempts to replace or fix this. Most of these are abandoned dead ends. Meanwhile we also abandon the incredibly productive point and click WYSIWYG UI builders because apparently people want to write XML puke instead.

Meanwhile the dev community just said fuck it and went to Electron, creating today’s world where a “hello world” app with an OK button is hundreds of megabytes and has to load an entire private copy of a language runtime and rendering engine.

Versions of this comedy of errors have occurred on every other platform, and of course there has been little effort to create a cross platform UI API that’s sane beyond Qt (with its own problems) and dozens of half completed OSS projects.

So enjoy Electron I guess.

There was one sane human being who tried to do this a while ago:

https://github.com/andlabs/libui

It’s the only sane desktop UI project I’ve seen in almost 20 years, an attempt to create an actual cross platform common API wrapping well behaved mature native APIs. Like a modern reboot of wxWidgets, an also sane but old and dusty project.

But it’s abandoned of course, likely too difficult for one dev and nobody is going to provide financial support for anything that sane. It’s neither trendy nor profitable nor a wedge to try to ram a new language down our throats (e.g. Flutter and Dart).

Maybe AI will get good enough some day that we can use it to do a thing like that. I do have this weird idea that we might be able to use really good code generating AI some day to do a lot of very sane but boring and unprofitable things that would make computing a lot better.


I'd tend to agree, but you didn't include MSFT in "desktop UI train wreck." Several frameworks, some windows native (delphi, lazarus), some not, all the way back to DOS (TurboVision, lazarus, NEXTStep) still provide an arguably superior programming experience, in spite of their age. And web ui is still mushy for dense business apps, IMO. Me smells a bit of the C myopathic tyranny here, like how Rust is meant to solve programming issues, when it would be more accurate to suggest it solves C, and C++ programming issues.


Why oh why did WYSIWYG go away? When I dabble in web development it’s so frustrating compared to what we had 20+ years ago with C# and WinForms. I just want to make some buttons and menus and hook them up to a little logic! Argh.


May I ask what’s wrong with HTML and maybe a good CSS framework? I find it to be super portable and robust.


If you start adding traditional GUI application features - toolbars, tooltips, shortcuts, clipboard, drag and drop... You can get very close with all of those things in HTML, but not in the "native look and feel" way where the OS and framework actually knows what's going on and helps coordinate behavior.

Basically, the web's features are there to help you create advertisements and e-commerce frontends. They aren't productivity-focused, and the type of UI you get out of them by default reflects that.


Judging by the last decade, Microsoft itself doesn't know what a Windows "native look and feel" is. I doubt anyone would miss stylistic touches, colors or form elements. Just get the basics right - alt-activated menu, ctrl-scroll to zoom etc.


All kinds of great ergonomic UI design principles were forgotten overnight when the web hit.

It feels like lost magic from an ancient forgotten empire. There was a time in the ancient misty past when we thought about computing from the perspective of cohesion, reducing cognitive load, and helping users create things.

Go find a copy of Office before the “ribbon” or Visual Studio before XAML.

Apple is the only company that even tries anymore, and they aren’t great just somewhat cohesive compared to the mess on Windows and Linux. Linux is arguably better than Windows these days in some ways.


Good point. I don’t try too hard to get to native look and feel because as this article implies, that question has already become moot IMHO.


They forgot Visual Basic.

In terms of number of windows applications created, I would guess, Visual Basic accounts for a plurality of not the majority.


XAML is a nice declarative UI lang. One can use it even in Powershell scripts.


Forgot ATL


That was for creating and using ActiveX from C++, I wouldn't count that as UI framework.




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

Search: