Batteries in, seams out
Derive from AvalloyApp and you have DI, logging, a single-instance guard, relaunch, a splash, and the login-shell PATH fix. Every piece is behind an interface you can answer yourself.
App bootstrap, window chrome, a token-driven theme engine, commands and keybindings, preferences with hot reload, an icon pipeline, and in-app updates — for Avalonia, so the app itself is only the app.
The app class, the window and title bar, the sidebar and tab strip, commands and the palette, preferences, the theme cascade, dialogs, toasts, and the control layer.
AvalloyAppShellWindowAlloyTitleBarCommandRegistryPreferencesServiceThemeServiceTabStripCliRunnerHand-authored light and dark templates on a token contract, a type ramp, control themes, and a controller that swaps the palette live and follows the OS.
NativeThemeControllerTokens.axamlTemplate.LightTemplate.DarkType.axamlAlloyControlsOne control for every glyph. SVGs bake to XAML geometry at build time, packs swap as a dictionary, and a Lucide baseline ships in the box. The baker is a dotnet tool.
GlyphIconIconResolverIconBakerIconPickerViewavalloy-icontoolCheck, download, then restart into the new build or stage it for the next quit. Velopack underneath, a notifier seam on top, and a no-op in dev runs.
UpdateServiceIUpdateSourceIUpdateNotifierVelopackUpdateSource