Skip to content
Back to skills

Avalonia App Development

ASecurity

Use when setting up Avalonia app structure, resource dictionaries, application lifetimes, startup configuration, cross-platform project setup, or App.axaml configuration.

  • 37 stars
  • 0 votes
  • 0 copies
  • 2 views
  • Added September 10, 2026
developmentgoshellreacttestinggitperformance

Security analysis

A100/100

Scanned September 10, 2026

npx -y skills add linuxdevel/Avalonia-skills --skill avalonia-app-development --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Avalonia App Development?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Avalonia App Development
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/linuxdevel-avalonia-app-development/badge)](https://www.skillsdirectory.com/skills/linuxdevel-avalonia-app-development)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: avalonia-app-development
description: Use when setting up Avalonia app structure, resource dictionaries, application lifetimes, startup configuration, cross-platform project setup, or App.axaml configuration.
---
# Avalonia App Development

## Overview
Avalonia app entry: `Program.cs` builds and runs an `AppBuilder`. `App.axaml` + `App.axaml.cs` is the root. Platform lifetime determines how the app runs (Desktop vs Single-view for mobile/WASM).

## Program.cs
```csharp
using Avalonia;
using Avalonia.ReactiveUI; // or remove if not using ReactiveUI

class Program
{
    [STAThread]
    public static void Main(string[] args) => BuildAvaloniaApp()
        .StartWithClassicDesktopLifetime(args);

    public static AppBuilder BuildAvaloniaApp()
        => AppBuilder.Configure<App>()
            .UsePlatformDetect()
            .WithInterFont()
            .LogToTrace();
            // .UseReactiveUI() // add if using ReactiveUI
}
```

## App.axaml
```xml
<Application xmlns="https://github.com/avaloniaui"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             x:Class="MyApp.App"
             RequestedThemeVariant="Default">
    <Application.DataTemplates>
        <local:ViewLocator/>
    </Application.DataTemplates>
    <Application.Styles>
        <FluentTheme/>
    </Application.Styles>
    <Application.Resources>
        <ResourceDictionary>
            <ResourceDictionary.MergedDictionaries>
                <ResourceInclude Source="avares://MyApp/Assets/Colors.axaml"/>
            </ResourceDictionary.MergedDictionaries>
            <SolidColorBrush x:Key="AccentBrush" Color="#FF5722"/>
        </ResourceDictionary>
    </Application.Resources>
</Application>
```

## App.axaml.cs
```csharp
public partial class App : Application
{
    public override void Initialize() => AvaloniaXamlLoader.Load(this);

    public override void OnFrameworkInitializationCompleted()
    {
        if (ApplicationLifetime is IClassicDesktopStyleApplicationLifetime desktop)
        {
            desktop.MainWindow = new MainWindow
            {
                DataContext = new MainViewModel()
            };
        }
        else if (ApplicationLifetime is ISingleViewApplicationLifetime singleView)
        {
            singleView.MainView = new MainView
            {
                DataContext = new MainViewModel()
            };
        }
        base.OnFrameworkInitializationCompleted();
    }
}
```

## Application Lifetimes
| Lifetime | Interface | Platforms |
|---|---|---|
| Classic Desktop | `IClassicDesktopStyleApplicationLifetime` | Windows, macOS, Linux |
| Single View | `ISingleViewApplicationLifetime` | iOS, Android, WASM |
| Lifetime-less | None | Headless testing |

## Resource Dictionaries
```xml
<!-- Colors.axaml (standalone resource dictionary) -->
<ResourceDictionary xmlns="https://github.com/avaloniaui"
                    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
    <Color x:Key="PrimaryColor">#FF5722</Color>
    <SolidColorBrush x:Key="PrimaryBrush" Color="{StaticResource PrimaryColor}"/>
    <sys:Double x:Key="DefaultCornerRadius" xmlns:sys="clr-namespace:System;assembly=mscorlib">8</sys:Double>
</ResourceDictionary>
```
Include with:
```xml
<ResourceInclude Source="avares://MyApp/Assets/Colors.axaml"/>
```

## StaticResource vs DynamicResource
| | StaticResource | DynamicResource |
|---|---|---|
| Resolved | Once at load time | On every access |
| Runtime changes | No | Yes |
| Theme variants | No | Yes (required) |
| Performance | Faster | Slightly slower |

Use `DynamicResource` for anything theme-variant-aware. Use `StaticResource` for constants that never change.

## Assets
```xml
<!-- In .csproj -->
<ItemGroup>
    <AvaloniaResource Include="Assets/**"/>
</ItemGroup>
```
Access: `avares://MyApp/Assets/logo.png`

## Cross-Platform Project Structure
```
MyApp/
  MyApp.csproj           — Desktop (Windows/macOS/Linux)
  Program.cs
  App.axaml + .cs
  Views/
  ViewModels/
  Assets/
MyApp.Mobile/            — Optional: iOS/Android
  MyApp.Mobile.csproj
MyApp.Browser/           — Optional: WASM
  MyApp.Browser.csproj
MyApp.Core/              — Shared ViewModels/Models
  MyApp.Core.csproj
```

## Community Libraries & Tooling

### Dependency Injection / Hosting
| Library | NuGet | Purpose |
|---|---|---|
| Lemon.Hosting.Avaloniaui | `Lemon.Hosting.Avaloniaui` | .NET Generic Host integration for Avalonia |
| Prism.Avalonia | `Prism.Avalonia` | IoC, modules, regions, navigation |
| AvaloniaInside.Shell | GitHub: AvaloniaInside/Shell | Shell navigation + side menu for mobile/desktop |

### Hot Reload / Dev Tools
| Tool | NuGet / Repo | Purpose |
|---|---|---|
| HotAvalonia | `HotAvalonia` | Hot reload for AXAML without restart |
| Live.Avalonia | GitHub: worldbeater/Live.Avalonia | Live reloading for development |
| Avant Garde | GitHub: kuiperzone/AvantGarde | Standalone cross-platform XAML previewer |
| DevTools for Avalonia | devtools.nlnet.net | Enhanced runtime inspector and debugger |

### Localization
| Library | NuGet | Purpose |
|---|---|---|
| Echoes | GitHub: Voyonic-Systems/Echoes | Simple type-safe translations/i18n |

### Misc
- **ShowMeTheXaml.Avalonia** — display corresponding XAML at runtime for demos/docs (`ShowMeTheXaml.Avalonia`)
- **Verify.Avalonia** — extends Verify for Avalonia headless UI snapshot testing (`Verify.Avalonia`)
- **Sortable.Avalonia** — animated drag-drop sort behavior attachments (`sortable-avalonia`)
- **AsyncImageLoader.Avalonia** — async image loading from web for Image controls (`AsyncImageLoader.Avalonia`)

## Common Mistakes
- Using `StartWithClassicDesktopLifetime` for mobile/WASM (must use `ISingleViewApplicationLifetime`)
- `AvaloniaXamlLoader.Load(this)` missing in `Initialize()` — styles and resources not loaded
- Using `StaticResource` for `ThemeVariant`-sensitive resources — dark mode won't update
- Asset path casing mismatch on Linux (`Assets/Logo.png` vs `assets/logo.png`)

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.