/uno-platform
Build cross-platform .NET applications with Uno Platform targeting WebAssembly, iOS, Android, macOS, Linux, and Windows from a single XAML/C# codebase. USE FOR: building cross-platform apps from a single C# and XAML codebase; targeting WebAssembly, iOS, Android, macOS, Linux,
$ npx -y skills add managedcode/dotnet-skills --skill uno-platform --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
- Fires itselfAuto-invocation. Claude auto-loads it when your prompt matches the work.Auto-invocation is when the right skill fires by itself at the right moment, driven by a FLOW.md router and a hook, instead of you invoking it by name. It is the difference between a skill being installed and a skill actually getting used.Read the full definition →
- You can call itInvoke it directly when you want it.
- Slash command
/uno-platform
Context preview
The summary Claude sees to decide when to auto-load this skill.
Build cross-platform .NET applications with Uno Platform targeting WebAssembly, iOS, Android, macOS, Linux, and Windows from a single XAML/C# codebase. USE FOR: building cross-platform apps from a single C# and XAML codebase; targeting WebAssembly, iOS, Android, macOS, Linux,
SKILL.md
uno-platform.SKILL.mdname: uno-platform
description: "Build cross-platform .NET applications with Uno Platform targeting WebAssembly, iOS, Android, macOS, Linux, and Windows from a single XAML/C# codebase. USE FOR: building cross-platform apps from a single C# and XAML codebase; targeting WebAssembly, iOS, Android, macOS, Linux, and Windows simultaneously; migrating WPF or UWP. DO NOT USE FOR: unrelated stacks; generic tasks that do not need this specific guidance. INVOKES: inspect the repository context, edit targeted files, and run relevant build, test, lint, or validation commands when changes are made."
compatibility: "Requires Uno Platform SDK and workloads for target platforms."
Uno Platform
Trigger On
- building cross-platform apps from a single C# and XAML codebase
- targeting WebAssembly, iOS, Android, macOS, Linux, and Windows simultaneously
- migrating WPF or UWP applications to cross-platform
- implementing pixel-perfect UI across all platforms
- using WinUI/UWP APIs on non-Windows platforms
Documentation
- [Uno Platform Overview](https://platform.uno/docs/articles/intro.html)
- [Getting Started](https://platform.uno/docs/articles/get-started.html?tabs=windows)
- [Using Uno Platform with WinUI](https://platform.uno/docs/articles/winui-doc-links.html)
- [Platform-Specific Code](https://platform.uno/docs/articles/platform-specific-xaml.html)
- [MVUX Pattern](https://platform.uno/docs/articles/external/uno.extensions/doc/Overview/Mvux/Overview.html)
References
See detailed examples in the `references/` folder:
- [`patterns.md`](references/patterns.md) — MVUX, XAML, navigation, and performance patterns
Platform Support
| Platform | Rendering | Notes | |----------|-----------|-------| | Windows | WinUI 3 | Native Windows App SDK | | WebAssembly | Skia/Canvas | Runs in browser | | iOS | Skia/Metal | Native iOS app | | Android | Skia/OpenGL | Native Android app | | macOS | Skia/Metal | Mac Catalyst or AppKit | | Linux | Skia/X11 | GTK or Framebuffer |
Workflow
1. **Choose the right template** — Uno Platform offers various templates for different scenarios 2. **Understand rendering modes** — Skia vs native rendering affects performance and fidelity 3. **Apply MVVM or MVUX patterns** — keep views dumb, logic in ViewModels 4. **Handle platform differences** — use conditional XAML or partial classes 5. **Test on all target platforms** — behavior varies across platforms
Project Structure
MyApp/
├── MyApp/ # Shared code
│ ├── App.xaml # Application entry
│ ├── MainPage.xaml # Main page
│ ├── Presentation/ # ViewModels (MVUX/MVVM)
│ ├── Business/ # Business logic
│ └── Services/ # Platform services
├── MyApp.Wasm/ # WebAssembly head
├── MyApp.Mobile/ # iOS and Android head
├── MyApp.Skia.Gtk/ # Linux head
├── MyApp.Skia.WPF/ # Windows Skia head
└── MyApp.Windows/ # Native WinUI head
MVUX Pattern (Uno Extensions)
Model Definition
public partial record MainModel
{
public IListFeed<TodoItem> Items => ListFeed.Async(LoadItems);
private async ValueTask<IImmutableList<TodoItem>> LoadItems(CancellationToken ct)
{
var items = await _todoService.GetAllAsync(ct);
return items.ToImmutableList();
}
}View Binding with FeedView
<Page xmlns:uen="using:Uno.Extensions.Navigation.UI">
<utu:FeedView Source="{Binding Items}">
<utu:FeedView.ValueTemplate>
<DataTemplate>
<ListView ItemsSource="{Binding}">
<ListView.ItemTemplate>
<DataTemplate x:DataType="local:TodoItem">
<TextBlock Text="{Binding Title}" />
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
</DataTemplate>
</utu:FeedView.ValueTemplate>
<utu:FeedView.ProgressTemplate>
<DataTemplate>
<ProgressRing IsActive="True" />
</DataTemplate>
</utu:FeedView.ProgressTemplate>
</utu:FeedView>
</Page>Classic MVVM with MVVM Toolkit
ViewModel
public partial class MainViewModel(ITodoService todoService) : ObservableObject
{
[ObservableProperty]
private ObservableCollection<TodoItem> _items = [];
[ObservableProperty]
private bool _isLoading;
[RelayCommand]
private async Task LoadItemsAsync()
{
IsLoading = true;
try
{
var items = await todoService.GetAllAsync();
Items = new ObservableCollection<TodoItem>(items);
}
finally
{
IsLoading = false;
}
}
}Platform-Specific Code
Conditional XAML
<TextBlock Text="Welcome"
xmlns:win="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:android="http://uno.ui/android"
xmlns:ios="http://uno.ui/ios"
xmlns:wasm="http://uno.ui/wasm">
<win:TextBlock.Foreground>
<SolidColorBrush Color="Blue" />
</win:TextBlock.Foreground>
<android:TextBlock.Foreground>
<SolidColorBrush Color="Green" />
</android:TextBlock.Foreground>
</TextBlock>Partial Classes
// Services/DeviceService.cs (shared)
public partial class DeviceService
{
public partial string GetDeviceInfo();
}
// Services/DeviceService.wasm.cs
public partial class DeviceService
{
public partial string GetDeviceInfo() => "WebAssembly";
}
// Services/DeviceService.Android.cs
public partial class DeviceService
{
public partial string GetDeviceInfo() =>
$"Android {Android.OS.Build.VERSION.Release}";
}Hot Reload and Development
// Enable Hot Reload in App.xaml.cs
public App()
{
this.InitializeComponent();
#if DEBUG
// Enable Hot Reload
this.EnableHotReload();
#endif
}Ant
Read more
name: uno-platform description: "Build cross-platform .NET applications with Uno Platform targeting WebAssembly, iOS, Android, macOS, Linux, and Windows from a single XAML/C# codebase. USE FOR: building cross-platform apps from a single C# and XAML codebase; targeting WebAssembly, iOS, Android, macOS, Linux, and Windows simultaneously; migrating WPF or UWP. DO NOT USE FOR: unrelated stacks; generic tasks that do not need this specific guidance. INVOKES: inspect the repository context, edit targeted files, and run relevant build, test, lint, or validation commands when changes are made." compatibility: "Requires Uno Platform SDK and workloads for target platforms."
Uno Platform
Trigger On
- building cross-platform apps from a single C# and XAML codebase
- targeting WebAssembly, iOS, Android, macOS, Linux, and Windows simultaneously
- migrating WPF or UWP applications to cross-platform
- implementing pixel-perfect UI across all platforms
- using WinUI/UWP APIs on non-Windows platforms
Documentation
- [Uno Platform Overview](https://platform.uno/docs/articles/intro.html)
- [Getting Started](https://platform.uno/docs/articles/get-started.html?tabs=windows)
- [Using Uno Platform with WinUI](https://platform.uno/docs/articles/winui-doc-links.html)
- [Platform-Specific Code](https://platform.uno/docs/articles/platform-specific-xaml.html)
- [MVUX Pattern](https://platform.uno/docs/articles/external/uno.extensions/doc/Overview/Mvux/Overview.html)
References
See detailed examples in the `references/` folder:
- [`patterns.md`](references/patterns.md) — MVUX, XAML, navigation, and performance patterns
Platform Support
| Platform | Rendering | Notes | |----------|-----------|-------| | Windows | WinUI 3 | Native Windows App SDK | | WebAssembly | Skia/Canvas | Runs in browser | | iOS | Skia/Metal | Native iOS app | | Android | Skia/OpenGL | Native Android app | | macOS | Skia/Metal | Mac Catalyst or AppKit | | Linux | Skia/X11 | GTK or Framebuffer |
Workflow
1. **Choose the right template** — Uno Platform offers various templates for different scenarios 2. **Understand rendering modes** — Skia vs native rendering affects performance and fidelity 3. **Apply MVVM or MVUX patterns** — keep views dumb, logic in ViewModels 4. **Handle platform differences** — use conditional XAML or partial classes 5. **Test on all target platforms** — behavior varies across platforms
Project Structure
MyApp/ ├── MyApp/ # Shared code │ ├── App.xaml # Application entry │ ├── MainPage.xaml # Main page │ ├── Presentation/ # ViewModels (MVUX/MVVM) │ ├── Business/ # Business logic │ └── Services/ # Platform services ├── MyApp.Wasm/ # WebAssembly head ├── MyApp.Mobile/ # iOS and Android head ├── MyApp.Skia.Gtk/ # Linux head ├── MyApp.Skia.WPF/ # Windows Skia head └── MyApp.Windows/ # Native WinUI head
MVUX Pattern (Uno Extensions)
Model Definition
public partial record MainModel
{
public IListFeed<TodoItem> Items => ListFeed.Async(LoadItems);
private async ValueTask<IImmutableList<TodoItem>> LoadItems(CancellationToken ct)
{
var items = await _todoService.GetAllAsync(ct);
return items.ToImmutableList();
}
}View Binding with FeedView
<Page xmlns:uen="using:Uno.Extensions.Navigation.UI">
<utu:FeedView Source="{Binding Items}">
<utu:FeedView.ValueTemplate>
<DataTemplate>
<ListView ItemsSource="{Binding}">
<ListView.ItemTemplate>
<DataTemplate x:DataType="local:TodoItem">
<TextBlock Text="{Binding Title}" />
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
</DataTemplate>
</utu:FeedView.ValueTemplate>
<utu:FeedView.ProgressTemplate>
<DataTemplate>
<ProgressRing IsActive="True" />
</DataTemplate>
</utu:FeedView.ProgressTemplate>
</utu:FeedView>
</Page>Classic MVVM with MVVM Toolkit
ViewModel
public partial class MainViewModel(ITodoService todoService) : ObservableObject
{
[ObservableProperty]
private ObservableCollection<TodoItem> _items = [];
[ObservableProperty]
private bool _isLoading;
[RelayCommand]
private async Task LoadItemsAsync()
{
IsLoading = true;
try
{
var items = await todoService.GetAllAsync();
Items = new ObservableCollection<TodoItem>(items);
}
finally
{
IsLoading = false;
}
}
}Platform-Specific Code
Conditional XAML
<TextBlock Text="Welcome"
xmlns:win="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:android="http://uno.ui/android"
xmlns:ios="http://uno.ui/ios"
xmlns:wasm="http://uno.ui/wasm">
<win:TextBlock.Foreground>
<SolidColorBrush Color="Blue" />
</win:TextBlock.Foreground>
<android:TextBlock.Foreground>
<SolidColorBrush Color="Green" />
</android:TextBlock.Foreground>
</TextBlock>Partial Classes
// Services/DeviceService.cs (shared)
public partial class DeviceService
{
public partial string GetDeviceInfo();
}
// Services/DeviceService.wasm.cs
public partial class DeviceService
{
public partial string GetDeviceInfo() => "WebAssembly";
}
// Services/DeviceService.Android.cs
public partial class DeviceService
{
public partial string GetDeviceInfo() =>
$"Android {Android.OS.Build.VERSION.Release}";
}Hot Reload and Development
// Enable Hot Reload in App.xaml.cs
public App()
{
this.InitializeComponent();
#if DEBUG
// Enable Hot Reload
this.EnableHotReload();
#endif
}Ant
Stop explaining .NET to your AI. Start building. We've all been there: asking Claude to use Entity Framework, only to get EF6 patterns in a .NET 8 project. Explaining to Copilot that Blazor Server and Blazor WebAssembly aren't the same thing.
Repo: managedcode/dotnet-skills
Other skills on dotnet-skills.
- /aspnet-core
Build, debug, modernize, or review ASP.NET Core applications with correct hosting, middleware, security, configuration, logging, and deployment patterns on current .NET. USE FOR: working on ASP.NET Core apps, services, or middleware; changing auth, routing, configuration,
Open skill - /aspire
Build, upgrade, and operate Aspire 13.4.x C# or TypeScript application hosts with the current CLI, AppHost, ServiceDefaults, integrations, dashboard, testing, MCP, and deployment patterns for distributed apps. USE FOR: Aspire.AppHost.Sdk, Aspire.Hosting.*,
Open skill - /azure-functions
Build, review, or migrate Azure Functions in .NET with correct execution model, isolated worker setup, bindings, DI, and Durable Functions patterns. USE FOR: working on Azure Functions in .NET; migrating from the in-process model to the isolated worker model; adding Durable
Open skill - /blazor
Build and review Blazor applications across server, WebAssembly, web app, and hybrid scenarios with correct component design, state flow, rendering, and hosting choices. USE FOR: building interactive web UIs with C# instead of JavaScript; choosing between Server, WebAssembly, or
Open skill - /entity-framework6
Maintain or migrate EF6-based applications with realistic guidance on what to keep, what to modernize, and when EF Core is or is not the right next step. USE FOR: EF6 codebases; runtime versus ORM migration decisions; EDMX, code-first, ObjectContext, and legacy data-access
Open skill - /entity-framework-core
Design, tune, or review EF Core data access with proper modeling, migrations, query translation, performance, and lifetime management for modern .NET applications. USE FOR: DbContext, migrations, model configuration, EF queries, tracking, loading, performance, transactions, and
Open skill

