Technical Design
FS.Skia.UI is an Elmish-first F# UI toolkit that models UI as immutable scene data, runs application state through explicit messages and effects, and renders through a Vulkan-only SkiaSharp desktop path. This page is the technical design entry point for maintainers and contributors.
Design Map
Document |
Purpose |
|---|---|
Repository, package, runtime, sample, and governance structure, linked to src and build.fsx. |
|
Viewer program shape, event/effect flow, rendering, screenshots, diagnostics, and supported platform boundary in src/Lib/Library.fsi and src/Lib/Library.fs. |
|
Scene model, keyboard input, Controls-owned charts/DataGrid, layout, graph, samples, tests, and template governance linked to their source modules. |
|
Rationale for the major architectural choices and rejected alternatives. |
|
Timestamped analysis of FS.Skia.UI as a Spec Kit agent-consumed framework, including validation tiers, Controls typing, and build graph recommendations. |
|
Maintainability hotspots, duplication inventory, and phased cleanup plan for generated evidence, build automation, viewer internals, and compatibility surfaces. |
Source Map
Area |
Primary source |
|---|---|
Compatibility core package |
src/Lib/Library.fsi, src/Lib/Library.fs, and src/Lib/KeyboardInput.fsi |
Scene primitives |
|
Skia viewer host |
src/SkiaViewer/SkiaViewer.fsi and src/SkiaViewer/SkiaViewer.fs |
Elmish viewer integration |
|
Keyboard input package |
src/KeyboardInput/KeyboardInput.fsi and src/KeyboardInput/KeyboardInput.fs |
Controls, charts, graph views, DataGrid, rich rendering |
|
Controls Elmish adapter |
src/Controls.Elmish/ControlsElmish.fsi and src/Controls.Elmish/ControlsElmish.fs |
Layout and lower-level graph helpers |
|
Samples |
|
Tests |
|
Build and template workflow |
build.fsx, .template.config/template.json, and .template.package/FS.Skia.UI.Template.fsproj |
Dependency and drift scripts |
scripts/dependency-report.fsx and scripts/template-drift.fsx |
Related Operational Documents
Document |
What it governs |
|---|---|
FAKE target graph and automation entry points. |
|
Test projects, FSI transcripts, sample smoke, and template validation matrix. |
|
Required readiness artifacts and evidence boundaries. |
|
Central Package Management, package ownership, and validation-only version exceptions. |
|
|
|
Generated prompts, task |
How To Read This Set
Start with the architecture overview when changing package boundaries, project
references, or build targets. Use the runtime design before changing
ViewerProgram, ViewerEvent, ViewerEffect, rendering, diagnostics, or
screenshot behavior. Use subsystem design when changing Controls-owned chart
controls, DataGrid, layout, graph rendering, keyboard input, samples, or
template ownership. Record any new cross-cutting choice in the design decision
log.