This article is meant to promote a common understanding of the Windows development experience and product direction.
Getting started
What should I use to build Windows apps?
For Windows desktop application development, we recommend WinUI 3 and the Windows App SDK. WinUI contains modern controls and styles for building Windows apps that take advantage of the latest Windows 11 features and work downlevel to Windows 10, version 1809.
Other options may be more appropriate depending on what you're building and how you're building it:
- If Windows App SDK / WinUI 3 don't meet your needs, WPF might.
- If you're targeting cross-platform: React Native and .NET MAUI let you build cross-platform apps. .NET MAUI is a great choice for C# developers. React Native will feel familiar to JavaScript/TypeScript developers.
- If you're a web developer: You can use WebView2 as an application host. This lets you use web technology to build desktop apps that can access the Windows SDK and Windows App SDK APIs. You can also use React Native for Windows.
- If you're a C++ developer: For desktop apps, Windows App SDK / WinUI 3 are a great choice. If you're building a game, consider using DirectX.
- If you're a Rust developer: Check out Rust for Windows.
There are other development technologies that may be more appropriate depending on your needs and technology preferences. See Overview of framework options.
Where can I find a straightforward comparison of Windows development technologies?
Windows App SDK / WinUI 3
What is the Windows App SDK?
The Windows App SDK is a Windows application development platform that allows you to create beautiful, modern, backwards-compatible (down to Windows 10 1809) desktop apps. WinUI 3 is the UI framework that ships with Windows App SDK.
What's the difference between the Windows App SDK and the Windows SDK?
Both are software development kits (SDKs) that let you build Windows apps.
The Windows App SDK is a new development platform that lets you build modern desktop apps that can be installed across Windows versions (down to Windows 10 1809). When you use Windows App SDK to build an app, you'll have access to the latest Windows development platform features. The Windows App SDK includes WinUI 3.
The Windows SDK is a development platform that lets you build UWP apps and Win32/desktop apps. It's designed around Windows APIs that are coupled to particular versions of the OS.
The Windows App SDK doesn't replace the Windows SDK. Instead, the Windows App SDK is a complement to the Windows SDK. It provides a convenient, OS-decoupled abstraction around the rich catalogue of Windows OS APIs that you can already access using the Windows SDK. When you build apps with Windows App SDK, you might end up using some Windows SDK APIs depending on the functionality that you need. Over time, more Windows SDK functionality will be lifted into the Windows App SDK.
Can I use Windows App SDK / WinUI 3 in my existing Windows app?
Note that WinUI 3 (a UI framework) ships with Windows App SDK (a Windows platform development framework).
Generally speaking, you can't use WinUI 3 unless you're ready to migrate your UI framework entirely. We're working on a feature called XAML islands that lets you host WinUI 3 content in other UI frameworks (WPF, Win32).
You should be able to use elements of the Windows App SDK in any Win32/desktop app, depending on how your existing app was built. UWP apps are not supported by Windows App SDK / WinUI 3.
This means that WPF/MFC/WinForms apps can use Windows App SDK APIs that are not related to WinUI 3. Examples of such APIs include App Lifecycle, Windowing, and Toast Notifications.
Do I need to use Visual Studio to build WinUI 3 apps?
We strongly recommend using Visual Studio 2022 versions 17.1 and above to develop Windows App SDK / WinUI 3 apps. Using the latest version of Visual Studio will give you access to rich development features like Hot Reload.
You may be able to use other IDEs and development workflows, but Visual Studio is currently the only officially supported IDE for Windows App SDK / WinUI 3. Note that MSBuild is required to compile projects that use XAML or Windows App SDK / WinUI 3.
When I build an app using Windows App SDK / WinUI 3, am I building a "WinUI 3 app"?
Yes - "WinUI 3 app” is the term that we recommend you use.
Can I incrementally update my WinUI 2 app to WinUI 3 by gradually replacing WinUI 2 components with WinUI 3 components?
No. Windows App SDK can't be used in UWP apps, and WinUI 2 can't be mixed with WinUI 3. See Migrate from UWP to the Windows App SDK.
How hard is it to migrate a UWP app to Windows App SDK / WinUI 3?
Migrating UI components is generally straightforward (for C# and C++/WinRT). Otherwise, the cost of migrating from UWP to Windows App SDK / WinUI 3 will depend primarily on these factors:
- Project file and MSBuild customization: Migrating your project might require a significant level of effort, depending on whether you use advanced MSBuild features.
- .NET API migration: If your UWP app relies on .NET, then you'll need to upgrade to .NET 6 or later. In most cases, adopting .NET 6 is straightfoward.
- UI component libraries: If you use UI component libraries, then you'll need new versions of them that target WinUI 3.
- If your UWP source code is written in the now-superseded C++/CX, then some source code porting will be involved. See Move to C++/WinRT from C++/CX.
For more info about UWP migration, see Migrate from UWP to the Windows App SDK.
If I have an existing UWP app in the Store, can I publish a new packaged WinUI 3 app using the same identifiers?
Yes, upgraded apps can be published without having to update your application's identity. Users who have the old version will get updated to the new version. This guidance applies only to desktop apps. Xbox, HoloLens, and Surface Hub apps can't migrate to WinUI 3.
How do I package/distribute my WinUI 3 app?
See Deployment overview.
Where can I find Windows App SDK migration guidance?
Do I need to use XAML markup if I want to use WinUI 3?
No. UI controls can be created in code. But there are many benefits to representing your WinUI 3 UI in the form of declarative XAML markup, such as improved developer experience.
If you're migrating from UWP to WinUI 3, you'll probably be able to reuse a lot of your XAML markup and UI-related code (but you'll have to update some of the syntax). If you're migrating from WPF to WinUI 3, you'll be able to reuse a lot of the concepts, but the control set and APIs will be different.
Does Visual Studio have a design surface / GUI designer for WinUI 3?
No. We recognize that this is a gap in the WinUI 3 developer experience. Tools like XAML Hot Reload can help in many scenarios.
Does Windows App SDK include WinUI 3?
Yes. WinUI 3 ships as a part of the Windows App SDK.
Does Windows App SDK include WinUI 2?
No. WinUI 2 is part of the UWP platform.
Are WinUI 2 and WinUI 3 built on the same technology?
Not quite. Although WinUI 3 started from the WinUI 2 codebase, they are distinct technologies. Both WinUI 2 and WinUI 3 are XAML-based UI frameworks that work across .NET and C++. Note that WinUI 2 and WinUI 3 are not compatible with each other.
Can I use WinUI 3 without using Windows App SDK?
No. WinUI 3 ships as part of the Windows App SDK.
Can I use WinUI 3 in an unpackaged app?
Yes. All technologies in the Windows App SDK work in unpackaged apps, including WinUI 3.
What's the difference between XAML Islands and WinUI 3?
XAML Islands allow you to host modern WinUI controls alongside existing Win32 UI from other frameworks, such as WinForms and WPF. Today, XAML Islands are supported with most system XAML and WinUI 2 controls. See Host WinRT XAML controls in desktop apps (XAML Islands) for more information. XAML Islands support for WinUI 3 controls is available starting in Windows App SDK 1.4.
If I use WinUI 3, will my app look modern on both Windows 11 and Windows 10?
Yes, your app's UI will inherit the latest Fluent UI design principles on all supported versions of Windows 11 and Windows 10 down to version 1809 in both packaged and unpackaged scenarios.
Can I use Mica or Acrylic backgrounds in apps built with Windows App SDK?
Where can I find WinUI 3 samples?
See Sample and resources. Some notable repositories:
- WindowsAppSDK-Samples: Demonstrates how to use specific Windows App SDK API sets.
- WinUI 3 Demos: Contains demos used during Microsoft's WinUI 3 presentations.
- WinUI Gallery: Showcases WinUI 3 and Windows App SDK. You can also get the WinUI Gallery in the Microsoft Store.
UWP and WinUI 2
Can UWP apps be distributed outside of the Microsoft Store?
Yes. If your MSIX package is signed, the signing certificate must be valid and trusted on the target device.
Can I mix UWP XAML UI controls with Win32, WPF, or WinForms UI controls?
Yes - XAML Islands lets you do this. Learn more about XAML Islands.
Cross-platform development
Can I start with WinUI 3 and App SDK, and later integrate .NET MAUI if I eventually want to target cross-platform scenarios?
Not at this time. Although .NET MAUI apps use Windows App SDK / WinUI 3 when running on Windows, we recommend starting with .NET MAUI or React Native for Windows if you anticipate the need to target multiple platforms.
What should I use if I want to build apps that work on Windows and Xbox?
If your app needs to support Xbox, HoloLens, or IoT, we recommend using UWP. Windows App SDK doesn't support these platforms. For game development, we recommend using Microsoft Game Development Kit.
What should I use if I want to build apps that work on Windows and Surface Hub?
If you're targeting both Windows and Surface hub, we recommend using UWP.
How do I build native-feeling progressive web apps (PWAs) on Windows?
Packaging, deployment, and updates
What's the difference between apps that are packaged, unpackaged, and packaged with external location?
For definitions of apps that are packaged, unpackaged, and packaged with external location, see Deployment overview. That topic also explains the advantages and disadvantages of each option.
Will my WinUI 3 app automatically update for end-users?
A Windows App SDK / WinUI 3 app can be delivered through the Store, an .appinstaller file, or in your existing MSI or setup.exe package. The Store and the AppInstaller support automatic updates for end-users who have automatic updating enabled, but your MSI/setup.exe app needs to have its own updater.
Can I use Windows App SDK without using MSBuild?
Generally speaking, no. WinUI 3 and Windows App SDK require MSBuild, which is why Visual Studio is a prerequisite to Windows App SDK / WinUI 3 application development. While it's technically possible to build Windows App SDK apps that don't use WinUI 3 using other toolchains, this isn't supported.
Performance and optimization
What can I do to make my Windows app feel great to end-users?
Compatibility
Will my users ever have to update Windows to use my Windows App SDK / WinUI 3 app?
Users who have Windows 10, version 1809 and beyond will be able to install your WinUI 3 / Windows App SDK apps without updating their OS.
Can I target Arm64 with my WinUI 3 app?
Yes.
Deprecations and migrations
Are UWP / WinUI 2 deprecated?
No. UWP and WinUI 2 are still supported and will receive bug, reliability, and security fixes. However, most new features and capabilities, including support for the latest .NET runtimes, will only be added to the Windows App SDK / WinUI 3.
When should I migrate a UWP / WinUI 2 app to WinUI 3?
UWP developers should feel no pressure to migrate their apps to the Windows App SDK, if they are happy with UWP and its feature set. The best choice for some apps may be to never migrate. For apps that want to benefit from the latest Windows platform and .NET investments from Microsoft, these apps should consider moving to the Windows App SDK. See Migrate from UWP to the Windows App SDK).
When should I *not* migrate a UWP + WinUI 2 app to WinUI 3?
We recommend continuing to use UWP if you're building for Xbox, Surface Hub, or HoloLens.
Is WPF deprecated?
No. WPF is still supported and receives some feature updates as well.
Is WinForms deprecated?
No. WinForms is still supported and receives some feature updates as well.
Is the Windows Runtime (WinRT) deprecated?
No. WinRT refers to an application binary interface (ABI) that lets you interop between multiple languages. WinRT is the evolution of COM. Windows App SDK provides most of its functionality through WinRT APIs.