avalonia-themes
June 25, 2026 · View on GitHub
avalonia-themes
Custom Avalonia Themes developed by Devolutions
➡️ MacOS Theme
➡️ Linux Theme
Package Compatibility
Avalonia 12 line. Packages
2026.6.17-avalonia12and later are on the Avalonia 12 line. The first stable Avalonia 12 release is2026.6.23, and2026.6.16is the last stable release compatible with Avalonia 11.Maintenance-only fixes for the Avalonia 11 line may still be published as
2026.6.16.xfor a limited time. See the Avalonia 11 -> 12 breaking changes for upstream migration guidance.
Sample App
Contributors can use the SampleApp to test, debug and document styles for the various controls under each theme.
Debugging
The SampleApp attaches the Avalonia Dev Tools for inspecting controls (open with F12).
Avalonia Accelerate Controls
We will soon start to add styles for at least some Avalonia Accelerate controls, starting with TreeDataGrid in the DevExpress theme.
To view and test Accelerate-licensed controls in the SampleApp:
- Create a
.envfile in the repository root. - Add your license key:
AVALONIA_LICENSE_KEY=your_key_here. - Rebuild the solution.
Note: If the controls don't appear or you see build errors, you may need to force a NuGet restore or invalidate your IDE caches (e.g., File > Invalidate Caches in Rider) to update the conditional package dependencies.
Testing
There is limited visual regression testing available. DemoPagea are compared against baseline screenshots in tests/Devolutions.AvaloniaControls.VisualTests/Screenshots/Baseline. Diffs for failing tests are saved to tests/Devolutions.AvaloniaControls.VisualTests/Screenshots/Test-Diffs.
Limitations
- Interactive behaviours (e.g. pointerOver, popUpOpen, focus, etc.) are not tested
- Accelerate controls that depend on a licence (e.g. TreeDataGrid) are not tested
Platform-Specific Baselines
Baselines are maintained separately for each platform (macOS, Windows, Linux) due to rendering differences. When updating baselines, they only update for your current platform.
Usage
dotnet test --filter "DisplayName~VisualRegressionTests"- runs all testsdotnet test- runs all tests, plus some little unit tests (worth it for the time saved typing!)dotnet test --filter "DisplayName~DevExpress"- runs tests for all controls implemented in DevExpressdotnet test --filter "DisplayName~Button"- runs tests for Button under each of the themes it's implemented indotnet test --list-tests- lists all test cases 🆕 Shor hand command & cleaner output:./devtest(macOS/Linux/Git Bash) or.\devtest(Windows PowerShell/CMD) - runs a script that calls the tests and prints a succinct visual-regression summary at the end. You can also use it with shorthand filter values (for example--filter EditableComboinstead of--filter "DisplayName~EditableCombo").
Updating baseline screenshots when changes are intentional:
- macOS/Linux:
UPDATE_BASELINES=true dotnet test [filters] - Windows (PowerShell):
$env:UPDATE_BASELINES="true"; dotnet test [filters]; Remove-Item env:UPDATE_BASELINES - Windows (Command Prompt):
set UPDATE_BASELINES=true && dotnet test [filters] && set UPDATE_BASELINES=
🤍🖤 All tests are run for light & dark mode However to keep things reasonably quick, the dark mode test only runs if the light mode test for the same control has passed. This can lead to missed issues, when both versions have different problems. (If in doubt, update, then delete the new dark baseline shot, and run the test again (light will no longer fail, and you can see what happens in dark))
AI Assistant Instructions
If you're an AI assistant (like GitHub Copilot or Claude Code) working on this repository, comprehensive guidelines are available in .claude/CLAUDE.md.
This includes:
- Repository structure and architecture
- Development workflows and commands
- Coding standards and best practices
- Version control rules and commit guidelines
- Custom commands for theme switching and development