Windows developer FAQ

This article is meant to promote a common understanding of the Windows development experience and product direction.

Today's Windows app development landscape offers a variety of frameworks and technologies to choose from. This FAQ provides guidance on how to decide which framework to use for your Windows app development projects. It covers the following topics:

  • Getting started and the Windows app development landscape.
  • Native Windows-only app development with WinUI, Windows Presentation Foundation (WPF), and Windows Forms (WinForms).
  • The Windows Software Development Kit (SDK) and Windows App SDK.
  • Targeting Windows as part of your cross-platform development strategy.
  • Hybrid and web app development with .NET MAUI, Blazor, and ASP.NET Core.
  • How to choose an approach while understanding Microsoft's investments.

The Windows app development landscape

Where can I find a straightforward overview of Windows development technologies?

Why is client app development still crucial for modern digital transformation in the era of cloud services?

In the age of cloud services, client app development remains a critical component of modern digital transformation. For developers, building client applications is essential not just for reach but for delivering responsive, meaningful interactions on user devices.

Here's why client apps still matter:

  • Device Reach: With over 1.5 billion Windows devices and more than 5 billion Android and iOS devices globally, client apps let you bring your applications directly to users on their devices of choice.
  • Gateway to Intelligent Services: Client apps are often the first interaction users have with your services. They offer a rich, interactive interface that allows you to showcase intelligent features and differentiate your product from others.
  • Scalability with Cloud Integration: A well-integrated client app can sync effortlessly with backend cloud services, enabling real-time data access and seamless scalability as your user base grows.
  • Enhanced Productivity and User Loyalty: A thoughtfully designed app can enhance productivity and keep users engaged with your product or service over time.

Native Windows-only app development

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.

I'm building a new team to develop a Windows-only app. Why should I choose to develop with a native Windows framework like WinUI, WPF, or WinForms?

Here are some reasons to choose a native Windows framework for your Windows-only app:

  • Performance: Native Windows frameworks are optimized to leverage the full power of today's Windows hardware and provide fast and responsive user experiences.
  • Integration: Windows ships with wide varieties of APIs to build sophisticated experiences only available on Windows. The native frameworks provide deep integration with these features and APIs.
  • Native user experience: Native Windows frameworks provide a consistent user experience across Windows devices, ensuring that your app looks and works great on all Windows devices.
  • Offline support: Native Windows frameworks provide support for offline scenarios, enabling your app to work even when the user is not connected to the internet.
  • Monetization: Native Windows frameworks are actively maintained and supported by Microsoft, ensuring that you have access to the latest updates and features.

Which framework should I use to leverage Microsoft's latest investments in Windows app development?

If you're building a new Windows-only app, we recommend using WinUI. WinUI is the latest native UI framework for Windows app development and is designed to work across a wide range of Windows devices. WinUI provides a modern and flexible UI framework that enables you to create visually appealing and interactive Windows apps. WinUI is part of the Windows App SDK and is designed to work best with the latest versions of Windows.

Can I use Windows App SDK / WinUI in my existing Windows app?

Note that WinUI (a UI framework) ships with Windows App SDK (a Windows platform development framework).

Generally speaking, you can't use WinUI unless you're ready to migrate your UI framework entirely. We're working on a feature called XAML islands that lets you host WinUI content in other UI frameworks (WPF, Win32).

You should be able to use elements of the Windows App SDK in any desktop app, depending on how your existing app was built. UWP apps are not supported by Windows App SDK.

This means that WPF/MFC/WinForms apps can use Windows App SDK APIs that are not related to WinUI. Examples of such APIs include App Lifecycle, Windowing, and Toast Notifications.

See Use the Windows App SDK in an existing project for more information.

Do I need to use Visual Studio to build WinUI apps?

We strongly recommend using Visual Studio 2022 versions 17.10 and above to develop WinUI apps. Using the latest version of Visual Studio will give you access to rich development features like Hot Reload. The latest Visual Studio installers include a Windows application development workload, making it easy to get started with WinUI development.

You may be able to use other IDEs and development workflows, but Visual Studio is currently the only officially supported IDE for WinUI. Note that MSBuild is required to compile projects that use XAML or WinUI.

When I build an app using Windows App SDK and WinUI 3, am I building a "WinUI app"?

Yes - "WinUI app” is the term that we recommend you use. WinUI 3 apps are generally referred to as "WinUI apps", as WinUI 2 is not a type of app but a set of components that can be used in UWP apps.

Can I incrementally update my UWP app with WinUI 2 controls 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 WinUI?

