Release June 11, 2026
Gum Release — June 11, 2026
Biggest Changes
Export a Runtime Snapshot to a Gum Project
The new GumService.ExportSnapshot(filePath) serializes your live, running UI tree to a Gum project (.gumx) you can open in the Gum tool to inspect exactly what your game built at runtime. It works for both code-only and Forms-based screens, copies referenced textures next to the project so it opens self-contained, and matches the project's canvas size to the game's resolution. By default the snapshot is "shaken" — values left at their standard-element default are omitted, so the project reads as cleanly authored and only your deviations show up (pass shake: false for a full snapshot). See https://docs.flatredball.com/gum/code/debugging/runtime-snapshot
Gum Tool
- A new Help → Third-Party Licenses... menu item opens
THIRD-PARTY-NOTICES.txt, a full audit of the open-source libraries the Gum tool and CLI redistribute (FreeType, SkiaSharp, Newtonsoft, Roslyn, and more), grouped by license. - Fixed dragging an element from the tree onto an instance whose base component declares a default child container (e.g. a
ListBox): the new instance now parents into the correct child slot (its inner panel) instead of the bare container, matching how paste and right-click-add already behaved. - Fixed Forms-control instances polluting saved projects: a screen or component holding many buttons, checkboxes, or combo boxes no longer accumulates and writes per-instance default-derived category selectors (e.g.
ButtonCategoryState) to disk when the instance authored nothing. Authored deviations, including partial multi-input authoring, are preserved; already-polluted projects continue to be flagged via GUM0003. - Fixed the tool becoming extremely slow (tens of seconds, especially with a debugger attached) when selecting a screen that references many missing texture files — the missing files no longer trigger a first-chance exception per file on every wireframe rebuild.
Gum Runtimes
- New
GumService.ExportSnapshot(filePath)serializes your live runtime UI tree to a Gum project (.gumx) for inspection in the tool, with textures copied alongside and an optionalshaketo omit default values. See https://docs.flatredball.com/gum/code/debugging/runtime-snapshot - Added a
TextBox.TextChangedByUievent that fires only for user edits (typing, backspace, paste), not programmatic or localization-drivenTextchanges. - Performance: changing, resizing, or toggling the visibility of one child no longer re-lays-out all of its siblings under stacking / depends-on-children / ratio-sized parents, so updating a single item in a large list scales flatly.
- Tab navigation now stays trapped inside the top-most modal dialog instead of leaking focus to controls behind it. See https://docs.flatredball.com/gum/code/events-and-interactivity/tabbing-moving-focus
- Fixed a Forms
MenuItem.Clickedevent firing repeatedly every frame while the mouse button was held, instead of once per click. - A missing or unloadable texture file now falls back to the invalid-texture placeholder instead of throwing or causing a null-reference crash — covering Sprites, NineSlices, bitmap font pages, and texture flip animations (when
MissingFileBehavioris not set toThrowException). - More robust loading of data-driven (
.gumx) projects: variables mapping to enums or nullable enums (int/string → enum) no longer throw during load, and a single bad variable value can no longer tear down an entire screen load. The fix lives in the core reflection setter, so it applies across all backends (MonoGame, Skia, etc.). - Raylib: setting a font through the direct C# property setters (
Font/FontFamily,FontSize,IsBold, etc.) now actually loads and applies the font — previously only assigning the font via a string or a Gum state worked, so the direct setters silently left the wrong font or size showing. Also fixed a case where this path stopped working after aGumServiceteardown/reinitialize cycle. - Blazor WebAssembly: faster runtime project loading — Gum no longer fires a guaranteed-404 HTTP request for every element that has no animation file. Bundle mode scans the in-memory file list (zero I/O, zero 404s) and loose mode enumerates the directory once.
What's Changed
(Complete per-PR list since Release_June_06_2026. Curated highlights above; this is the full, verifiable changelog. 19 PRs.)
- Promote IGumFileProvider to the canonical runtime file seam (#2940) (#3099)
- Handle int/string -> enum and Nullable in SetPropertyThroughReflection (#2924) (#3100)
- Docs: explain GumBatch's relationship with the Camera (#3098)
- Add THIRD-PARTY-NOTICES.txt and surface it from the tool's Help menu (#3042) (#3097)
- Fix drag-dropped element not parenting to target's default child slot (#3096)
- Fix Raylib direct font-property setters not loading the font (#3093) (#3095)
- Docs: add Quick Check section to events troubleshooting page (#3094)
- Stop missing textures from throwing on wireframe rebuild (#3075) (#3092)
- Add TextBox.TextChangedByUi event for user-only text changes (#3084) (#3091)
- Trap Tab focus within the top-most modal (#3079) (#3090)
- Clarify TextBox.PreviewTextInput is user-input-only (#3083) (#3089)
- Encapsulate defaults-only expression evaluation (#3082) (#3087)
- Docs: add a top-level Debugging section and move Hot Reload into it (#3076)
- Fix MenuItem.Clicked firing continuously while mouse held (#3077) (#3085)
- Stop behavior tool-only references from spamming default-derived selectors (#3080) (#3081)
- Runtime snapshot: equal-to-default shake + GumService.ExportSnapshot (#3072)
- Runtime snapshot serializer foundation: live tree -> Gum project, CLI-verified (#3070) (#3071)
- Clarify parent-climb control flow in UpdateLayout (#3067) (#3069)
- Suppress O(N) sibling relayout on descendant change under depends-on-children parents (#3066) (#3068)
Full Changelog: Release_June_06_2026...Release_June_11_2026