Goo 0.1.0
See the version list below for details.
dotnet add package Goo --version 0.1.0
NuGet\Install-Package Goo -Version 0.1.0
<PackageReference Include="Goo" Version="0.1.0" />
<PackageVersion Include="Goo" Version="0.1.0" />
<PackageReference Include="Goo" />
paket add Goo --version 0.1.0
#r "nuget: Goo, 0.1.0"
#:package Goo@0.1.0
#addin nuget:?package=Goo&version=0.1.0
#tool nuget:?package=Goo&version=0.1.0
<p align="center"> <img src="docs/assets/goo-readme-banner.gif" alt="Goo" width="1200"> </p>
<p align="center">A declarative desktop UI framework for G#.</p>
<p align="center"> <a href="https://github.com/obselate/goo/actions/workflows/ci.yml"><img src="https://img.shields.io/github/actions/workflow/status/obselate/goo/ci.yml?branch=main&style=flat-square&label=ci&labelColor=090B10&color=478AD1" alt="CI status"></a> <a href="https://www.nuget.org/packages/Goo/"><img src="https://img.shields.io/nuget/v/Goo?style=flat-square&labelColor=090B10&color=478AD1" alt="NuGet version"></a> <a href="LICENSE"><img src="https://img.shields.io/github/license/obselate/goo?style=flat-square&labelColor=090B10&color=6CBC5F" alt="MIT license"></a> </p>
Goo is a retained UI framework with a small, direct core. Applications describe
fresh UI trees in ordinary G#. Goo retains runtime state, rebuilds dirty Cell
boundaries, lays out with Yoga, and renders with Skia.
Applications keep full control over their visual identity.
Install
Goo 0.1.0 targets .NET 10:
<PackageReference Include="Goo" Version="0.1.0" />
The first release supports linux-x64 on glibc 2.35 or newer. It requires a
native Wayland session and the system Fontconfig runtime (libfontconfig1 on
Ubuntu). X11 and XWayland backends are outside the 0.1 release.
Build a component
package App
import Goo
class Counter : Cell {
private var count int32
public override func Build() Blob ->
Container {
Width: 320,
Padding: 24,
Gap: 12,
BorderRadius: 16,
BackgroundColor: "#181f2b",
Children: {
Text {
Content: "Count: $count",
FontSize: 24,
Color: "#f4f7ff",
},
Button {
Padding: 10,
BorderRadius: 10,
BackgroundColor: "#4a7dff",
OnClick: () -> count++,
Children: {
Text {
Content: "Add one", Color: "#ffffff"
}
},
},
},
}
}
func Main() {
Window.ConfigureApplication("Counter", "1.0.0", "com.example.counter")
Window{ Title: "Counter", Root: Counter{} }.Run()
}
Cell owns state and defines the rebuild boundary. Its Build method returns a
new tree of lightweight Blob descriptions. Goo compares that tree with the
retained runtime nodes, then schedules the layout and paint work caused by the
change.
What Goo optimizes for
- Primitives Layout, text, images, vector paths, input, motion, editing, accessibility, and windows form a public surface for application-level composition.
- G# Best practices Components use classes, functions, loops, typed values, and ordinary control flow.
- Frame discipline Retained nodes, scoped invalidation, reusable caches, and allocation budgets keep CPU time and memory traffic visible.
Themes, design systems, and widget libraries live in application code or reusable packages. The core provides base primitives for creating applications via composition and widgets.
Documentation
The package includes Goo.xml for editor documentation.
Credits
Goo uses Skia through SkiaSharp for drawing and text. Layout uses Meta Yoga through the vendored Yoga.Net port.
See the third-party notices for versions and license terms.
License
Goo is available under the MIT License.
| Product | Versions 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. |
-
net10.0
- HarfBuzzSharp (>= 8.3.1.1)
- HarfBuzzSharp.NativeAssets.Linux (>= 8.3.1.1)
- Hexa.NET.SDL3 (>= 1.2.17)
- SkiaSharp (>= 3.116.0)
- SkiaSharp.HarfBuzz (>= 3.116.0)
- SkiaSharp.NativeAssets.Linux (>= 3.116.0)
- Unicode.Bidi (>= 0.3.18)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
Initial retained UI release. See the packaged CHANGELOG.md for the supported surface and limitations.