Adaptive Avalonia commands
RibbonControl
Compose dense desktop command systems without hard-wiring their structure or user state.
Overview
An Avalonia ribbon toolkit with XAML and MVVM composition, tabs, groups, galleries, backstage, key tips, adaptive layout, merging, customization, and JSON persistence.
RibbonControl composes traditional desktop command density through Avalonia-native controls, themes, models, view models, command catalogs, merge policies, key tips, automation, adaptive layout, quick access, backstage, customization, and versioned state persistence.
XAML-first and MVVM-first composition
Rich ribbon primitives and backstage
Merge, key tips, and adaptive layout
Versioned customization persistence
Built for
Where it fits.
- Document, engineering, and enterprise desktop applications
- Modular applications contributing commands at runtime
- Teams requiring accessible keyboard-driven command surfaces
Compatibility & status
12.0
Both first-class
Peers and tests
Versioned JSON
In the work
Real output,
not a mockup.

Architecture
Clear layers.
Replaceable seams.
Primitives
Tabs, groups, items, galleries, backstage, and quick access form the visual vocabulary.
Composition
XAML, MVVM, or hybrid definitions feed stable-id runtime models.
Services
Commands, merging, key tips, layout, automation, and customization coordinate behavior.
Persistence
A versioned JSON store saves user ribbon state through migration hooks.
Inside RibbonControl
One repository.
Multiple serious systems.
Explore the focused capabilities, their package boundaries, architecture, installation, and smallest useful example.
Tabs, groups, buttons, split buttons, combo boxes, toggle groups, galleries, backstage, quick access toolbar, key tips, automation peers, stable height, and adaptive layout compose a complete Avalonia ribbon.
1 module→02 · Data-driven command systemsMVVM & Runtime MergingDefinition and view-model types, command catalogs, two-way runtime state, and merge policies let modules contribute or reorder tabs, groups, and items without owning the ribbon shell.
1 module→03 · Remember the user’s ribbonCustomization & PersistenceCustomization services export, reset, load, and save minimized state, selected tab, quick access items and placement, with a JSON state store, schema versions, and migration hooks.
2 modules→Quick start
From package
to first frame.
Choose the package workflow used by your repository, then start from the smallest working example. Replace VERSION with the current stable or prerelease version shown on NuGet.
dotnet add package RibbonControl.Coredotnet add package RibbonControl.Persistence.Json<PackageReference Include="RibbonControl.Core" Version="VERSION" /><PackageVersion Include="RibbonControl.Core" Version="VERSION" /><ribbon:Ribbon TabsSource="{CompiledBinding Ribbon.Tabs}" CommandCatalog="{CompiledBinding CommandCatalog}" StateStore="{CompiledBinding StateStore}" />Package surface
Start focused.
Compose as needed.
Source, docs, samples, and releases
The repository is the source of truth.
Use the current documentation and samples, inspect changes, report issues, or support continued open-source maintenance.