Short history of all Windows UI frameworks and libraries

Posted on:October 24 2023

The official way to create user interfaces for the Windows operating system changed quite a lot of times during the last years. Microsoft created and (partially or fully) abadoned a lot of APIs which where intended to replace the respective previous ones. They changed names and ways how it's supposed to be done a few times, and left a lof of developers confused. Here is a small historical overview:

Win32 - 1985

Win32 is the Windows built-in API. Using it you can create buttons, windows, scrollbars, access the windows shell, common dialogs and so on, and they will look and behave like native windows. It is pretty old, can be accessed via the C programming language but works nicely still today.

MFC - 1992

A C++ wrapper named MFC for Win32 which makes the API a bit easer to use - the MFC still gets minor updates today from Microsoft and is interestingly still used widely.

WinForms - 2002

Windows Forms was a .NET wrapper over Win32, for use in C# and other .NET languages. It's in maintenance mode and no new features are planned of being added (source).

WPF - 2006

Windows Presentation Foundation introduced XAML and used DirectX to draw vector based components and to be used by .NET languages like C#. It's now open source.

Silverlight - 2007

Used parts of WPF for doing UI on the Web as competition to Adobe Flash. It's discontinued (source).

Xamarin (Forms) - 2014

Xamarin was a cross platform .NET, including the UI framework Xamarin.Forms (similar to WinForms). It ran on Mono instead of .NET, then later on real .NET. Replaced with MAUI, see below.

WinJS - 2012

WinJS was a JavaScript for creating Windows Store apps via HTML5 and JavaScript. It seems not to be developed any further.

WinRT (XAML) - 2012

WinRT is a platform for creating Windows apps for example via a custom C++ dialect (C++/WinRT, C++/CX) which used XAML to create the UserInterface. It was replaced with UWP later.

UWP (XAML) - 2015

Starting with Windows 10 - UWP is the platform for creating "universal apps" based on real C++ but also usable from .NET. This was replaced with WinUI later.

WinUI - 2018

Similar to UWP above but with styles making it look more like Windows 11. Now replaced with WinUI 3.

MAUI - 2020

Framework for creating multi-platform UIs, the successor of Xamarin.Forms (see above). Of course also now based on XAML, only for .NET languages.

WinUI 3 - 2021

Similar to WinUI, but decoupled the UI framework from the OS and put it into the library. Your apps now also work on systems which don't have the latest OS update.

Now that I wrote down all of these especially in chronological order, I think it's a bit less confusing. Please let me know if I forgot something. Of course there are lots of nice third party APIs and SDKs, and I recommend to use these, but that's for another blog post.


You should mention that WinUI can only be used to make Windows Store apps. If you want something that compiles to exes you still need Win32.
Farty McSimmons
2023-10-25 03:49:32

Good writeup, to nitpick and add some extra detail:

Silverlight didn't technically use any part of WPF in terms of implementation code, but it implemented a subset of WPF APIs. It was a rewrite from C into C++. Actually, WinRT XAML, WinUI 2/UWP XAML, and WinUI 3 are all descendants/forks of the Silverlight codebase, so the recent WinUI3 1.4.2 code drop (MIT-licensed, but they're not calling it "open source" because it's meant only for debugging purposes - it's not buildable and they're not accepting contributions) is the first time the source codebase will be publicly available.

"WinRT" is a very confusing term because it's been overloaded to refer to related but different things. The core of it is a system based on COM for building APIs usable from multiple languages (mainly C++ and C, but also at various times JavaScript, Python, Rust and Swift), but the name has also been used to refer to the Windows 8-era version of what became UWP XAML, or the Metro style app model, or even the ARM version of Windows 8. While basically all the rest of the things called "WinRT" are deprecated or quasi-deprecated now, WinRT-the-core-multi-language-API-and-bindings-system is still the basis for most of the new APIs being added in Windows, WinUI3, and WinAppSDK today.

C++/WinRT isn't really a custom C++ dialect (unlike C++/CX wjhich is), it's just a library for using WinRT APIs from C++, including newer WinRT APIs introduced with UWP and WinUI3.
2023-10-27 00:26:51

Add comment:

Posted by:

Enter the missing letter in: "?nternational"




Possible Codes

Feature Code
Link [url] [/url]
Bold [b]bold text[/b]
Quote [quote]quoted text[/quote]
Code [code]source code[/code]