← home

WinForms alternatives compared

Majorsilence.Forms vs .NET MAUI, Avalonia, Uno Platform, Eto.Forms, WPF and Wine — what each one actually asks of an existing WinForms codebase.

If you have a working WinForms application and need it on macOS or Linux, the real question isn’t “which UI framework is best” — it’s “how much of my existing code survives?” Every option below is a good framework. They just ask for very different amounts of your codebase.

The short version

Option UI paradigm Linux macOS Mobile / web What happens to your existing WinForms code
Majorsilence.Forms WinForms (Form, controls, events, Designer files) Yes Yes Browser, Android, iOS (early) Kept. Namespace change + a compatibility layer; the migrator automates the mechanical part
Avalonia XAML + MVVM Yes Yes Yes Rewritten as XAML views and view models
Uno Platform WinUI XAML + MVVM Yes Yes Yes Rewritten as WinUI XAML
.NET MAUI XAML + MVVM No official support Yes (Mac Catalyst) Yes Rewritten, and re-scoped for a mobile-first control set
Eto.Forms Its own forms-style .NET API, native widgets per OS Yes Yes No Rewritten against Eto’s API — familiar in shape, but not source-compatible with WinForms
WPF XAML + MVVM No No No Rewritten, and still Windows-only
Wine None — runs the Windows binary Yes Yes No Untouched, but you are shipping an emulated Windows app, not a native one

Majorsilence.Forms is built on two of these

Worth being explicit, because it is a common misreading: Majorsilence.Forms is not competing with Avalonia or Uno Platform. It uses them. Every control is drawn by Majorsilence.Forms itself with SkiaSharp, and Avalonia (or Uno) is the host underneath that creates the window, runs the message loop and presents the Skia surface. See Platform backends.

So the choice isn’t “Majorsilence.Forms or Avalonia”. It is: do you write Avalonia’s XAML directly, or do you keep writing WinForms and let Avalonia be the plumbing?

Option by option

.NET MAUI

Microsoft’s official cross-platform successor to Xamarin.Forms, and the answer most search results will give you. It is a strong choice for a new mobile-and-desktop app.

For an existing WinForms LOB application it’s usually the hardest path: there is no official Linux support, the control set is mobile-first (no DataGridView equivalent, a different windowing and dialog model), and every screen is rebuilt in XAML with a view-model layer that your WinForms code almost certainly doesn’t have. There is no meaningful reuse of *.Designer.cs files.

Avalonia

A mature, genuinely cross-platform XAML framework — desktop, mobile and WebAssembly — with excellent Linux support and a Skia renderer. If you want a modern XAML stack and are prepared to rewrite the UI layer, this is the strongest general answer, and it’s the default host Majorsilence.Forms runs on.

Note that Avalonia’s commercial XPF product is a compatibility layer for WPF, not WinForms; it doesn’t help a System.Windows.Forms codebase.

Uno Platform

Implements the WinUI/UWP XAML API across desktop, mobile and WebAssembly, with very broad reach and strong tooling. Same shape of decision as Avalonia: excellent target, full UI rewrite from WinForms. It’s also available as a Majorsilence.Forms backend if your organization is already invested in it.

Eto.Forms

The closest thing in spirit to this project outside it: a cross-platform .NET UI library with a forms-and-controls API rather than XAML, binding to each platform’s native widgets (WinForms on Windows, Cocoa on macOS, GTK on Linux). Native look per OS is a real advantage.

But its API is its own — Eto.Forms.Form is not System.Windows.Forms.Form, layout is container-based rather than coordinate/anchor-based, and there is no path for existing designer files. You rewrite, in a familiar idiom.

Mono’s System.Windows.Forms

Mono did ship a WinForms reimplementation, which is why “WinForms works on Linux” turns up in old forum threads. It targeted the .NET Framework era, was never carried into modern .NET, and is not a viable target for a new port today.

Wine

Wine runs your unmodified Windows binary on Linux and macOS. Nothing changes in your code, which is genuinely attractive — until you have to support it: you ship a Windows app plus a compatibility runtime, you inherit whatever Wine’s Win32/GDI+ coverage happens to be, integration with the host OS is approximate, and installers and updates get complicated. It’s a deployment workaround, not a platform strategy.

Staying on WPF

WPF is a fine framework and a modest conceptual step from WinForms, but it is Windows-only. It solves “modernize the UI”; it does not solve “run on macOS and Linux”.

When Majorsilence.Forms is the right answer

When it isn’t

Next