FS.GG.UI.Controls 0.15.0

Prefix Reserved
There is a newer version of this package available.
See the version list below for details.
dotnet add package FS.GG.UI.Controls --version 0.15.0
                    
NuGet\Install-Package FS.GG.UI.Controls -Version 0.15.0
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="FS.GG.UI.Controls" Version="0.15.0" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="FS.GG.UI.Controls" Version="0.15.0" />
                    
Directory.Packages.props
<PackageReference Include="FS.GG.UI.Controls" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add FS.GG.UI.Controls --version 0.15.0
                    
#r "nuget: FS.GG.UI.Controls, 0.15.0"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package FS.GG.UI.Controls@0.15.0
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=FS.GG.UI.Controls&version=0.15.0
                    
Install as a Cake Addin
#tool nuget:?package=FS.GG.UI.Controls&version=0.15.0
                    
Install as a Cake Tool

FS.GG.UI.Controls

Declarative Skia controls, rich rendering, chart controls, graph controls, DataGrid, and product-owned control runtime contracts.

FS.GG.UI.Controls is one of the FS.GG.UI distribution packages — an F# / Elmish UI and 2D scene-graph framework for .NET 10 desktop, rendered through OpenGL + SkiaSharp.

Install

dotnet add package FS.GG.UI.Controls

Or scaffold a full governed project that wires the FS.GG.UI packages together:

dotnet new install FS.GG.UI.Template
dotnet new fs-gg-ui -o MyApp

Usage

open FS.GG.UI.Controls

type Msg =
    | Increment
    | RangeChanged of string

// Declare controls; each `create` takes an `Attr<'msg> list`.
let view =
    Stack.create
        [ Stack.children
            [ Label.create [ Label.text "Quarterly revenue" ]
              Button.create [ Button.text "Add"; Button.onClick Increment ]
              LineChart.create
                  [ LineChart.series
                      [ { Name = "EU"
                          Points = [ { X = 0.0; Y = 12.0; Label = None }
                                     { X = 1.0; Y = 18.0; Label = None } ] } ] ]
              GraphView.create [ GraphView.nodes [ "ingest"; "transform"; "emit" ] ] ] ]

// Render against a built-in theme to get a Scene + layout + diagnostics.
let result : ControlRenderResult<Msg> = Control.render Theme.dark view

// Inspect the same renderTree path as structured layout/text/paint metadata.
let inspection =
    ControlInspection.inspect
        { Scope = { ScopeId = "dashboard"; Title = "Dashboard"; Required = true }
          Theme = Theme.dark
          OutputSize = { Width = 1280; Height = 800 }
          Control = view
          Presentation = "dark"
          RunId = Some "local-run"
          RelatedVisualEvidence = [] }

API at a glance

  • Control — core lifecycle: create / standard / customControl build nodes, render produces a ControlRenderResult (scene, layout, diagnostics, event bindings), and dispatch / diagnostics inspect a Control<'msg>. Rendering also clips every container's children to its bounds (no spill), paints Overlay-built transient surfaces last (z-top, escaping ancestor clips — isOverlaySurface), and makes scroll-viewer a real clipping viewport. scrollViewport reads back ScrollViewport geometry with content width/height, horizontal/vertical max offsets, extent source, and diagnostics derived from the Layout intrinsic protocol. See docs/bridge/feature-137-render-blockers.md.
  • ControlInspection — additive structured inspection over Control.renderTree, emitting stable node ids, final bounds, ownership, visual order, text-fit facts, clip facts, paint coverage, surface roles, diagnostics, and explicit unsupported facts without changing rendered output or event bindings.
  • Declarative control modules — Button, Label, TextBlock, CheckBox, Slider, TextBox, Stack, Grid, Border, Tabs, Dialog, and more, each with create plus content/event attributes like text, onClick, and children.
  • ChartsLineChart, BarChart, PieChart, ScatterPlot, and GraphView, fed by ChartSeries / ChartPoint records.
  • DataGrid — virtualized grid with an Elmish init / update over DataGridModel, DataGridMsg, and DataGridEffect, plus a declarative create using DataGridColumn / DataGridRow.
  • TextInput — stateful editor (init / update) over TextInputModel, TextInputMsg, and TextInputEffect, covering selection, clipboard, composition, and validation.
  • Theme — built-in light / dark palettes plus withDensity, withAccent, and resolve for the Theme record consumed by Control.render.
  • Attr — low-level attribute builders (text, value, children, theme, validation, on / onWith) for composing Attr<'msg> values directly. Layout builders include padding, margin, gap, alignItems, alignSelf, justifyContent, flexGrow, flexShrink, flexBasis, minWidth, minHeight, maxWidth, and maxHeight; omitted padding/gap keep the Controls compatibility defaults, explicit zero overrides them, and the legacy spacing name is treated as a gap alias.
  • Catalog — the governed control registry: supportedControls, standardSchema, and validate describe and check the standard control surface.

