Skip to content

Release June 11, 2026

Choose a tag to compare

@github-actions github-actions released this 11 Jun 00:34
· 908 commits to main since this release

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

10_19 13 06

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 optional shake to omit default values. See https://docs.flatredball.com/gum/code/debugging/runtime-snapshot
  • Added a TextBox.TextChangedByUi event that fires only for user edits (typing, backspace, paste), not programmatic or localization-driven Text changes.
  • 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.Clicked event 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 MissingFileBehavior is not set to ThrowException).
  • 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 a GumService teardown/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