WinUI is an evolution of UWP which is an evolution of WinRT. WinUI has been around for years.
MAUI is not exactly a competing product and is more about enabling cross platform UI development. Different intent.
WinUI is actually ok tech. It’s evolved over the years through a few iterations, now on WinUI 3.
Im mostly with you though. Until they rebuild the entire OS in it, including all of the administrative controls and tools, I don’t trust the longevity.
They already do, though. The big UI refresh in Win10 is all XAML, and the new Win11 taskbar (the one we all hate) is now a totally normal XAML app.
WinUI 3's big changes (to get a 3.0 version number) is not with the XAML stack itself, but its new ability to be called by unmanaged apps as a normal UI toolkit, so it can finally be used by all apps. No more using Shell UI like we're writing Win 3.1 apps.
And yes, some stuff in Win11 still isn't WinUI, which is kind of annoying, but some of those dialogs hidden away in Windows are at least 20 years old, and probably would need to be entirely rewritten, not merely have their UI's updated.
Also, fun fact: The Win8/10 taskbar's code predates Avalon (the prototype/codename for WPF), and trying to change/fix it at all usually ended up breaking it. It's one of the few binaries on Windows that would not be recompiled to build a new release image in fear of breaking it. Rewriting the taskbar made sense, GETTING RID OF SMALL MODE DID NOT, GODDAMNIT MICROSOFT.
Lets not forget that after five years Project Reunion was announced, WinUI 3.0 is yet to achieve feature parity with the Visual Studio experience developing C# or C++ applications, or UWP components features.
The WinUI map component is a Webview2 instead of proper native component, Win2D is only a subset of the UWP one, ink is yet to be migrated, and lots of other issues.
Github repos are filled with thousands of issues, and they already did a cleanup a year ago where they simply closed enough tickets to bring it under 2000.
> The Win8/10 taskbar's code predates Avalon (the prototype/codename for WPF), and trying to change/fix it at all usually ended up breaking it. It's one of the few binaries on Windows that would not be recompiled to build a new release image in fear of breaking it.
The taskbar that underwent a major redesign in Windows 7 (released after WPF)? Also, that binary is explorer.exe, surely it got rebuilt quite often for new ads. features, and fixes?
The taskbar exists in its own timeline, apparently. (Ex-)Microsoft engineers working in the UI/UX team for Windows itself have spoken about how much of a nightmare dealing with that thing was.
Also, the taskbar technically exists as a dll, not an exe, explorer.exe would link to it and run it if it was being ran as the UI shell. This is now split out to its own exe (Shell Experience Host iirc), and explorer.exe is now only File Explorer.
Since it exists as a dll, btw, this is how the Win10 taskbar injectors work, they just call the dll (which still ships in Win11) instead of letting Shell Experience Host do the Win11 thing.
The sane way of handling this, btw, is just use Shell Experience Host injectors to get the desired behaviors, such as using Windhawk and use m417z's taskbar height and icon size plugin (the third most popular Windhawk plugin); to match Vista/7 era small, set to height 32, icon size 16, taskbar button width 28.
The detail missing is that those DLLs are COM servers, so it isn't really doing injection rather the standard COM RPC.
> And yes, some stuff in Win11 still isn't WinUI, which is kind of annoying, but some of those dialogs hidden away in Windows are at least 20 years old, and probably would need to be entirely rewritten, not merely have their UI's updated.
And this is hard to do. These dialogs often are _dynamic_, with third-party settings rendered as ActiveX controls.
Thanks for the informative comment.
> small mode
I recently noticed that they introduced an option for small icons. Not that it changes much, as the height of the bar stays the same, but hey. Personally I've been fine since they added back the option not to combine buttons unless full.
Still writing win32 stuff like it’s 1995 here. We have bits of ATL/MFC hanging out which are throughly abandoned.
I don’t trust WinUI at all.
I was surprised, when I spoke to a former colleague, to find that an internal tool I wrote 25 years ago is still being maintained. Win32 as well.
Software that solves an actual problem has the tendency to stick around, no matter how much time elapsed.
Just remember, cobol is still in active use, today
I was going to ask about Win32. I haven't had to do it in a while, but if I had to write a desktop app in windows, that would be what I would reach for. It's still supported... is their any indication that it won't be for many years to come?
Also, it looks better, in my humble opinion. It's probably lacking features that I'm uninterested in.
Still works fine. High DPI stuff is a dick but that’s about it.
Eh, high dpi has always been a mess given the hacks adobe and windows assumed in the past.
I implemented a WPF control to look like a winform control and ran into a issue of the vintage control looking perfect at an odd (9px by 9px) native pixel size that gets distorted by WPF when rendered at different scaling.
Visual Studio's + sign expanders have had this bug for years that was finally fixed by changing to a chevron shape in 2022. Clearly this problem bugged someone on the dev team hence the fix. =)
MFC support is still in the latest Visual Studio, and it looks like ATL as well.
I was surprised to see ATL/MFC received security updates such as Spectre mitigation. So there is still some support for these 30 year old components.
That’s only because half office hangs off it. If it didn’t they wouldn’t have just left it.
Which so much better tooling than XAML C++ with C++/WinRT, it is a tragedy.
It’s in there because it’s a cockroach. It is throughly abandoned though, frozen in time.
You can observe this looking at the state of old outlook.
The state is wonderful, versus the new kind of Electron junk.
I think only WinUI2 (deprecated) is an evolution of UWP (uses WinRT APIs). WinUI3 is something different.
WinUI 3 still supports WinRT. It ALSO supports more. It's an evolution of WinUI 2, not just a simple version bump, but also not a completely new tech. It's probably a closer evolution to go from WinUI 2 to 3 than it was to go from Angular 1 to 2.
https://learn.microsoft.com/en-us/windows/apps/winui/winui3/...
https://learn.microsoft.com/en-us/windows/apps/develop/platf...
> WinUI 3 still supports WinRT.
I think this is completely independent. You can simply use WinRT APIs, because Win32 Apps can use them now. WinUI3 apps are win32 apps.
> but also not a completely new tech.
Not sure about this. UWP APIs work out of the box. For WinUI3 you need the Windows App SDK, and it is much slower and heavy than UWP (out of curiosity I created a very simple app and it was fast just a few dozen kbs big)
Hardly an evolution, that is how it is sold, reality is something else, trailing behind UWP with half the tooling.
WinRT came out of UWP I think. UWP was their first attempt to move beyond .NET
You have that backwards. WinRT is the managed languages runtime for Windows, introduced in Win8. Its sort of the replacement for COM/OLE but also defines the ABI dialect in a way that allows managed languages to call unmanaged code without an FFI penalty.
UWP is built on WinRT, and acts as a fully managed app container, similarly to how phone apps exist on your phone. It allows WinRT apps to be deployed to any Microsoft platform, Windows, XBox, Windows Phone, etc, but also Android and iOS, and also as PWA, and are guaranteed to run identically on any of those platforms. UWP apps must be written a fully managed language that runs on the CLR (ex: C# runs on the CLR, but C++/WinRT does not). UWP also uses the second generation of WinUI-family XAML UIs, which means all UWP apps use completely native UIs, instead of slow non-native Javascript shit in a web canvas.
The WinUI family of XAML UIs started with WPF, and a slightly incompatible version of it also appeared in Silverlight (WPF = WinUI 1.0), then was brought to UWP (= WinUI 2.0), and is now its own stand alone thing that any app can use, managed or not, as 3.0.
WinRT is not an attempt to move beyond .NET, instead it is their way of allowing .NET to natively call code, and make .NET languages first class in Windows.
Yeah but I think when it was introduced it wasn't a thing you could use separate from the rest of UWP. What changed in Win10 was you could use WinRT APIs from regular Win32 apps too. They started breaking UWP up into independent pieces.
Or not. I haven't thought about this stuff for years. Definitely possible I forgot the ordering of things.
UWP most certainly did not exist when WinRT came into existence. WinRT, itself, is also more or less the third version of this attempt: Managed C++ came first, then C++/CLI, then the WinRT era and C++/CX.
C++/CLI and C++/CX are semi-managed, you only need to use the extensions when interacting with WinRT, although you're free to write your entire app in that dialect.
WinRT is not the same thing as managed .NET code. There is no requirement that a UWP is .NET. There are many examples of unmanaged C++ UWPs, including the open source Windows Terminal.
WinRT is a mechanism to express APIs in a way that is amenable to cross-language usage. It is built on top of COM, and is not a replacement for COM.
Windows Terminal is sort of a clusterfuck of multiple programs, only one of which is a UWP program (the actual visible WinUI shell that runs) which you're not allowed to do as a UWP-era Microsoft Store app, but they got internal permission to do that.
Its now a WinUI 3.x program, apparently, and now the Store no longer requires UWP programs, so WT now only needs to make the "ships inside of Windows release images" guys happy, which apparently is harder than making the UWP-era Store guys happy.
WinRT was windows 8. Remember the ARM-powered Surface RT had the same branding?
UWP came along in windows 10.
WinRT was introduced with windows 8, the WinRT APIs still exist in Windows 11.
Yep! I was implying it was the same timeframe as windows 8, but I see where my wording could easily have been taken literally.