The app shell
Avalloy.Core is the layer an app sits on. Root namespace Avalloy. It has one dependency that matters, Avalonia, plus the Microsoft.Extensions family for DI, configuration and logging, CommunityToolkit.Mvvm, and Sentry's logging integration, which stays off until you turn it on.
dotnet add package Avalloy.Core| Area | The pieces | Page |
|---|---|---|
| The app | AvalloyApp, ShellAvalloyApp, the deferred launch and AlloySplashWindow, SingleInstanceGuard, AppRelaunch, LoginShellPath | The app |
| Windows | ShellWindow, ShellDialog, AlloyTitleBar, TitleBarHeaderReserve, MacOSTitleBar, WindowGeometry, WindowPlacement | Windows and the title bar |
| Commands | IAlloyCommand, [Command], CommandRegistry, KeyboardDispatcher, GestureParser, the palette, the shortcut editor | Commands and keybindings |
| Preferences | PreferencesService<T>, PreferencesLocation, presets, ResourceCascade, TokenSchema, AppearancePrefs | Preferences |
| Theming | IThemeController, ThemeService, IAccentPublisher, AvalloyTheme, ThemeVariantResolver, NeutralPalette | Theming seams |
| Controls | TabStrip, the sidebar framework, the field controls, OverlayCard, PreferencesOverlay, attached behaviours | Controls |
| Services | Dialogs, toasts, logging and the log viewer, the folder picker, the macOS helpers | Services |
| Processes | CliRunner and CliResult | CliRunner |
The shape of it
Three ideas run through the package.
Seams, not switches. Anything an app might do differently is an interface the app class answers: ResolveThemeController, ResolveAccentPublisher, IDialogService, IKeymapStore, IUpdateSource. The default implementations are real, but nothing is sealed in.
Tokens, not styles. Controls bind resource keys, Surface.Pane, Text.Secondary, Radius.Card, and never a literal. A theme is a dictionary of those keys; swapping it repaints the app live. The keys themselves are the contract.
Engine-agnostic controls. TabStrip, GlyphIcon and the rest read their tokens back through AvalloyTheme.Applied, so the same control works under the native engine, the preset cascade, or an engine you bring.
Namespaces
| Namespace | Holds |
|---|---|
Avalloy | AvalloyApp, ShellWindow, ShellDialog, WindowGeometry |
Avalloy.Commands | The command stack |
Avalloy.Preferences | Preferences, presets, the cascade |
Avalloy.Services | Dialogs, toasts, logging, ThemeService, the platform helpers |
Avalloy.Theming | The theme seams and the palette arithmetic |
Avalloy.Controls.* | TabStrip, the sidebar, the title bar, the log viewer, the splash |
Avalloy.Views.Controls | The field controls, overlays, the palette view |
Avalloy.Icons | GlyphIcon, IconResolver, the picker |
Avalloy.AttachedProperties | HoverIntent, AutoScroll, InlineRename, MacOSTitleBar, ... |
Avalloy.Typography | FontCatalog, FontFaceDef, FontFaceVerification, CapCentering |
Avalloy.Cli | CliRunner, CliResult |