LibreWinForms.WindowsFormsIntegration 0.1.0-preview.65

This is a prerelease version of LibreWinForms.WindowsFormsIntegration.
dotnet add package LibreWinForms.WindowsFormsIntegration --version 0.1.0-preview.65
                    
NuGet\Install-Package LibreWinForms.WindowsFormsIntegration -Version 0.1.0-preview.65
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="LibreWinForms.WindowsFormsIntegration" Version="0.1.0-preview.65" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="LibreWinForms.WindowsFormsIntegration" Version="0.1.0-preview.65" />
                    
Directory.Packages.props
<PackageReference Include="LibreWinForms.WindowsFormsIntegration" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add LibreWinForms.WindowsFormsIntegration --version 0.1.0-preview.65
                    
#r "nuget: LibreWinForms.WindowsFormsIntegration, 0.1.0-preview.65"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package LibreWinForms.WindowsFormsIntegration@0.1.0-preview.65
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=LibreWinForms.WindowsFormsIntegration&version=0.1.0-preview.65&prerelease
                    
Install as a Cake Addin
#tool nuget:?package=LibreWinForms.WindowsFormsIntegration&version=0.1.0-preview.65&prerelease
                    
Install as a Cake Tool

LibreWPF ProGPU Port

Telegram Community

This branch ports WPF onto the ProGPU/Silk.NET platform while reusing as much managed WPF code as possible. The public package brand is LibreWPF, with the custom SDK package LibreWPF.Sdk, so an existing WPF app can switch the project SDK and keep normal WPF source and XAML unchanged.

Current focus areas:

  • Reuse WPF managed code for application model, dependency properties, layout, controls, data binding, documents, XAML, resources, themes, and the XAML compiler.
  • Replace Windows-only MIL/D3D rendering with ProGPU WebGPU composition, shaders, Direct3D-style compatibility shims, GPU hit testing, and Silk.NET windowing/input. Direct2D/Win2D use a separate Windows-native interop and portable Canvas plan.
  • Package the runtime as a preview SDK and NuGet set that can be consumed from a local feed or NuGet.org.
  • Keep third-party validation active through basic WPF apps, Xceed Toolkit/AvalonDock, Xceed paid Toolkit/DataGrid, SciChart Showcase, ProGPU Avalonia package smoke, and no-source-change SDK smoke tests.

The maintained cross-platform priorities, compatibility policy, and ecosystem status are tracked in the LibreWPF cross-platform roadmap. The historical upstream Microsoft WPF roadmap remains below that LibreWPF section.

Linux windowing behavior

LibreWPF selects X11 when it runs in a Wayland desktop session that also exposes an XWayland DISPLAY. This preserves WPF desktop-coordinate behavior for Window.Left/Top, Window.DragMove, docking windows, and native popup placement. Set PROGPU_WPF_LINUX_WINDOWING=wayland to opt into native Wayland; native Wayland intentionally uses owner-composited popups because GLFW cannot position popup toplevels.

Libraries that need to choose a docking or floating-window strategy can call ProGpuWpfDiagnostics.TryGetWindowingCapabilities(...). The returned typed snapshot reports the actual backend and whether global positioning, interactive move, native popup windows, and owner-composited popups are available. Native Wayland reports global positioning and interactive movement as unsupported instead of silently pretending that an ignored absolute move succeeded.

Upstream WPF Synchronization

