Windows (XAML)
windows-xaml hosts Windows’ own XAML controls in a plain Win32 window through
XAML Islands.
There is no framework runtime for your users to install.
Which XAML. This backend uses system XAML — the
Windows.UI.Xamlstack that ships inside Windows 10 and 11 — not WinUI 3 / the Windows App SDK. That is why the target is namedwindows-xamlrather than after a XAML release: many control names exist in both namespaces with different behavior (thisProgressRingis the UWP dotted ring, not WinUI 3’s arc;Pivotdoesn’t exist in WinUI 3 at all). The links below point at the UWPWindows.UI.XamlAPI reference accordingly.
Getting started
You need the Visual Studio C++ Build Tools (for MSVC and the Windows SDK) and the MSVC Rust
toolchain. The C++/WinRT shim is compiled by build.rs against the plain Windows SDK.
rustup default stable-msvc
cargo install day-cli
day new app my-app --toolkit windows-xaml
cd my-app
day launch -p windows-xaml
day doctor --toolkit xaml checks the SDK and toolchain.
day pack -p windows-xaml # .msix plus an NSIS -setup.exe
The NSIS installer is per-user: no elevation, a normal Add/Remove Programs entry, and a silent
/S mode for managed deployment.
Caveats and special considerations
- Less real-application use than the Apple, Linux, and Android targets. It builds and runs the full UI walkthrough in CI on every push, but no large app ships on it yet.
- The web view needs the WebView2 Runtime. Day hosts a
WebView2 composition visual —
not the legacy EdgeHTML
WebView. The runtime ships with Windows 11 and current Windows 10; if it is absent, the piece shows its URL-label fallback instead of failing. - No native segmented control exists in system XAML, so
picker().segmented()is a horizontal row of radio buttons. - The inline time picker falls back to a flyout — system XAML has no inline clock.
- Text-area read-only, selectable and spell-check patches are accepted but do nothing; those capabilities report unsupported.
- No Lottie, no map on this backend — each renders its placeholder.
cover()presents as a topmost window-sized child (no transition, programmatic dismissal only). - Radial gradients in a
canvasare synthesized into a bitmap brush, because system XAML hasLinearGradientBrushbut noRadialGradientBrush(that type is XAML-only).
What each piece becomes
| Day piece | XAML control (Windows.UI.Xaml.Controls) |
|---|---|
column / row / stack / section | Canvas (Day positions children absolutely) |
label | TextBlock |
button | Button (AccentButtonStyle when prominent) |
toggle | ToggleSwitch |
slider | Slider |
text_field | TextBox |
text_area | TextBox with AcceptsReturn |
picker().menu() | ComboBox |
picker().segmented() / .inline() | RadioButtons in a horizontal / vertical stack |
progress(f) | ProgressBar |
spinner() | ProgressRing |
divider | Border, 1px, themed stroke |
scroll | ScrollViewer |
list | ScrollViewer with Day-side cell pooling |
nav (split and stack) | NavigationView |
nav_menu | NavigationViewItems, or a ListView standalone |
tabs | Pivot |
image | Image |
canvas | Canvas with a Path per shape |
| dialogs / alerts / prompts | ContentDialog |
| file dialogs | FileOpenPicker / FileSavePicker |
| menu bar | MenuBar |
| context menus | MenuFlyout |
external activity() | ProgressRing |
external combobox() | editable ComboBox |
external search_field() | AutoSuggestBox |
external date_picker() | CalendarDatePicker, or CalendarView inline |
external time_picker() | TimePicker |
external media() | MediaPlayerElement |
external webview() | WebView2 composition visual inside a Border |
Text measurement is XAML’s own measure pass (Measure → DesiredSize), with a re-measure
after forcing layout when a templated control reports zero before the island’s first async pass.



