goo
goo is a full-featured s&box UI framework in C#. structure, style, and behavior in one language
favorite10favorites
thumb_up13upvotes
hard_drive
1 MB
folder
173 files
build
Engine v28
About This Package
goo
goo is a full-featured s&box UI framework in C#. structure, style, and behavior in one language.
think about it like this: if markup and stylesheets did the whole job, there'd be no JavaScript. goo exists to consolidate layout, behavior, and styling into one language with a simplified syntax.
what's in it?
blobs: 12 blob typesContainer,Text,Image,Sector,Arc,Polygon,ScenePanel,SvgPanel,WebPanel,TextEntry,EmbedVirtualized
reconciliation: diffs your UI tree against the last UI tree, applies minimum changes automatically
styles: init-only properties on blobs matching the engine's api
animations: dampers, tweening, easing, timeline, animator
drag and drop: built in code just for you
style tokens:Goo.Tokensfor reusable values
shapes: static factories for composite shapes like rings and discs
panel transform: transform, translate, rotate, scale
cells: stateful layout nodes
zero-alloc: children are pooled, 0-byte animation updates, describes a fresh tree each time
can you read good? here are the docs:
170
Total Users
336
Total Sessions
2.3 days
Total Playtime
Package ID:
xaz.goo
Created:
2026-06-02 04:51 UTC
Updated:
2026-08-01 00:18 UTC
Type:
library
Public:
Yes
Version:
337913
files:
173
Size:
1.2 MB
Engine Version:
28
Asset Version ID:
337913
Version Created:
2026-08-01 00:18 UTC
Hash:
1785543503
Manifest: Open manifest
Compiler:
Sandbox, SANDBOX, 1701;1702;1591;8632;8669;8629;0436;, , , 1, Release, Array, Array, Array, Array
Resources:
Code Package References:
Shadows update
Jul 31, 2026
Added
- TextShadow for Text, TextEntry, and Container
Improved
- BoxShadow and TextShadow now accept ordered Shadows stacks. A single Shadow or Shadow[] still assigns directly
- Inset BoxShadow entries are ignored and report one warning per process
Fixed
- Shadows.None cancels inherited text shadows despite an engine cascade bug
Goo Tokens
Jul 22, 2026
Added
- Added GooTokenScope for defining reusable tokens directly in the inspector.
- Supports color, length, float, integer, boolean, string, and texture tokens.
Fixed
- Fixed invalid font-size warnings caused by compact length controls painting before layout.
RichText and Path support
Jul 21, 2026
Added
- Text rich mode through new Text(content, true) or IsRich = true
- Markdown support for emphasis, strong text, strikethrough, links, headings, lists, quotes, inline and fenced code, and line breaks, while preserving engine-supported inline HTML
- Generic mounted text-file loading through Text.Path; file extensions do not select plain or rich rendering
- Skins.NineSlice(string path, ...) with lazy mounted-file loading, path caching, and retries after failed loads
Improved
- Nine-slice diagnostics now warn about missing sources, zero rendered borders, and source slices that consume the texture center
- Nine-slice documentation now clearly distinguishes source-image slice pixels from the rendered border size
Virtualization
Jul 19, 2026
Added
- Virtualization: Virtual blob (Virtual.List/Grid/Custom factories) over the engine's BaseVirtualPanel
- GooVirtualList: fiber-backed list rows with panel recycling. Persistent fiber per row, pooled panels, rediff on item change
- GooVirtualGrid: same recycle machinery (extracted into abstract GooVirtualPanel) plus engine GridLayout math
Fixed
- Arrow key names in KnownKeys.cs fixed
small perf update + other changes
Jul 15, 2026
Improved
- Style apply resolves declared fields in a single pass instead of re-scanning the style list per property. Per-frame property resolution was a bit too bulky so the intermediate "good enough" fix for this is to create a scratch area instead of iterating all properties. This makes field resolution 5-14x faster and roughly halving the total cost of applying a changed style. In reality, these changes are measures in nanosecond on the CPU, but worth addressing sooner rather than later when something breaks
- ShaderEffect re-checks shader source at most once per second, so live shader edits refresh the uniform schema without restarting.
Fixed
- The Overflow shorthand no longer gets wiped by per-axis writes during style apply, so Overflow actually clips/scrolls. OverflowX/OverflowY not affected
Removed
- TextEntry paste workaround removed. The engine's fixed paste path supersedes it with MaxLength truncation and emoji replacement
Auto-rebuild and Each If Children
Jul 5, 2026
Added
- State<T> + Track<T>( initial ) on both GooPanel and Cell. Auto-dirtying state for mutation outside event handlers (timers, network, polls): writing a different Value marks the owner dirty, no manual Rebuild()
- Each.Of( items, builder ) / Each.Of( items, keyOf, builder ) plus a Children.Add overload for it: keyed list building inline in a Children = { ... } initializer instead of a separate AddRange call
- Children.Add( in T? child ): nullable-child overload, the conditional-child idiom that replaces AddIf
- Layout.Stack() and Layout.Layer( child ) with overloads for Container, Sector, Arc, and Polygon
- Hud.ScrollArea, Hud.DismissScrim, Hud.FillRect: factories for the three most common test case patterns (bounded-height scroll triple, invisible dismiss click-catcher, absolute left-anchored fill bar)
- Controls.Slider optional palette params: trackColor, fillColor, thumbColor
- Viewport.CenterOn( world, screenPoint ): pin a world position to a given screen point
- Perf: opt-in live pipeline profiler (Perf.Enabled, Report(), Reset())
Improved
- Cell.Mount no longer allocates when seed and configure are both null.
- Variant application is gated on raw inputs: identical variant inputs skip the StringBuilder and rgba string work, so per-frame style writes on variant-carrying panels no longer pay a CSS build per pass
Removed
- Removed Children.AddIf( condition, child ). Replace with the new nullable Add: children.Add( cond ? child : null )
goo updated to 304064
Jun 28, 2026
Added
- Native reactive UI particles via Hud.Particles / ParticleField
- GPU SDF arbitrary-polygon shapes (points-texture packing), plus a stable-identity AddRange overload for keyed lists Position/offsets, PointerEvents and BorderRadius exposed on Scene, Svg and Web panels
- Controls.Popover(open, trigger, content, anchor, onDismiss, gap, key) helper for controlled anchored popover (Top / Bottom / Left / Right / BelowStart) with click-away light-dismiss - adjacent to the engine's Sandbox.UI.Popup and BasePopup
Improved
- Unified the shape surface onto GPU SDF: Sector, Arc and Polygon all render via SDF. Included ui_shape.shader for this functionality
- All shapes gained HoverBackgroundColor + TransitionMs, with outline-accurate true mouse enter/leave gating across every Stateful panel
- Style resolution is now last-declared-wins (was first-wins)
Removed
- Deleted the unused HitShapes CPU library
Known Issues
- Please make sure if you are using this, update your code: Controls.DisabledOpacity moved to Container.DisabledOpacity
Small bugfixes
Jun 14, 2026
Fixed
- Applier.cs pointer-events not clearing All, returning mouse input to the user
- hover / active background workaround for engine bug
Some fixes and better goo
Jun 12, 2026
Added
- Goo.PointerDrag - frame-polled move/resize drag
- Container.SwallowClick - fixes click-bubbling
- Container.Disabled - Pointer off and reduced opacity
- LayoutTransition - GlideState -- unified animation state system
- expanded Image blob - positioning, Border, Radius, ImageRendering
- Text.Style, UniformValue.Time, motion token
- Cell.Mount - replaces hand-rolling _seeded guards
- damper Tick(dt) - all 9 damper types now have Tick delta time
- KeyTracker.Pressed rising-edge query
Improved
- Hover/ActiveBackgroundColor on same container fixed
- ZIndex fix - paint order should adhere to Z values now
Removed
- AnimationGate API - replaced with more coherent animation system
ShaderEffect and QOL helpers
Jun 10, 2026
Added
- ShaderEffect refactor: construct from a shader path with an indexer uniform bag.
- Uniforms accept per-frame functions and a built-in clock:
- Hud.Overlay() - full-screen HUD root column layout, pointer-through (does not swallow game input)
- Hud.Fill() - absolute layer, pointer-through; the standard Hud for shader effects
- Hud.Scrim(color) - edge-pinned tinted backdrop for modals. PointerEvents left to the caller so it can toggle on open/close
- Hud.Wallpaper(texture, path) - background image layer by texture or by path
- Hud.Anchored(anchor, content, padding) - pins content to a screen corner or edge center, pointer-through
- Hud.Spacer() - flex-grow gap that pushes siblings apart
- Hud.Divider(color) - 1px full-width horizontal rule. low-alpha white by default.
- Controls.Button(...) ready-made button and Children.AddIf(condition, child)
- Container.Disabled forces pointer-off and dims, per node, applied after state variants.
- Container.SwallowClick stops a click from bubbling
- PointerDrag frame-polled move/resize helper, UI-scale correct via Current(panel)
- PaddingX/Y
- MarginX/Y
- BorderTopRadius
- BorderBottomRadius
- BorderLeftRadius
- BorderRightRadius
- All 9 animation dampers gain Tick(dt).
- KeyTracker.Pressed(name) rising-edge query.
- Text.Style takes a TextStyle bundle for one-shot font blocks.
- Cell.Mount<TCell>(key, seed, configure): seed runs once at first mount, configure every rebuild.
- Image gains a positioning subset and defaults BackgroundRepeat to NoRepeat, stopping ObjectFit.Contain tiling
Improved
- ShaderEffect materials are created on the main thread (fixes a render-thread crash)
- Disabled styling is applied after state variants so it wins over hover/active.
- Theme motion tokens (MotionFast/Base/Slow) are ints, removed casts.
lean goo fixed goo
Jun 5, 2026
Added
- goo updated to 275570:
- TextEntry primitive
- TextEntry auto-grow default to 2.5x with override
- TextEntry character limiting, regex matching behavior, character limits
- Separate click routing for left/right/middle click
- Scroll behavior implemented
- Added a "viewport" primitive allowing for pan/zoom "infinite" canvases
Fixed
- Fixed pointer events for children being null instead of none, preventing pop-ups from appearing when mousing over the text itself
- Fixed stylesheet bleed reconciliation
- Fixed nullable warnings and suppressed some noisy CS warnings
Removed
- Cleaning the repo of examples -- will author examples a different way (~6MB to ~500kb)