Skip to content
obselatePublic

About

A retained desktop UI framework for G#, rendered directly with Vulkan.

Topics

Resources

Contributing

Stars

18 stars

Watchers

0 watching

Forks

Latest commit

 

History

1,155 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Goo

A declarative retained GUI framework for .NET. Written in G# and rendered directly with Vulkan.

CI status NuGet version MIT license

Quick start

Create a NuGet app

Install the .NET 10 SDK and meet the platform requirements, then:

dotnet new install Goo.Templates@0.19.0

mkdir hello-goo
cd hello-goo
dotnet new goo

Run the app:

dotnet run

Build the source Gallery

Install .NET SDK 10.0.401 and Git. Download both pinned shader tools and set their SDK environment variables. The Gallery compiles shaders during its build.

On Linux:

git clone https://github.com/obselate/goo.git
cd goo
./bootstrap.sh
dotnet run --project apps/Goo.Gallery/Goo.Gallery.gsproj -c Release

On Windows:

git clone https://github.com/obselate/goo.git
cd goo
bootstrap.bat
dotnet run --project apps/Goo.Gallery/Goo.Gallery.gsproj -c Release

The bootstrap builds the pinned G# compiler and formatter, then downloads the released Goo package for the Gallery's native runtime files. It does not install software globally.

Packages

Applications reference Goo. The starter already includes it. Install other packages separately as needed.

Package Purpose Install
Goo UI framework, renderer, images, gestures, native dialogs and menus, notifications, printing, rich text clipboard, spell checking, desktop instance hosting, and native runtime assets dotnet add package Goo
Goo.Android Android host, printing, and spell checking dotnet add package Goo.Android
Goo.Audio Audio playback dotnet add package Goo.Audio
Goo.Accessibility Desktop native accessibility adapters dotnet add package Goo.Accessibility
Goo.DevTools Launch, attach, and capture with the goo CLI dotnet tool install --global Goo.DevTools
Goo.DevTools.App Graphical inspector, launched with goo-devtools dotnet tool install --global Goo.DevTools.App
Goo.Templates Create starter projects with dotnet new goo dotnet new install Goo.Templates

Add library packages from your application directory. Install both DevTools packages to launch the graphical inspector with goo dev --inspector.

Remove references to Goo.AppHost, Goo.Gestures, Goo.Images, Goo.NativeDialogs, Goo.NativeMenus, Goo.Notifications, Goo.Printing, Goo.RichText, Goo.SpellCheck, and Goo.SpellCheck.Hunspell when upgrading to the consolidated Goo package. Remove Goo.Printing.Android and Goo.SpellCheck.Android when upgrading Goo.Android. Keep existing namespace imports and type names. The old package IDs no longer publish. System services and native libraries load only when used. Hunspell includes no library or dictionaries.

Goo Extras

Goo core supplies primitives. Use optional libraries for widgets and animation composition:

Package Purpose Install
Goo Widgets Pre-built UI widgets dotnet add package Goo.Widgets
Goo Animations A library for Animation and Motion factories dotnet add package Goo.Animations

Example

The Goo.Templates app:

package CounterApp

import Goo

class Counter : Cell {
    private var count int32

    override func Build() Blob -> Container{
        Width: Percent(100),
        Height: Percent(100),
        Padding: 24,
        Gap: 12,
        BackgroundColor: Color.Rgb(24, 31, 43),
        Text{Content: "Count: $count", FontSize: 24, Color: Color.White},
        Button{
            Padding: 10,
            BorderRadius: 10,
            BackgroundColor: Color.Rgb(74, 125, 255),
            OnClick: () -> {
                count++
            },
            Text{Content: "Add one", Color: Color.White},
        },
    }
}

func Main() {
    Window.ConfigureApplication("Goo starter", "1.0.0", "com.example.goostarter")
    Window{Title: "Goo starter", Width: 360, Height: 220, Root: Counter{}}.Run()
}

Continue with After the counter, then edit and inspect. The app-author documentation index links core, widgets, assets, shipping and plugin guides with their version baselines.

Core concepts:

  • Blob is a UI primitive. Core adds behavior that cannot be composed, plus the semantic Button.
  • Cell owns UI state, identity, and rebuilding. Input callbacks rebuild their owning Cell, so the template button only changes count.

Compose reusable UI with functions and methods. Use with to override properties:

let baseButton = ActionButton{Height: 38.0, MinWidth: 112.0, OnClick: () -> { },}

let primaryButton = baseButton with{Content = "Primary",}

let successButton = baseButton with{
    Content = "Success",
    BackgroundColor = Color.Parse("#166534"),
    TextColor = Color.Parse("#fafafa"),
    HoverBackgroundColor = Color.Parse("#15803d"),
    ActiveBackgroundColor = Color.Parse("#14532d"),
}

let disabledButton = baseButton with{Content = "Disabled", Disabled = true,}

Direct children and spreads use Add in source order. See the native authoring guide for composition, typed Cell inputs, and current language conventions.

Platforms

Check platform preflight and troubleshooting before creating or distributing an app.

Goo ships runtime assets for Windows x64, Linux x64, macOS arm64, Android ARM64, and Android x64. The renderer requires the Vulkan 1.3 feature set used by Goo.

  • Windows x64 is tested on Windows 11 with current vendor Vulkan drivers. The minimum supported Windows version is not yet established.

  • Linux x64 requires Linux 6.6 or newer, glibc 2.27 or newer, a native Wayland 1.18 or newer session, and a TrueType or OpenType sans-serif font. X11 and XWayland are not supported.

  • macOS arm64 requires macOS 14 or newer on Apple silicon. Goo bundles MoltenVK 1.4.2 and selects installed Apple system fonts without requiring a Vulkan SDK.

  • Android requires Android 13 (API 33) or newer and a Vulkan 1.3 device with identity presentation support. The Goo.Android adapter hosts the same application in an Android activity or native view. See Android integration.

Custom shaders

Goo includes the ShaderEffect build adapter and authoring modules. Install these third-party tools only when the project contains <GooShaderEffect> items:

Platform Slang 2026.16 Vulkan SDK 1.4.357.0 with spirv-val
Linux x64 Download .tar.gz Download .tar.xz
Windows x64 Download .zip Download installer
macOS arm64 Download .tar.gz Download .zip

Set SLANG_SDK and VULKAN_SDK to the extracted or installed SDK roots. Goo also accepts slangc and spirv-val on PATH.

Further reading

About

A retained desktop UI framework for G#, rendered directly with Vulkan.

Topics

Resources

Contributing

Stars

18 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages