An F# desktop UI framework that renders Model-View-Update (MVU) applications with SkiaSharp over OpenGL. You describe a scene of primitives or a tree of semantic controls; the framework measures, lays it out, and paints it — with an interactive render loop, theming, input routing, and a deterministic offscreen path for tests.
The render core is Elmish-free; idiomatic Elmish
(Cmd, subscriptions) is an optional adapter layer.
Platform vs. workspace. FS-GG is a platform — a family of repositories, of which this UI framework is one component. The current component/repository inventory lives in the org architecture doc (linked, not restated here). What you scaffold with the platform is a workspace: a generated repo with a runnable app, the
.fsgg/lifecycle, skills, and optional governance. See the platform vocabulary (ADR-0020).
open FS.GG.UI.SkiaViewer
let options : ViewerOptions =
{ Title = "Hello"; InitialSize = size
PresentMode = ViewerPresentMode.DirectToSwapchain; FrameRateCap = None
LogicalSize = None } // Some { Width = 1280; Height = 720 } to letterbox a fixed canvas
// Render a static scene…
Viewer.run options scene |> ignore
// …or drive an interactive MVU window with your own model/msg:
Viewer.runInteractiveViewer options host |> ignoreFor semantic controls (Button, TextBox, DataGrid…) with Elmish, use
Controls.Elmish.runInteractiveApp. Full walkthrough → docs/usage.md.
Source release coordinates: FS.GG.UI.* packages on net10.0 — 17 libraries plus the FS.GG.UI BOM metapackage (current framework version 0.32.1).
The published baseline remains 0.31.0; the 0.32.0 source candidate
awaits native qualification and genuine publication authority.
Each release dual-publishes
the byte-identical set to public nuget.org
(GitHub OIDC Trusted Publishing) and the org GitHub Packages feed. You can also reference
the src/*/*.fsproj directly, dotnet pack to a local feed, or scaffold a ready-wired app
from the template (dotnet new install . && dotnet new fs-gg-ui). See
docs/usage.md for every path and the full package map.
dotnet build FS.GG.Rendering.slnx -c Release # all runtime libs + local tests
DISPLAY=:1 dotnet test FS.GG.Rendering.slnx -c Release # default local tier (GL via X11)The offscreen/deterministic tiers run headless; live windowed rendering needs a GL/X11
session. The tiered evidence CLI under tools/Rendering.Harness/ declares what each run
proves and what it does not.
Active preview. This repository is the canonical home of the FS-GG rendering component,
split out of the archived EHotwagner/FS-Skia-UI
(see PROVENANCE.md). Three themes ship today: Light and Dark
(FS.GG.UI.Themes.Default) plus an opt-in Ant Design theme (FS.GG.UI.Themes.AntDesign,
AntTheme.antLight/antDark; ADR-0006).
Further design languages (Fluent, Material), design kits, and the remaining harness tiers are
on the roadmap in docs/reports/.
docs/usage.md— how to consume and render, in detail.docs/product/layering.md— the four-layer UI model.docs/product/module-map.md— what each module owns.SKIPPED-TESTS.md— documented out-of-scope test skips.
MIT © 2026 EHotwagner