Writing apps for Windows: Selecting a development technology
This article contains the information you need to get started building apps for the Windows desktop environment.
Windows offers a wide range of options for building apps, including C++, .NET, and other emerging technologies such as open source tools on WSL and Rust. With so many choices, it can be difficult to know where to begin.
Visual Studio is the go-to development environment for most Windows developers, providing various starting points for different types of apps, each with their own strengths and project types (here's a quick C# tutorial). Every app type includes an app model that defines the app's lifecycle, a default UI framework, and access to a comprehensive set of APIs for using Windows features.
If your app will only run on Windows, we recommend using the Windows App SDK and WinUI 3. If you need your app to be cross-platform, consider .NET MAUI, a Progressive Web App (PWA), or React Native for Windows. There are many other options available as well (here's a list of popular options), but the above are some good starting points.
Create a WinUI 3 app
The Windows UI Library (WinUI) 3 is the latest and recommended user interface (UI) framework for Windows desktop apps, including managed apps that use C# and .NET and native apps that use C++ with the Win32 API. By incorporating the Fluent Design System into all experiences, controls, and styles, WinUI provides consistent, intuitive, and accessible experiences using the latest UI patterns.
WinUI 3 is available as part of the Windows App SDK. The Windows App SDK provides a unified set of APIs and tools that can be used in a consistent way by any C++ Win32 or C# .NET app on a broad set of target Windows OS versions.
If you have already installed the required developer tools, you are ready to Create your first WinUI 3 project.
WinUI also serves as the basis for cross-platform technologies that provide great native Windows experiences using a variety of coding languages. .NET MAUI and React Native for Windows harness the power of WinUI on Windows, while also enabling execution on other operating systems. Another cross-platform option, Progressive Web Apps (PWAs), are websites that function like installed, native apps on Windows and other supported platforms, while functioning like regular websites on browsers.
.NET Multi-platform App UI (MAUI) is an open-source, cross-platform framework for building Android, iOS, macOS, and Windows applications that leverage the native UI and services of each platform from a single .NET code base. Because .NET MAUI favors platform native experiences, it uses WinUI 3 and the Windows App SDK so apps get the latest user experience on Windows. This gives your apps access to everything you get with WinUI 3 plus the ability to reach to other platforms.
.NET MAUI for Windows is a great choice if:
- You want to share as much .NET code as possible across mobile and desktop applications.
- You want to ship your application beyond Windows to other desktop and mobile targets with native platform experiences.
- You want to use C# and/or XAML for building cross-platform apps.
- You're using Blazor for web development and wish to include all or part of that in a mobile or desktop application.
For more information about .NET MAUI, see the following links:
Other app types
For more information about the app types you can choose from, see the following tabs.
Win32 desktop apps (also sometimes called classic desktop apps) are the original app type for native Windows applications that require direct access to Windows and hardware. This makes this the app type of choice for applications that need the highest level of performance and direct access to system hardware.
Using the Win32 API with C++ makes it possible to achieve the highest levels of performance and efficiency by taking more control of the target platform with unmanaged code than is possible on a managed runtime environment like WinRT and .NET. However, exercising such a level of control over your application's execution requires greater care and attention to get right, and trades development productivity for runtime performance.
Here are a few highlights of what the Win32 API and C++ offers to enable you to build high-performance applications.
- Hardware-level optimizations, including tight control over resource allocation, object lifetimes, data layout, alignment, byte packing, and more.
- Access to performance-oriented instruction sets like SSE and AVX through intrinsic functions.
- Efficient, type-safe generic programming by using templates.
- Efficient and safe containers and algorithms.
- DirectX, in particular Direct3D and DirectCompute (note that UWP also offers DirectX interop).
- Use C++/WinRT to create modern desktop Win32 apps with first-class access to Windows Runtime (WinRT) APIs.
You also have access to modern Windows platform features and APIs provided by the Windows App SDK. For more information, see Modernize your desktop apps.