Migrating UI components is generally straightforward (for C# and C++/WinRT). Otherwise, the cost of migrating from UWP to WinUI will depend primarily on these factors:

  1. Project file and MSBuild customization: Migrating your project might require a significant level of effort, depending on whether you use advanced MSBuild features.
  2. .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.
  3. UI component libraries: If you use UI component libraries, then you'll need new versions of them that target WinUI 3.
  4. 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 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.

How do I package/distribute my WinUI app?

Where can I find Windows App SDK migration guidance?

Do I need to use XAML markup if I want to use WinUI?

No. UI controls can be created in code. But there are many benefits to representing your WinUI user interface in the form of declarative XAML markup, such as improved developer experience.

If you're migrating from UWP to WinUI, 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, 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 / UI designer for WinUI?

Not yet. We recognize that this is a gap in the WinUI developer experience. Tools like XAML Hot Reload can help in many scenarios. Work has started on a Visual Studio UI designer for WinUI in Windows App SDK 1.7, but there isn't a timeline for the release of this feature yet.

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 create a WinUI app, will it 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 samples?

See Sample and resources. Some notable repositories:

If I have already invested heavily in WPF, should I continue to use WPF or should I consider migrating to WinUI?

If you have already invested heavily in WPF, you can continue to use WPF for your existing apps. WPF is a mature and stable framework that is widely used by developers to build Windows desktop apps.

Consider leveraging the .NET Upgrade Assistant to migrate your .NET Framework WPF apps to the latest .NET platform. The .NET Upgrade Assistant is a tool that helps you migrate your .NET Framework apps to the latest supported versions of .NET. The .NET Upgrade Assistant analyzes your existing codebase and provides guidance on how to update your code.

If I build a new WPF app, will it look dated compared to other new Windows apps?

When developing a WPF application with .NET 9 or later, you can ensure your app matches the sleek, modern look of Windows 11. The new Fluent theme for WPF introduces a contemporary Windows 11 aesthetic to WPF applications, complete with integrated Light/Dark mode and system accent color support. This update not only modernizes the appearance of your app but also enhances user engagement by providing a polished and cohesive user experience.

My team is comfortable building WinForms apps, and it suits our needs. Should we consider migrating to WinUI or another framework?

If your team is comfortable building WinForms apps and WindForms meets your needs, you can continue to use WinForms for your existing apps. WinForms is a mature and stable framework that is widely used by developers to build Windows desktop apps.

The WinForms team is investing across features and has an active community of contributors. Some current areas of investment include:

  • Async support with common controls
  • Dark mode
  • Layout flexibility
  • Desktop security features like clipboard access

Cross-platform native development

What are some reasons for building cross-platform, native apps that target Windows?

If you're targeting users across multiple OS platforms, building cross-platform apps with .NET MAUI or React Native can provide several benefits:

  • Reach: Building cross-platform apps allows you to reach a larger audience of users on different platforms.
  • Code reuse: Building cross-platform apps allows you to reuse code across different platforms, reducing development time and costs. It can be prohibitively expensive to build separate apps for Windows, iOS, Android, macOS, etc.
  • Consistent user experience: Building cross-platform apps allows you to provide a consistent user experience across different platforms, ensuring that your app looks and works great on all devices.
  • Integration: Building cross-platform apps allows you to integrate with different platforms and services, enabling you to provide a more comprehensive user experience.

Can I be confident that .NET MAUI apps will run well on Windows?

When you build a .NET MAUI app for Windows, your output is a WinUI app. While developing, .NET MAUI provides a single .NET experience across all platforms, including Windows, but under the hood, it generates platform-specific code. This ensures that your .NET MAUI app runs well on each platform and provides a native user experience.

How can .NET MAUI provide native device APIs across every platform?

.NET MAUI provides a single .NET experience across all platforms, including Windows, iOS, Android, and macOS. .NET MAUI abstracts over 60 platform-specific APIs into a single, cross-platform API that you can use in your .NET MAUI app. These APIs cover access to storage, networking, device-specific sensors, and more. If needed, you can also access additional platform-specific APIs using dependency injection to abstract the code for each platform.

Can I start with WinUI, and later integrate .NET MAUI if I eventually want to target cross-platform scenarios?

Not at this time. Although .NET MAUI apps use WinUI when running on Windows, we recommend starting with .NET MAUI or React Native for Desktop if you anticipate the need to target multiple platforms.

Our team has strong web front-end development skills. Should we consider using React Native for Desktop?

If your team has strong web development skills, you may want to consider using React Native for Desktop. React Native for Desktop encompasses the React Native for Windows and macOS frameworks. The motto of React Native is "Learn once, write anywhere," which means that you can use your existing web development skills to build native Windows apps using React Native. React Native for Desktop is an open-source project that enables you to build native Windows and macOS apps using React Native. React Native for Desktop provides a set of APIs that allow you to access desktop OS-specific features and capabilities in your React Native apps.

Your team can leverage their JavaScript, TypeScript, and React skills to build the UI layer, which is rendered directly to native primitives. This provides native app performance and access to the capabilities of the native platform.

Read more about getting started with React Native development for Windows in the React Native for Desktop documentation.

Are any other Windows devices supported by React Native for Desktop?

React Native apps can be deployed to all devices supported by Windows 10 and higher including PCs, tablets, 2-in-1s, Xbox, and Mixed reality devices.

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.

Hybrid and web development

What are hybrid apps, and why should I consider building one?

Hybrid apps blend the best of web and native app development. The core of the app is built using web technologies like HTML, CSS, and JavaScript, and then wrapped in a native container that allows the app to leverage certain native platform features and hardware. They can also be distributed through app stores.

The main advantage of hybrid apps is that they allow you to build a single app that can run on multiple native platforms and on the web, reducing development time and costs. Some examples of hybrid app development platforms answer:

  • Electron for desktop apps
  • Ionic for mobile apps
  • .NET MAUI Blazor hybrid for cross-platform apps

How do I build native-feeling progressive web apps (PWAs) on Windows?

What is a .NET MAUI Blazor hybrid app?

With .NET MAUI, Blazor apps can also run natively on Windows, iOS, Android, and macOS. This means you can create hybrid client apps that combine Blazor and .NET MAUI components together into a single, native client app. This provides full access to the same native platform capabilities available to any other .NET MAUI apps.

To read more about how Blazor can hosted within a .NET MAUI app, see ASP.NET Core Blazor Hybrid.

Do the web components of a .NET MAUI hybrid app need to be created with Blazor?

No, the web components of a .NET MAUI hybrid app do not need to be created with Blazor. Starting with .NET 9, .NET MAUI provides a HybridWebView control that allows you to host other JavaScript UIs in your native app.

This means you can take your Angular, React, Vue or other HTML & JavaScript web app and host it within your .NET MAUI app. The hybrid control provides interop between the C# and JavaScript layers so you can call JavaScript functions from C# and vice versa.

Can any other native app types host Blazor hybrid components?

Yes, WPF and WinForms apps can also host Blazor hybrid components. This allows you to add modern web UI components to your existing WPF and WinForms apps. Note, that this is not possible with WPF or WinForms apps built on .NET Framework.

Does my entire app need to be a hybrid app, or can I mix and match native and hybrid components?

You can mix and match native and hybrid components in your app. For example, you can build the core of your app using .NET MAUI components and then add hybrid components to provide additional functionality. This allows you to leverage the best of both worlds: the performance and capabilities of native components and the flexibility and cost savings of hybrid components.

What are my choices for building .NET-based web apps that look great on modern browsers on Windows?

Web apps have the broadest reach of any client app platform. If you want to create beautiful .NET web apps on Windows, you have several options:

  • ASP.NET Core apps with Razor Pages
  • ASP.NET Core MVC apps
  • ASP.NET Core Blazor apps, with hosting model options including:
    • Blazor WebAssembly apps
    • Blazor Server apps

Note that the hosting model for Blazor can be configured at the component level now. So, you can have a Blazor WebAssembly component hosted in a Blazor Server app.

Read more about ASP.NET Core development options in the ASP.NET Core documentation.

Choose an approach and understand Microsoft's investments

There are so many framework options for building apps that target Windows! How do I decide?

Windows is an open platform that supports many technologies. Here are some criteria that can help you decide which platform to use:

  • Are you building Windows-first or cross platform?
  • Do you have experience with .NET? JavaScript? Other languages?
  • Do you need to access Windows-specific APIs?
  • Which framework's capabilities best match your app's requirements?
  • See this table for other decision factors.

When it comes to business apps, most teams want to choose based on existing skills and what the team is comfortable using.

How do I choose the best development approach for my web app?

Some things to consider when choosing a development approach for your web app include:

  • Blazor is recommended for building front-end web apps with .NET. By using Blazor, you can now build your entire front-end and back-end with .NET, saving time and money. It is particularly well-suited for enterprise line-of-business apps on today's devices.
  • JavaScript web apps still make sense if you want to leverage your team's existing skills or investments in JavaScript, or if you need to integrate with existing JavaScript libraries or frameworks.
  • Existing apps that use older frameworks, like Web Forms, MVC, or Razor Pages, are still supported and can continue to be developed and maintained using those frameworks.

Who is building apps with WinUI today?

Many customers are building with WinUI today, including Adobe and Apple:

Microsoft has also created several apps with WinUI, including the Windows 11 File Explorer and Photos apps.

Who is building .NET MAUI apps today?

Many customers are using .NET MAUI to build their cross-platform apps today, including Microsoft. For example, the Microsoft Azure mobile app was built using .NET MAUI.

Find out who else is building apps with .NET MAUI on the .NET customers showcase site.

Who is building WPF apps today?

Most of Microsoft Visual Studio's user interface is built with WPF. The Visual Studio IDE is a great example of a complex, high-performance WPF app.

Who is building Blazor apps today?

GE Digital's FlightPulse airline system puts sensor data and analytics into the hands of pilots to improve safety and efficiency. The backend configuration of everything the pilots see is all done with Blazor.

You can read more Blazor customer stories on the .NET site.

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.

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 app automatically update for end-users?

A WinUI 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 and Windows App SDK require MSBuild, which is why Visual Studio is a prerequisite to developing with WinUI and Windows App SDK. While it's technically possible to build Windows App SDK apps that don't use WinUI 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 WinUI app?

Users who have Windows 10, version 1809 and beyond will be able to install your WinUI apps without updating their OS.

Can I target Arm64 with my WinUI 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 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 WinUI 3, 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.

Release notes

Where can I find release notes for Windows App SDK?