Compositor diagnostics

Feature147 adds deterministic retained-render policy helpers for damage-union accounting, proof-gated fallback classification, promotion eligibility, placement movement damage, and snapshot-budget verdicts. Feature148 extends the readiness evidence around those helpers: localized/overlap/edge damage, movement old/new regions, content-vs-placement reuse, churn/no-benefit demotion, bounded snapshot eligibility, and timing thresholds are all recorded as reviewable evidence before a compositor tier can claim readiness. The public Controls package keeps the mechanics internal; consumers should inspect the derived CompositorFrameDiagnostics helper from FS.GG.UI.Controls.Elmish when reviewing proof readiness, damage area, fallback reason, reuse counters, demotions, and snapshot byte estimates.

ScrollViewer Extent

Feature150 changes ScrollViewer extent readback to use FS.GG.UI.Layout.Layout.contentExtent. Small content reports the viewport as the extent and zero max offsets. Overflowing content reports the natural intrinsic extent while the viewport bounds remain fixed. ContentHeight and Offset remain available as vertical compatibility aliases; new code should prefer ContentWidth, MaxHorizontalOffset, MaxVerticalOffset, ExtentSource, and Diagnostics.

Feature151 broadens that acceptance to the full ScrollViewer corpus: empty, small, exact-fit, overflowing, nested, clipped/layered parent, text-natural-size, dynamic content, and invalid fallback cases. The accepted path remains Layout.contentExtent; no descendant-bounds walk or public ScrollViewport shape change is introduced.

Versioning

All FS.GG.UI.* libraries share one version and move together. In a generated project a single <FsGgUiVersion> in Directory.Packages.props pins every package — upgrading is one edit; see docs/UPGRADING.md. Pre-release versions use a -preview.N suffix.

Product Compatible and additional computed target framework versions.
.NET net10.0 is compatible.  net10.0-android was computed.  net10.0-browser was computed.  net10.0-ios was computed.  net10.0-maccatalyst was computed.  net10.0-macos was computed.  net10.0-tvos was computed.  net10.0-windows was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages (2)

Showing the top 2 NuGet packages that depend on FS.GG.UI.Controls:

Package Downloads
FS.GG.UI.Controls.Elmish

Elmish command, subscription, and program adapters for Controls and KeyboardInput runtime effects.

FS.GG.UI

Optional BOM / metapackage for the FS.GG.UI framework. Reference this single package at one version to pin the entire coherent FS.GG.UI.* set to that version; any attempt to mix a member at a different version fails loudly at restore/build. Ships no assembly — dependencies only.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
0.18.5 0 7/22/2026
0.18.4 0 7/22/2026
0.18.0 0 7/22/2026
0.15.0 186 7/20/2026
0.14.0 127 7/19/2026
0.13.0 156 7/18/2026
0.12.0 288 7/17/2026
0.11.0 368 7/16/2026
0.10.0 692 7/14/2026
0.9.2 571 7/13/2026
0.9.0 714 7/11/2026
0.8.0 238 7/11/2026
0.7.0 186 7/11/2026
0.6.0 159 7/10/2026
0.5.0 212 7/10/2026
0.4.0 311 7/9/2026
0.4.0-preview.1 70 7/9/2026
0.3.0-preview.1 79 7/7/2026
0.2.0-preview.1 66 7/6/2026
0.1.64-preview.1 87 7/5/2026
Loading failed