The current LibreWPF development line includes dotnet/wpf through upstream commit 1131ae499da9687fcd7c5b25cea7ac37f5885c61 (Source code updates from dotnet/dotnet (#11770), 2026-07-10). This pinned commit is the auditable upstream baseline for the next preview; later upstream commits are not implied.

Upstream updates are integrated periodically on progpu-rendering-port as explicit merge/sync commits. Each update must preserve the portable typed contracts, pass the full LibreWPF SDK and package-mode application gates, and update the baseline recorded here. Published preview tags remain immutable, so a consumer can combine the LibreWPF tag commit with this recorded upstream baseline to identify the exact managed WPF source lineage.

Getting Started: Switch From WPF To LibreWPF

LibreWPF is packaged as an MSBuild SDK so normal WPF apps can move to the ProGPU/Silk.NET platform through the project file first. Keep your application code, XAML, resources, and existing package references unchanged unless the app uses Windows-only interop or unsupported native graphics APIs.

  1. Start from an existing SDK-style WPF project and keep a clean commit of the working WPF version.

  2. Make sure the project targets the supported preview TFM:

<TargetFramework>net10.0-windows</TargetFramework>
<UseWPF>true</UseWPF>

LibreWPF.Sdk sets EnableWindowsTargeting when needed, so cross-platform builds can still use the Windows-shaped WPF API surface while running through the portable ProGPU host.

Windows is a supported LibreWPF runtime target alongside macOS and Linux. The net10.0-windows target framework preserves the WPF API contract; it does not select the Windows-only MIL renderer. Windows RIDs consume the same portable LibreWPF.Transport package and ProGPU/Silk.NET runtime graph, without RID-split runtime.win-* LibreWPF companion packages.

  1. Change only the project SDK.

Before:

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <OutputType>WinExe</OutputType>
    <TargetFramework>net10.0-windows</TargetFramework>
    <UseWPF>true</UseWPF>
  </PropertyGroup>
</Project>

After:

<Project Sdk="LibreWPF.Sdk/0.1.0-preview.65">
  <PropertyGroup>
    <OutputType>WinExe</OutputType>
    <TargetFramework>net10.0-windows</TargetFramework>
    <UseWPF>true</UseWPF>
  </PropertyGroup>
</Project>

Older projects that still use Microsoft.NET.Sdk.WindowsDesktop should make the same SDK change and keep the existing WPF properties.

  1. Keep existing app dependencies in place. For example, a Toolkit app only changes the SDK line:
<Project Sdk="LibreWPF.Sdk/0.1.0-preview.65">
  <PropertyGroup>
    <OutputType>WinExe</OutputType>
    <TargetFramework>net10.0-windows</TargetFramework>
    <UseWPF>true</UseWPF>
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="Extended.Wpf.Toolkit" Version="5.1.2" />
  </ItemGroup>
</Project>
  1. Restore and run the app normally:
dotnet restore
dotnet run
  1. Treat Windows-only interop, direct Win32 calls, D3DImage, raw DirectX use, custom HWND hosting, and unsupported native graphics APIs as the first compatibility review points. Normal WPF managed code, XAML, bindings, controls, resources, and themes should remain source-compatible as the port fills out.

NuGet Packages

The preview package set is defined in eng/progpu-preview-package-list.sh and validated by the release workflow. Tag releases rebuild the immutable tagged source against the matching ProGPU GitHub release packages, verify the complete release bundle and provenance, then run the clean Windows AnyCPU package smoke before publication. The LibreWPF Build artifact is qualified for CI consumers, but its commit-qualified source.<sha> ProGPU dependencies are not public release packages. Manual release dispatch uses the same build and validation path for recovery publication.

LibreWPF Packages

Package NuGet Purpose
LibreWPF.Sdk NuGet Custom MSBuild SDK that redirects WPF apps to the ProGPU/Silk.NET platform.
LibreWPF.ProGPU NuGet WPF-to-ProGPU host, retained/source replay bridge, Silk.NET input/windowing, and compositor adapter.
LibreWPF.Transport NuGet Ported managed WPF transport assemblies, refs, themes, XAML build tasks, and runtime metadata.
LibreWPF.Interop NuGet Shared WPF interop contracts consumed by the WPF bridge and ProGPU runtime.

ProGPU Packages

Package NuGet Purpose
ProGPU.Backend NuGet WebGPU device, swapchain, Silk.NET windowing, and platform backend services.
ProGPU.Backend.Native NuGet Managed bindings and RID-specific C++ retained compositor/native backend assets used by the MIL replacement.
ProGPU.Backend.Dawn NuGet Dawn native backend assets used by package-mode presentation hosts.
ProGPU.Text.Shaping NuGet AOT-safe OpenType shaping contracts and execution used by the text renderer.
ProGPU.DirectX NuGet Direct3D-style facade for SciChart and typed D3D interop on ProGPU/WebGPU; it is not a Direct2D COM implementation.
ProGPU.Direct2D NuGet Windows-only genuine ID2D1*/DirectWrite COM surfaces, uploaded bitmaps, brushes, geometries, stroke/layer/state resources, effects, command lists, retained text formats/layouts with range formatting and OpenType typography, and text drawing synchronized with ProGPU/Dawn, real Win2D projections, and canonical LibreWPF D3DImage.
ProGPU.Transpiler NuGet Shader/source transformation helpers used by generated GPU pipelines.
ProGPU.Compute NuGet Compute pipeline helpers for GPU effects, indexes, and acceleration structures.
ProGPU.Vector NuGet Vector paths, geometry, brushes, pens, and rasterization data models.
ProGPU.Text NuGet Text layout, glyph metrics, and GPU-ready text rendering helpers.
ProGPU.Scene NuGet Scene graph, compositor commands, retained visuals, effects, and presentation primitives.
ProGPU.Layout NuGet Measure/arrange layout substrate shared by ProGPU UI adapters.
ProGPU.Virtualization NuGet Virtualization helpers for large retained visual and item surfaces.
ProGPU.WinRT NuGet Typed WinRT-compatible value and geometry contracts shared by ProGPU surfaces.
ProGPU.Media NuGet Provider-neutral media state, timing, track, cue, and presentation contracts.
ProGPU.Media.Scene NuGet Typed media-to-scene composition and GPU surface presentation.
ProGPU.WinUI NuGet WinUI-shaped controls and app model implemented on ProGPU.
ProGPU.Avalonia NuGet Avalonia integration and compositor backend adapter used by package smoke validation.
ProGPU.SkiaSharp NuGet ProGPU-backed portable SkiaSharp compatibility shim used by drawing and imaging adapters.
ProGPU.System.Drawing.Common NuGet ProGPU-backed portable System.Drawing.Common compatibility shim for LibreWinForms and GDI-style callers.

Build And Release

PROGPU_WPF_DEV_PACKAGE_VERSION=0.1.0-preview.65 PROGPU_WPF_PROGPU_PACKAGE_VERSION=0.1.0-preview.65 ./eng/progpu-wpf-sdk-ci.sh

The SDK CI script stages ProGPU runtime packages, builds managed WPF transport assemblies, LibreWPF.ProGPU, and LibreWPF.Sdk, then audits the packages, writes the preview manifest, creates and verifies the release bundle, and runs package-mode SDK smoke tests. Public releases consume the hash-identical packages from the matching ProGPU GitHub release instead of repacking or republishing them.

Canonical WinForms integration is validated separately from the normal NuGet development path:

./eng/progpu-wpf-canonical-winforms-integration.sh

That clean-source gate requires the LibreWinForms and ProGPU submodule pins to agree, builds the upstream-derived System.Windows.Forms identity against ProGPU System.Drawing.Common, serializes the WPF reference/cycle foundation, and compiles both the real WindowsFormsIntegration reference and implementation assemblies. It treats unresolved or duplicate assembly closures as errors. The ordinary SDK/package path remains on released ProGPU 0.1.0-preview.65 packages.

For a faster source-development loop, use the same qualified managed, theme, and harness project sets through the validation graph:

for target in \
  RestoreManagedTransport BuildManagedTransport \
  RestoreThemes BuildThemes \
  RestoreHarnesses BuildHarnesses
do
  ./.dotnet/dotnet msbuild eng/ProGPU.Wpf.ValidationGraphs.proj \
    -target:${target} -property:Configuration=Debug -verbosity:minimal
done

This preserves the normal compilers, analyzers, project ordering, all seven themes, Ribbon, and all four real-WPF harness builds. Restore and build remain separate processes so generated package properties are reevaluated correctly; independent theme and harness leaves build in parallel. On the current Apple arm64 development host, a warm 13-project sequence fell from about 45.3 seconds to 9.5 seconds. This is the inner loop only: the complete eng/progpu-wpf-sdk-ci.sh package, provenance, third-party, runtime, and live GPU gates remain required before a release.

GitHub workflows:

  • LibreWPF Build runs the canonical WinForms source gate on Linux and the SDK package/no-source-change smoke on macOS.
  • LibreWPF Docs verifies README and release docs against the preview package list.
  • LibreWPF Release builds preview packages/bundle artifacts and can publish to NuGet.org with NUGET_API_KEY.

See docs/progpu-wpf-release.md, the canonical WinForms source integration report, docs/progpu-wpf-multi-window-render-device.md, and the ongoing porting reports in reports/.

Original Upstream README

Windows Presentation Foundation (WPF)

.NET Foundation Build Status codecov MIT License

Windows Presentation Foundation (WPF) is a UI framework for building Windows desktop applications.

WPF supports a broad set of application development features, including an application model, resources, controls, graphics, layout, data binding and documents. WPF uses the Extensible Application Markup Language (XAML) to provide a declarative model for application programming.

WPF's rendering is vector-based, which enables applications to look great on high DPI monitors, as they can be infinitely scaled. WPF also includes a flexible hosting model, which makes it straightforward to host a video in a button, for example.

Visual Studio's designer, as well as Visual Studio Blend, make it easy to build WPF applications, with drag-and-drop and/or direct editing of XAML markup.

As of .NET 6.0, WPF supports ARM64.

See the WPF Roadmap to learn about project priorities, status and ship dates.

WinForms is another UI framework for building Windows desktop applications that is supported on .NET (7.0.x/6.0.x). WPF and WinForms applications only run on Windows. They are part of the Microsoft.NET.Sdk.WindowsDesktop SDK. You are recommended to use the most recent version of Visual Studio to develop WPF and WinForms applications for .NET.

To build the WPF repo and contribute features and fixes for .NET 8.0, Visual Studio 2022 Preview is required.

Getting started

Status

  • We are currently developing WPF for .NET 10.

See the WPF roadmap to learn about the schedule for specific WPF components.

Test published at separate repo Tests and have limited coverage at this time. We will add more tests, however, it will be a progressive process.

The Visual Studio WPF designer is now available as part of Visual Studio 2019.

How to Engage, Contribute and Provide Feedback

Some of the best ways to contribute are to try things out, file bugs, join in design conversations, and fix issues.

.NET Framework issues

Issues with .NET Framework, including WPF, should be filed on VS developer community, or Product Support. They should not be filed on this repo.

Relationship to .NET Framework

This code base is a fork of the WPF code in the .NET Framework. .NET Core 3.0 was released with a goal of WPF having parity with the .NET Framework version. Over time, the two implementations may diverge.

The Update on .NET Core 3.0 and .NET Framework 4.8 provides a good description of the forward-looking differences between .NET Core and .NET Framework.

This update states how going forward .NET Core is the future of .NET. and .NET Framework 4.8 will be the last major version of .NET Framework.

Code of Conduct

This project uses the .NET Foundation Code of Conduct to define expected conduct in our community. Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting a project maintainer at conduct@dotnetfoundation.org.

Reporting security issues and security bugs

Security issues and bugs should be reported privately, via email, to the Microsoft Security Response Center (MSRC) secure@microsoft.com. You should receive a response within 24 hours. If for some reason you do not, please follow up via email to ensure we received your original message. Further information, including the MSRC PGP key, can be found in the Security TechCenter.

Also see info about related Microsoft .NET Core and ASP.NET Core Bug Bounty Program.

License

.NET Core (including the WPF repo) is licensed under the MIT license.

.NET Foundation

.NET Core WPF is a .NET Foundation project.

See the .NET home repo to find other .NET-related projects.

Product Compatible and additional computed target framework versions.
.NET net10.0 is compatible.  net10.0-android was computed.  net10.0-browser was computed.  net10.0-ios was computed.  net10.0-maccatalyst was computed.  net10.0-macos was computed.  net10.0-tvos was computed.  net10.0-windows was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages

This package is not used by any NuGet packages.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
0.1.0-preview.65 85 9/23/2026
0.1.0-preview.64 51 9/23/2026
0.1.0-preview.63 63 9/23/2026
0.1.0-preview.45 111 8/22/2026
0.1.0-preview.44 107 8/20/2026
0.1.0-preview.43 81 8/20/2026
0.1.0-preview.42 216 8/12/2026
0.1.0-preview.41 88 8/3/2026
0.1.0-preview.40 83 8/3/2026
0.1.0-preview.39 84 8/3/2026
0.1.0-preview.38 76 8/3/2026
0.1.0-preview.37 88 8/3/2026
0.1.0-preview.36 88 8/3/2026
0.1.0-preview.33 92 7/29/2026
0.1.0-preview.32 75 7/29/2026
0.1.0-preview.31 76 7/29/2026
0.1.0-preview.30 80 7/28/2026
0.1.0-preview.29 76 7/28/2026
0.1.0-preview.28 84 7/25/2026
0.1.0-preview.21 86 7/17/2026
Loading failed