NetForms
System.Windows.Forms · .NET 10 · Windows + Linux

WinForms, Windows only everywhere.

NetForms is Windows Forms for .NET 10 that runs the same on Windows and Linux. Same namespaces, same Application.Run(new MainForm()), same InitializeComponent(). You change the project file, not the code.

Inventory
ItemQtyWarehouse
Copper wire 2.5 mm²1,200 mA-3
Circuit breaker 16 A84B-1
Cable tray 60×5036A-1
What happens today

A WinForms project on Linux fails twice. Then you fix one file.

Build it
$ dotnet build
error NETSDK1100: To build a project
targeting Windows on this operating
system, set the EnableWindowsTargeting
property to true.
Force it
$ dotnet run -p:EnableWindowsTargeting=true
You must install or update .NET
to run this application.
Framework: 'Microsoft.WindowsDesktop.App'
No frameworks were found.
Change the project file
-  <TargetFramework>net8.0-windows</…>
-  <UseWindowsForms>true</…>
+  <TargetFramework>net10.0</…>
+  <PackageReference Include="NetForms"
+     Version="0.1.5" />

The same app, running on Linux

A project exactly as Visual Studio creates it, after netforms-convert --apply, built from the NuGet packages and started under X11. Not one line of C# changed. netforms-convert also moves .NET Framework 4.x projects and tells you up front what will not carry over, with file and line.

HelloForms window with a label and a Click me button, running on Linux
HelloForms, Ubuntu 24.04, .NET 10
Painted by NetForms, designed in VS Code

Your controls, your designer.

Every control is drawn by NetForms with SkiaSharp, so a form looks the same on both systems. Avalonia 12 does only what Win32 did: windows, input, IME, clipboard, native file dialogs, DPI. The VS Code extension opens any *.Designer.cs as a canvas and writes it back the way Visual Studio does.

The NetForms designer in VS Code: toolbox, form canvas and property grid
NetForms Designer: toolbox, component tray, properties and events, snap lines. Works offline.
Control gallery: tabs, group box, check boxes, radio buttons, text boxes, combo boxes, numeric up-down, track bar, progress bar, list box
The control gallery. The golden test image is pixel-identical on Windows and Linux.
Release 0.1.5 · measured, not guessed

How close to WinForms is it?

Every number comes from a test that runs in CI: the API is compared with the reference assemblies of the real WinForms, behaviour is diffed against it on Windows, real projects are converted and built.

761 / 1254WinForms and System.Drawing types with the complete API; 141 more partial
641 / 641tests pass; layout, event order and text metrics are diffed against the real WinForms
7 / 7.NET Framework 4.8 business apps convert and build with no manual edit
31 / 45open-source WinForms projects convert and build with no manual edit
Works
LayoutAnchor, Dock, TableLayoutPanel, FlowLayoutPanel, AutoSize, AutoScroll
ControlsButton to DataGridView: text, lists, trees, ListView (all views), RichTextBox, pickers, MDI
DataBindingSource, DataSet and DataTable, master-detail, DataGridView editing with its events
MenusMenuStrip, ToolStrip, StatusStrip, ContextMenuStrip, NotifyIcon
DrawingSystem.Drawing on Skia, TextRenderer metrics, custom OnPaint
Resources.resx images and icons, Properties.Settings, app.config
PrintingPrintDocument, print, page setup and preview dialogs; CUPS on Linux, winspool on Windows, PDF
Drag and dropDoDragDrop, DragEnter/Over/Drop, files and text from other applications
Designeryour own controls and NuGet control libraries in the toolbox, live on the canvas
Not yet
Accessibilitymodel only AccessibleObject is there; screen readers do not see controls yet
Drag outpartial drops from other apps arrive; a drag cannot leave the application yet
WebBrowsermissing the Internet Explorer control; WebView2 is Windows-only
Dark theme, DPIpartial one light theme; scaled, but DeviceDpi is 96
Win32by design Handle is zero, WndProc is never called

Full compatibility guide · API coverage, type by type

.NET 10 SDK · Windows 10+ or Linux x64/arm64

Get started

The API documentation is Microsoft's: everything on learn.microsoft.com/dotnet/desktop/winforms applies.

New app

# project and item templates
dotnet new install NetForms.Templates::0.1.5
dotnet new netforms -n MyApp
cd MyApp
dotnet run

Existing WinForms app

# report first, then --apply
dotnet tool install -g NetForms.Convert
netforms-convert MyApp.csproj
netforms-convert MyApp.csproj --apply
dotnet run

Step by step for Windows, Ubuntu, Debian, Fedora, Astra Linux, RED OS and ALT, VS Code and closed networks: Install and set up.

Visual designer: install NetForms Designer from the VS Code Marketplace or Open VSX (netforms.netforms-designer) and open any *.Designer.cs.