A complete Linux platform for .NET MAUI 10.0.120: GPU-rendered, native on Wayland and X11, and integrated with the desktop. Your existing XAML, code and libraries run unchanged, and dotnet/maui's own device tests pass with none failing.
dotnet add package OpenMaui.Controls.Linux
Skia rasterises on the GPU through OpenGL ES on EGL, or opt in to Vulkan, with an automatic CPU raster fallback. Frames repaint only what changed, an idle window draws nothing, and WebView and hardware-decoded video frames arrive as zero-copy DMA-BUF textures. Measured on identical workloads: 2.4x faster frames and tail latency under 4 ms. Fractional HiDPI is pixel-exact, and a window moved to a monitor of another scale re-renders at the new density. Startup is measured too: GTK and its theme are only set up when a WebView or GTK widget needs them (one app's first frame went from 4.1 s to 1.4 s), and apps published ReadyToRun start over a second sooner. Per-frame cost has test budgets, so a redraw or resize regression shows up as a failing test.
Native Wayland clipboard, bidirectional drag-and-drop across windows, compositor IME (text-input-v3 with preedit and surrounding text) and touchscreens on Wayland and X11. Native D-Bus desktop portals for file choosers, links, notifications, the camera and theme settings, plus system tray, CUPS printing, global hotkeys, per-app secure storage on the Secret Service, desktop media keys, startup notification and window activation, multiple top-level windows and a WebView composited inside the Skia tree, with Blazor Hybrid and HybridWebView on top.
dotnet/maui's own device tests run unchanged against OpenMaui's handlers: 2,640 Core, Controls and Essentials tests from MAUI 10.0.120, none failing, so the assertions are MAUI's, not ours. The handlers implement MAUI's own handler interfaces and Map signatures, so mapper customisations and handlers you register work as on the other platforms. A scorecard generated from every test run covers the 19 categories Microsoft publishes for its own Linux backend, a stub scan reviews 2,354 methods that MAUI, CommunityToolkit and Syncfusion leave empty in their platform-neutral builds, and golden screenshots at 1.0x to 2.0x catch visual regressions.
AT-SPI2 screen reader support for ORCA and other assistive technologies, with layouts exposing their children and SemanticOrderView setting the reading order, high contrast mode detection, and full keyboard navigation with Tab and Shift+Tab. Build inclusive applications that work for everyone.
Add the OpenMaui packages and one UseLinux() call: your XAML, view models, bindings, dependency injection, Shell routes, styles and resources run as they are. Linux is a plain net10.0 target beside your Android, iOS, Mac and Windows targets in the same project, so there is no second codebase to maintain. Custom handlers and mapper tweaks port over because the Linux handlers implement MAUI's own handler interfaces, and the libraries you already use, from CommunityToolkit to LiveCharts2, ReactiveUI and Prism, come along unmodified.
Versions follow MAUI's: OpenMaui 10.0.120.1 is built on MAUI 10.0.120, shipped two days after Microsoft released it, and passes dotnet/maui's own device tests from that release. Reported issues get fixed fast: two community reports with precise repros were fixed, covered by regression tests and released within two days. Every breaking change is called out in the changelog and the migration guide tells you what to update, so moving to a new release is a version bump, not a project.
Complete control library: Button, Label with FormattedText, Entry, CollectionView with grouping, drag-to-reorder and grids, ListView with in-place updates, TableView, CarouselView with snap points and bounce, RefreshView, SwipeView, AbsoluteLayout, FlexLayout, shapes with gradients, ControlTemplate, NavigationPage with TitleView, Shell with Windows' top navigation pane, its drop-downs and SearchHandler, modal pages, window overlays and custom title bars, MenuBar and context flyouts, tooltips, alerts, action sheets and prompts: all rendered in Skia, all driven through MAUI's own handlers, animation manager and VisualStateManager.
A compatibility suite runs popular MAUI libraries unmodified through their documented registration: CommunityToolkit.Maui (Popup, Expander, TouchBehavior, DrawingView with image export, Toast and Snackbar as desktop notifications, launcher badges), CommunityToolkit.Mvvm, MediaElement, SkiaSharp views, LiveCharts2, ReactiveUI, Prism and DI-resolved pages. 10 of 11 evaluated libraries run unmodified; results are published in the scorecard alongside the core items. Handlers you register with ConfigureMauiHandlers are used as on the other platforms, and the Linux handlers implement MAUI's handler interfaces, Map signatures and UpdateX platform extensions, so custom handler code ports over.
Syncfusion ships only stub handlers for Linux. The opt-in OpenMaui.Controls.Linux.Syncfusion package makes them work, with the mouse and keyboard handling of their Windows builds: DataGrid (navigation, sorting, resizing and moving columns, right-click), Scheduler (resources side by side in day, week and month views, drag and resize appointments), ImageEditor, Toolbar, lists and trees with sticky group headers, every chart series, ComboBox and Autocomplete, numeric and masked entries, Carousel, Rotator, SignaturePad, PullToRefresh, SfPopup and its dialogs, and SfPdfViewer with the Pdf package. One call: UseLinuxSyncfusion(). Bring your own Syncfusion license.
An IRenderTarget seam puts Skia's OpenGL ES backend on an EGL surface per window, zero-copy on Wayland, with an opt-in Vulkan target that picks the compositor's GPU on hybrid laptops. Partial damage repaints only what changed. Raster fallback is automatic, OPENMAUI_RENDERER forces any target, and a headless benchmark suite with performance gates keeps the numbers honest.
First-class protocols instead of subprocess workarounds: text-input-v3 IME with preedit and surrounding text, wl_data_device clipboard and drag-and-drop, primary-selection middle-click paste, touch, xdg-activation, fractional scaling that follows the monitor, and Skia-drawn client-side decorations that host MAUI's custom TitleBar, on GNOME, on compositors that draw their own frames such as KDE, and on X11. Desktop portals are spoken natively over D-Bus.
WPE WebKit renders pages headlessly and each frame is composited in the Skia tree, zero-copy on the GPU: no GTK widget, no reparenting, identical on Wayland and X11. Context menus, clipboard, dialogs, file chooser, downloads with the desktop's Save dialog, permissions, spell checking, cursors and real KeyboardEvent.code values all route through the platform. HybridWebView works as on the other platforms: your web app served from Resources/Raw, MAUI's JavaScript bridge, InvokeJavaScriptAsync, InvokeDotNet, raw messages, and WebResourceRequested for the app origin and, as on Windows, for http and https requests. The opt-in OpenMaui.Controls.Linux.Blazor package hosts BlazorWebView on the same engine.
All 36 Essentials services, verified by dotnet/maui's own Essentials device tests: per-app SecureStorage on the Secret Service, permissions, file results from pickers, app info from your project file, the launcher, battery and display. Motion and environment sensors read the kernel's devices where the hardware exists; MediaPicker captures photos and video from the camera and applies its resize and compression options; Contacts reads GNOME's address books through Evolution Data Server and KDE's contact stores; Geocoding works against the Nominatim service you choose.
docs/COMPATIBILITY.md is regenerated from every test run by tools/Scorecard: 19 categories, 125 items, each covered only when its mapped tests pass, plus a third-party libraries section. dotnet/maui's Core, Controls and Essentials device tests run in suites of their own, the stub scan fails on any stub a library update brings in that nobody has reviewed, and golden screenshot tests render every control and whole sample pages at 1.0x, 1.25x, 1.5x, 1.75x and 2.0x against committed baselines. 5,500+ tests, no display required, and every change to the public API is listed in the changelog and migration guide.
Application.OpenWindow creates real native windows with their own rendering, input and drag-and-drop at parity on X11 and Wayland, in native or GTK mode, and Application.ActivateWindow brings one to the front. Opt-in packages add MediaElement on GStreamer with zero-copy VA-API decode, its events and states as on Windows, playback speed, playback controls, HTTP headers on HLS and DASH streams, and desktop media keys over MPRIS; Maps with OpenStreetMap street tiles plus satellite and hybrid layers; and PDF on Google's PDFium, bundled for x64 and ARM64: a scrolling, zoomable SkiaPdfView, page rendering and text extraction.
dotnet new templates that publish ReadyToRun for a faster start, XAML and C# Hot Reload under dotnet watch, a Live Visual Tree inspector, openmaui doctor for a one-shot environment report, and one-command packaging: openmaui-appimage --project ./MyApp publishes, packages and generates the installer with host-dependency checks, signing and self-update, as an AppImage, a deb or an rpm (--format all builds every one). x64 and ARM64.
Dark mode and the accent colour come from the desktop and follow it live, through the Settings portal or GNOME's and KDE's own settings: switch the desktop to dark and the app follows, through MAUI's AppThemeBinding and RequestedThemeChanged as on the other platforms, unless the app has set UserAppTheme itself. High contrast is detected, GTK dialogs and menus take the same theme, and text falls back to the installed fonts for emoji, CJK and the other scripts your app's fonts lack.
When something looks wrong on a user's machine, ask for one command: OPENMAUI_DOCTOR=1 ./MyApp reports .NET, the session and compositor with its Wayland globals, EGL and GL, and the render target that will be chosen, before any window opens. OPENMAUI_DUMP_TREE writes the view tree with bounds and sizes, OPENMAUI_FIRST_CHANCE logs every exception where it is thrown, even the ones a library swallows, OPENMAUI_RENDER_STATS prints frame times (p50, p95, p99), and OPENMAUI_RENDERER forces the GPU, Vulkan or raster target to rule a driver in or out.
Install the templates and have a GPU-rendered native Linux desktop app running in three commands, Blazor Hybrid included, then ship it as an AppImage with one more. Bring your CommunityToolkit, LiveCharts2 and Syncfusion controls along. MIT licensed, built on MAUI 10.0.120, 5,500+ automated tests, dotnet/maui's own device tests passing, 125/125 compatibility scorecard items covered.
Install NowThe .NET MAUI on Linux landscape. OpenMaui implements the display protocols natively and renders with Skia on the GPU; the GTK-based alternatives inherit their capabilities from GTK.
| OpenMaui | MAUI Labs GTK4 | MauiGtk | GnomeMaui | |
|---|---|---|---|---|
| Platform foundation | ||||
| MAUI control coverage | 125/125 scorecard items, computed from 5,500+ tests; dotnet/maui's own Core and Controls device tests: 2,359 run, 0 failing | Very good (self-reported) | Moderate | Early |
| Conformance evidence | dotnet/maui's own device tests run unchanged (MAUI 10.0.120 Core, Controls, Essentials: 2,640, 0 failing), generated scorecard in the repo, third-party stub scan, golden screenshots at 1.0x-2.0x, end-to-end WebView tests | Feature table | - | - |
| MAUI handler API | MAUI's handler interfaces and Map signatures; registered handlers used as on every MAUI platform | - | - | - |
| Wayland | Native implementation | Via GTK4 | Via GTK | Via GTK |
| X11 | Native implementation | Via GTK4 | Via GTK | Via GTK |
| Rendering | Skia | Native GTK widgets | GTK | Skia/GTK |
| GPU presentation | Skia OpenGL ES via EGL (zero-copy on Wayland) or Vulkan, partial damage, raster fallback | GTK4 GSK | GTK | GTK |
| Consistent appearance across distros | Strong | Depends on GTK/theme | Depends on GTK | Strong potential |
| Fractional Wayland scaling | Explicit support, follows the monitor at runtime | GTK handles it | GTK | GTK |
| ARM64 | Yes (x64 and ARM64 native shims) | - | - | - |
| Ecosystem | ||||
| Third-party MAUI libraries | 10 of 11 tested libraries run unmodified (CommunityToolkit, LiveCharts2, ReactiveUI, Prism, Syncfusion, ...), published in the scorecard; a stub scan reviews what their platform-neutral builds leave out | - | - | - |
| Syncfusion controls | Opt-in bridge with the Windows builds' mouse and keyboard handling: DataGrid, Scheduler (resource view, drag and resize), ImageEditor, Toolbar, lists, charts, inputs, carousel, signature pad, popups, PDF viewer | - | - | - |
| Desktop integration | ||||
| Linux desktop services | All 36 Essentials services; dotnet/maui's Essentials device tests pass (sensors, camera, and GNOME and KDE contacts where the desktop has them) | 21 done + 2 partial of 36 Essentials | Limited | Early |
| Desktop portals | Native D-Bus | Via GTK | Via GTK | - |
| Accessibility | AT-SPI2, Tab navigation | GTK accessibility | GTK | GTK |
| Drag/drop and clipboard | Native protocols, across windows | GTK | GTK | GTK |
| Touch | Wayland (wl_touch) and X11 (XInput 2.2) | GTK | GTK | GTK |
| Printing | CUPS | Limited/evolving | Limited | - |
| System tray / global hotkeys | Yes | Limited/evolving | Limited | - |
| Web and beyond | ||||
| WebView | WPE WebKit composited in the Skia tree, zero-copy on the GPU, native Wayland and X11; public browser API for libraries (navigation, downloads, capture, save as PDF); HybridWebView with MAUI's JavaScript bridge and http/https WebResourceRequested | WebKitGTK widget | WebKitGTK widget | - |
| Blazor Hybrid | Yes (OpenMaui.Controls.Linux.Blazor on WPE) | Yes (WebKitGTK) | - | Demonstrated |
| PDF viewing | PDFium bundled (x64, ARM64): SkiaPdfView, page rendering and text, SfPdfViewer works | - | - | - |
| Maps | Yes | - | - | - |
| MediaElement | GStreamer, zero-copy VA-API decode; events, speed and playback controls as on Windows; desktop media keys (MPRIS) | - | - | - |
| Multi-window | Yes, with window activation | Via GTK4 | Via GTK | - |
| Packaging | One command: AppImage, deb and rpm | - | - | - |