Original URL: https://www.telerik.com/blogs/how-to-desktop-2022
Take a look at all the different ways to build for desktop today. Choose your life partner wisely.

Congratulations. If you're reading this in 2021, you've traveled to next year. The global pandemic is over, and the world is returning to normal. For developers on the Microsoft stack, .NET 6, .NET MAUI, and related tools were released last November (ha, plans never keep pace with changes—the site admin is reprinting this article on May 6, 2022, and MAUI still hasn't shipped a stable release, but it's believed to be coming soon, haha). Apple has solidified macOS Monterey and iOS 15 with stable XCode releases. If your task today is to start a brand-new desktop application project, what would you use?
First, don't let anyone tell you that desktop applications are "legacy"—look around, and you'll see most enterprise workflows rely on desktop software.
It's now 2022, and developers have many choices for building for desktop. Depending on who you talk to, the abundance of technologies and choices is either liberating or daunting. Ultimately, it may come down to developer experience and what else you're building to better share code.
Let's explore desktop application technology stacks—from the perspective of three types of developers.
1. Traditionalists
Designed for desktop, using native tools, targeting one platform.

1.1 WinForms
Windows Forms, launched with .NET 1.0 in 2002, is one of the oldest Windows desktop technologies—surprisingly, it's still going strong. Part of WinForms' success lies in the simplicity of the tools, high developer productivity, and a rich ecosystem of tools. Modern WinForms applications on Windows can run on the latest .NET runtime, with powerful UI and full access to the latest Windows APIs.
1.2 WPF
Windows Presentation Foundation was introduced as a Windows desktop technology with .NET 3.0 in 2006, and it also introduced a UI stack defined in Extensible Application Markup Language (XAML) that can be separated from business logic. Unsurprisingly, WPF runs on the latest .NET runtime and remains robust, with a rich developer ecosystem. Modern WPF applications have deep system integration and the latest touch/ink support, radiating a modern UX. Despite a bit of a learning curve, WPF enables developers to be productive and offers a rich set of tools.
1.3 UWP
With the evolution of modern languages like .NET C#/VB/F#, the trend of combining .NET with XAML for UI markup continued in Windows 8 and Windows 10. Modernity required a variety of Windows device form factors—tablets, computers, 2-in-1s, HoloLens, Surface Hub, Xbox, IoT, etc. The Universal Windows Platform promised to unify the developer experience for building all Windows devices with adaptive UI and delivering apps through the Microsoft Store.
Subsequent developments like Desktop Bridge allowed developers to package their older Win32 applications in a UWP container for distribution on the store, enabling modern UWP UI to be embedded into other Windows desktop apps via XAML Islands. While the original UWP vision may have evolved, the foundation of a native runtime and a separated API access layer serves Windows applications well today.
1.4 AppKit/Cocoa
Want to build a native desktop application for macOS? AppKit is your friend—it defines all the objects you need to implement UI components for macOS apps and the details for effective drawing on screen. AppKit is integrated into Cocoa (macOS's Objective-C API framework), but AppKit can also be used from SwiftUI. With modern tools in XCode, building for the macOS desktop is just another target beyond iOS and other Apple platforms.
2. Reformists
Future-proof desktop building, aware of cross-platform needs, wanting code sharing.

2.1 WinUI 3
The Windows UI Library (WinUI) is a native user experience (UX) framework for Windows desktop and UWP applications. WinUI 3 is the next-generation native Windows UI stack, decoupled from Windows 10, incorporating the Fluent Design System into all experiences for consistent, intuitive, and accessible UX. WinUI 3 gives developers the latest tools and support for desktop and UWP applications. The Windows App SDK provides a unified set of APIs and tools that any desktop app can use consistently across a wide range of target Windows 10 and later OS versions.
2.2 Mac Catalyst
It turns out that most developers want to build for iOS, relegating native macOS development to niche audiences. Apple aims to solve this with Mac Catalyst—allowing iOS, especially iPad, apps to run seamlessly on macOS. Mac and iPad apps can now share the same project/source code with XCode. There's a seamless mapping between AppKit and UIKit, with visual interfaces optimized for touch on iOS and keyboard/mouse on macOS.
2.3 Flutter
Flutter has grown in popularity for cross-platform mobile development—write code in Dart and use widgets to draw pixels on the screen. Flutter is now available for building cross-platform desktop applications—the Flutter engine can render UI for Windows, Linux, or macOS. While desktop support for Flutter was still in beta (as of May 6, 2022, Flutter's desktop version has been officially released for several months and can be used with confidence), developers can target Windows UWP, macOS, and Linux from a single codebase and add desktop support to existing Flutter apps.
2.4 .NET MAUI Desktop
For .NET developers, Xamarin.Forms has long been one of the easiest ways to build cross-platform apps, but Xamarin.Forms primarily caters to iOS/Android mobile platforms. While there were Xamarin.Forms renderers for desktop, developers had less confidence in targeting desktop. This has changed with the evolution of Xamarin.Forms into .NET MAUI.
In addition to iOS/Android, .NET MAUI fully supports desktop platforms—Windows and macOS. What gives developers confidence in .NET MAUI is that desktop platform support is first-class, with polished tools from a single VS project and a shared application architecture. Rather than reinventing the wheel, .NET MAUI chooses to render native UI on desktop through two widely accepted technologies—WinUI 3 for Windows and Mac Catalyst for macOS.
2.5 Uno Platform
For .NET developers who truly want to use "Windows" XAML markup for cross-platform, the Uno Platform offers a nice open-source alternative. Aiming to make WinUI ubiquitous, the Uno Platform can power desktop applications on Windows, macOS, and Linux—all from a single codebase in C# and XAML with your preferred IDE.
2.6 Avalonia
Avalonia, touted as a .NET XAML framework, provides another open-source option with a XAML-based renderer that can power applications on desktop platforms (Windows, macOS, and Linux).
3. Trendsetters
Creating desktop apps using non-desktop technologies, believing the web is everywhere.

3.1 PWAs
If you're building web apps using any web SPA framework, PWA (Progressive Web Apps) is one of the easiest ways to get the same app running on the desktop. PWAs provide access to open web technologies for cross-platform interoperability and give users an app-like experience tailored for their mobile or desktop devices. A PWA is essentially a website that has been progressively enhanced to function like an installed application on supported platforms, often featuring offline work, push notification support, and hardware access, among other desktop capabilities.
Starting from a regular web app, developers can choose to make their app progressive by adding a manifest file for device features and JavaScript service workers for background thread operations. Solutions like PWA Builder make this transition easy to start, and developers can dive deeper into Windows/Mac desktop integration.
3.2 Electron
The desire to see web apps running on the desktop is nothing new. Enter the most prevalent solution for this need—Electron. ElectronJS is an open-source project for building cross-platform applications using web technologies, targeting any desktop—Windows, Mac OS, and Linux.
Many of the most used desktop apps are essentially web applications wrapped in an Electron shell, such as Visual Studio Code, Microsoft Teams, Slack, and Figma.
Electron has been around for a while and has earned credibility from a strong developer community/ecosystem. Most modern web apps written using JavaScript SPA frameworks or .NET/Blazor can be powered for desktop solutions using Electron. The core advantage of Electron as a shell for hosting web applications is the idea of a stable and predictable environment.
To that end, each Electron application bundles two things that provide reliability—its own copy of the Chromium engine for rendering consistency and a Node.js runtime. While developers should be mindful of app size/memory footprint, Electron is battle-tested and offers developers a wide range of APIs for deep native desktop integration.
3.3 Blazor Hybrid
If we assume a stable computing environment and the presence of modern browsers today, web apps could perhaps be hosted on the desktop via lightweight WebViews—creating smaller footprints and easier application bootstrapping.
With Blazor, developers can build modern web apps using C#/.NET, running on the server or entirely on the client via WebAssembly. Blazor is very popular among modern .NET developers, and it's natural to want a robust desktop solution for Blazor.
With .NET 6, .NET MAUI can provide the perfect bootstrap to enable Blazor Hybrid apps to run on the desktop via modern WebViews (WebView 2 on Windows and WKWebView on macOS). Blazor can be used to build truly native or hybrid cross-platform apps, inviting .NET web developers into the desktop realm. Familiarity with the Blazor component model, Razor rendering engine, CSS styling, and extensibility can now be applied to building desktop apps while sharing code with the web.
A Bright Future
Like it or not, the desktop is here to stay. Desktop apps will continue to power many enterprise workflows, and developers will have to build solutions for Windows/macOS/Linux desktops. The good news is that there are many choices for how to reach the desktop—traditional desktop technologies co-exist happily with web or cross-platform solutions, enabling more code sharing. Like a good parent, the desktop doesn't judge—come as you are. Good bread is good bread—no matter how you serve it.