Phase 1 - BindableProperty Foundation: - SkiaLayoutView: Convert Spacing, Padding, ClipToBounds to BindableProperty - SkiaStackLayout: Convert Orientation to BindableProperty - SkiaGrid: Convert RowSpacing, ColumnSpacing to BindableProperty - SkiaCollectionView: Convert all 12 properties to BindableProperty - SkiaShell: Convert all 12 properties to BindableProperty Phase 2 - Visual State Manager: - Add VSM integration to SkiaImageButton pointer handlers - Support Normal, PointerOver, Pressed, Disabled states Phase 3-4 - XAML/Data Binding: - Type converters for SKColor, SKRect, SKSize, SKPoint - BindingContext propagation through visual tree - Full handler registration for all MAUI controls Documentation: - README: Add styling/binding examples, update roadmap - Add RC1-ROADMAP.md with implementation details Version: 1.0.0-rc.1 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
OpenMaui Linux Platform
A comprehensive Linux platform implementation for .NET MAUI using SkiaSharp rendering.
Developed by MarketAlly LLC Lead Architect: David H. Friedel Jr.
Overview
This project brings .NET MAUI to Linux desktops with native X11/Wayland support, hardware-accelerated Skia rendering, and full platform service integration.
Key Features
- Full Control Library: 35+ controls including Button, Label, Entry, CarouselView, RefreshView, SwipeView, and more
- Native Integration: X11 and Wayland display server support
- Accessibility: AT-SPI2 screen reader support and high contrast mode
- Platform Services: Clipboard, file picker, notifications, global hotkeys, drag & drop
- Input Methods: IBus and XIM support for international text input
- High DPI: Automatic scale factor detection for GNOME, KDE, and X11
Quick Start
Installation
# Install the templates
dotnet new install OpenMaui.Linux.Templates
# Create a new project (choose one):
dotnet new openmaui-linux -n MyApp # Code-based UI
dotnet new openmaui-linux-xaml -n MyApp # XAML-based UI (recommended)
cd MyApp
dotnet run
Manual Installation
dotnet add package OpenMaui.Controls.Linux --prerelease
XAML Support
OpenMaui fully supports standard .NET MAUI XAML syntax. Use the familiar XAML workflow:
<!-- MainPage.xaml -->
<ContentPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
x:Class="MyApp.MainPage">
<VerticalStackLayout>
<Label Text="Hello, OpenMaui!" FontSize="32" />
<Button Text="Click me" Clicked="OnButtonClicked" />
<Entry Placeholder="Enter text..." />
<Slider Minimum="0" Maximum="100" />
</VerticalStackLayout>
</ContentPage>
// MauiProgram.cs
var builder = MauiApp.CreateBuilder();
builder
.UseMauiApp<App>()
.UseOpenMauiLinux(); // Enable Linux with XAML support
Supported Controls
| Category | Controls |
|---|---|
| Basic | Button, Label, Entry, Editor, CheckBox, Switch, RadioButton |
| Layout | StackLayout, ScrollView, Border, Page |
| Selection | Picker, DatePicker, TimePicker, Slider, Stepper |
| Display | Image, ImageButton, ActivityIndicator, ProgressBar |
| Collection | CollectionView, CarouselView, IndicatorView |
| Gesture | SwipeView, RefreshView |
| Navigation | NavigationPage, TabbedPage, FlyoutPage, Shell |
| Menu | MenuBar, MenuFlyout, MenuItem |
| Graphics | GraphicsView, Border |
Platform Services
| Service | Description |
|---|---|
ClipboardService |
System clipboard access |
FilePickerService |
Native file open dialogs |
FolderPickerService |
Folder selection dialogs |
NotificationService |
Desktop notifications (libnotify) |
GlobalHotkeyService |
System-wide keyboard shortcuts |
DragDropService |
XDND drag and drop protocol |
LauncherService |
Open URLs and files |
ShareService |
Share content with other apps |
SecureStorageService |
Encrypted credential storage |
PreferencesService |
Application settings |
BrowserService |
Open URLs in default browser |
EmailService |
Compose emails |
SystemTrayService |
System tray icons |
Accessibility
- AT-SPI2: Screen reader support for ORCA and other assistive technologies
- High Contrast: Automatic detection and color palette support
- Keyboard Navigation: Full keyboard accessibility
Requirements
- .NET 9.0 SDK or later
- Linux (kernel 5.4+)
- X11 or Wayland
- SkiaSharp native libraries
System Dependencies
Ubuntu/Debian:
sudo apt-get install libx11-dev libxrandr-dev libxcursor-dev libxi-dev libgl1-mesa-dev libfontconfig1-dev
Fedora:
sudo dnf install libX11-devel libXrandr-devel libXcursor-devel libXi-devel mesa-libGL-devel fontconfig-devel
Documentation
Sample Applications
Full sample applications are available in the maui-linux-samples repository:
| Sample | Description |
|---|---|
| TodoApp | Task manager with NavigationPage, XAML data binding, CollectionView |
| ShellDemo | Control showcase with Shell navigation and flyout menu |
Quick Example
using OpenMaui.Platform.Linux;
var app = new LinuxApplication();
app.MainPage = new ContentPage
{
Content = new VerticalStackLayout
{
Spacing = 10,
Children =
{
new Label
{
Text = "Welcome to MAUI on Linux!",
FontSize = 24
},
new Button
{
Text = "Click Me"
},
new Entry
{
Placeholder = "Enter your name"
}
}
}
};
app.Run();
Building from Source
git clone https://git.marketally.com/open-maui/maui-linux.git
cd maui-linux
dotnet build
dotnet test
Contributing
We welcome contributions! Please see our Contributing Guide for details.
Architecture
┌─────────────────────────────────────────────────┐
│ .NET MAUI │
│ (Virtual Views) │
├─────────────────────────────────────────────────┤
│ Handlers │
│ (Platform Abstraction) │
├─────────────────────────────────────────────────┤
│ Skia Views │
│ (SkiaButton, SkiaLabel, etc.) │
├─────────────────────────────────────────────────┤
│ SkiaSharp Rendering │
│ (Hardware Accelerated) │
├─────────────────────────────────────────────────┤
│ X11 / Wayland │
│ (Display Server) │
└─────────────────────────────────────────────────┘
Styling and Data Binding
OpenMaui supports the full MAUI styling and data binding infrastructure:
XAML Styles
<ContentPage.Resources>
<ResourceDictionary>
<Color x:Key="PrimaryColor">#5C6BC0</Color>
<Style TargetType="Button">
<Setter Property="BackgroundColor" Value="{StaticResource PrimaryColor}" />
<Setter Property="TextColor" Value="White" />
</Style>
</ResourceDictionary>
</ContentPage.Resources>
Data Binding
<Label Text="{Binding Title}" />
<Entry Text="{Binding Username, Mode=TwoWay}" />
<Button Command="{Binding SaveCommand}" IsEnabled="{Binding CanSave}" />
Visual State Manager
All interactive controls support VSM states: Normal, PointerOver, Pressed, Focused, Disabled.
<Button Text="Hover Me">
<VisualStateManager.VisualStateGroups>
<VisualStateGroup x:Name="CommonStates">
<VisualState x:Name="Normal">
<VisualState.Setters>
<Setter Property="BackgroundColor" Value="#2196F3"/>
</VisualState.Setters>
</VisualState>
<VisualState x:Name="PointerOver">
<VisualState.Setters>
<Setter Property="BackgroundColor" Value="#42A5F5"/>
</VisualState.Setters>
</VisualState>
</VisualStateGroup>
</VisualStateManager.VisualStateGroups>
</Button>
Roadmap
- Core control library (35+ controls)
- Platform services integration
- Accessibility (AT-SPI2)
- Input method support (IBus/XIM)
- High DPI support
- Drag and drop
- Global hotkeys
- BindableProperty for all controls
- Visual State Manager integration
- XAML styles and StaticResource
- Data binding (OneWay, TwoWay, IValueConverter)
- Complete Wayland support
- Hardware video acceleration
- GTK4 interop layer
License
Copyright (c) 2025 MarketAlly LLC. Licensed under the MIT License - see the LICENSE file for details.
Acknowledgments
- MarketAlly LLC - Project development and maintenance
- SkiaSharp - 2D graphics library
- .NET MAUI - Cross-platform UI framework
- The .NET community
MIT License Copyright (c) 2025 MarketAlly LLC Lead Architect: David H. Friedel Jr. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.