Goo 0.2.0
dotnet add package Goo --version 0.2.0
NuGet\Install-Package Goo -Version 0.2.0
<PackageReference Include="Goo" Version="0.2.0" />
<PackageVersion Include="Goo" Version="0.2.0" />
<PackageReference Include="Goo" />
paket add Goo --version 0.2.0
#r "nuget: Goo, 0.2.0"
#:package Goo@0.2.0
#addin nuget:?package=Goo&version=0.2.0
#tool nuget:?package=Goo&version=0.2.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 targets .NET 10 and is available from NuGet:
dotnet add package Goo --version 0.2.0
Or add the package reference directly:
<PackageReference Include="Goo" Version="0.2.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.
Documentation
- API reference
- Accessibility
- Cell and component state
- Input
- Layout
- Motion
- Rendering
- Shapes
- Style
- Text
- Text editor
- Tree
- Window
- Release notes
- GitHub releases
The package includes Goo.xml for editor documentation.
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.
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 (>= 14.2.1.2)
- HarfBuzzSharp.NativeAssets.Linux (>= 14.2.1.2)
- Hexa.NET.SDL3 (>= 1.2.17)
- SkiaSharp (>= 4.151.1)
- SkiaSharp.HarfBuzz (>= 4.151.1)
- SkiaSharp.NativeAssets.Linux (>= 4.151.1)
- 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.
See the packaged CHANGELOG.md for the changes, supported surface, and limitations of this release.