Gum Release — July 22, 2026
Breaking Changes
TextRuntime's font-object property is renamed toTypefaceacross all backends — this is just an[Obsolete]warning, nothing breaks. (#3717)
For more information, see the upgrade guide: https://docs.flatredball.com/gum/gum-tool/upgrading/migrating-to-2026-july-2nd-release
Biggest Changes
New Gum.SilkNet Runtime
Silk.NET graduates from an experimental, no-input prototype to a first-class Gum runtime package with real mouse, keyboard, and clipboard input driven through Forms, key-repeat on held keys, working custom cursors, and all 8 packaged themes (DarkPro, Bubblegum, Editor, Retro95, Forest Glade, Meadow, Neon, Hazard) ported to it. See https://docs.flatredball.com/gum
SkiaGum Text Reaches Feature Parity
Text on the SkiaSharp/MAUI/WPF backend picks up the full feature set that MonoGame and raylib already had: inline BBCode styling (color, size, bold, italic, [Custom] per-letter callbacks), outline rendering, standalone drop shadows, Blend modes, ellipsis/vertical-overflow truncation, the MaxLettersToShow typewriter reveal, per-character position lookup, and pixel-snapped rendering. A texture-bleed fix also cleans up dark/muddy edges around anti-aliased text and sprites under Linear filtering. See https://docs.flatredball.com/gum/code/standard-visuals/textruntime
Independent Per-Corner Rectangle Radius
Rectangles now support independent border radius per corner (top-left, top-right, bottom-left, bottom-right), with a link/unlink toggle in the Variables panel — unlinked, each corner can be styled separately instead of all four moving together. See https://docs.flatredball.com/gum
BBCode [State=Name] Text Styling Tag
Text now supports a [State=Name]...[/State] inline BBCode tag that applies a Gum state's color, font family/size/bold/italic/outline, and scale to just that run of text — including states defined inside a category — without needing a separate Text object per style. See https://docs.flatredball.com/gum/code/standard-visuals/textruntime/bbcode
Gum Tool
- Standards color palette in the tree view is now on by default for new or unconfigured projects (previously opt-in); existing projects that had turned it off keep that choice. (#3536)
- Fixed code generation using outdated behavior for projects that reference Gum runtimes via NuGet (Gum.MonoGame, Gum.KNI, Gum.FNA, Gum.SkiaSharp, Gum.raylib, Gum.sokol, Gum.SilkNet) — the tool couldn't recognize the package names and silently generated code for the oldest supported runtime version instead of your actual one. (#3614)
- Fixed renaming a Screens/Components folder or element to change only its letter casing (e.g.
GameMenuScreens→gamemenuscreens) — this was previously blocked as "already exists" on Windows, or could silently discard the file's just-saved content. (#3696) - Fixed Circle instances with non-uniform Width/Height (e.g. an oval) getting collapsed to a square using the smaller dimension when copy/pasted. (#3766)
- Fixed deleting multiple Components/Screens that had existing animation files sometimes resetting the "delete animation file" confirmation checkbox to unchecked partway through. (#3799)
- Renaming a Component/Screen to the same name it already has no longer shows the "may break references" confirmation dialog. (#3801)
- Fixed clicking the mouse Back/Forward (or Middle) button while hovering the tree view accidentally selecting whatever was under the cursor; added browser-style selection history navigation — mouse Back/Forward buttons and new Alt+Left/Alt+Right hotkeys step through previously selected elements/instances. (#3805)
- Fixed mouse clicks near the edge of the editor's wireframe view (e.g. the window-resize splitter) not registering correctly, caused by a WPF interop workaround that had been silently broken since an earlier refactor. (#3831)
- Fixed copying linked components silently failing on macOS/Linux due to a hardcoded Windows-style path separator. (#3882)
- Fixed the Show References dialog sometimes showing stale or blank text when switching between elements. (#3948)
- Fixed dragging a Component, Standard, or Instance from the tree view onto the wireframe canvas doing nothing — the cursor showed a valid drop, but no instance was created. (#3966)
- Fixed a crash in shared file-path handling when resolving the parent directory of a single-character root path (e.g.
/). (#3791) - Continued a large-scale internal refactor decoupling the tool's business logic from WPF/WinForms into a headless library, in preparation for a future cross-platform tool UI (the majority of this release's ~286 PRs) — no user-facing behavior change.
Gum Runtimes
- New Gum.SilkNet runtime with real Forms input — see Biggest Changes. (#3606, #3654, #3655, #3656, #3658, #3659, #3736, #3741, #3744, #3745, #3749)
- SkiaGum Text feature parity — see Biggest Changes. (#3680, #3683, #3686, #3687, #3688, #3693, #3699, #3700, #3702, #3710, #3713, #3715, #3734, #3739)
- Independent per-corner rectangle border radius — see Biggest Changes. (#3618)
- BBCode
[State=Name]text styling tag — see Biggest Changes. (#3729) - Forms controls (buttons, checkboxes, sliders, etc.) get their default visuals and behaviors wired up on the SkiaSharp/MAUI backend for the first time; note that interactive input on that backend still depends on the host feeding mouse/keyboard events through to Gum, which Gum.SilkNet already does out of the box. (#3597, #3599, #3600, #3602, #3604)
- Fixed Raylib: calling
GumService.Uninitialize()left the default font in a stale state, which could cause problems if Gum was reinitialized afterward. (#3595) - Fixed a crash on startup when a project used Canvas, Svg, Lottie, or other extended shape standards. (#3601)
- Reduced per-frame garbage-collector allocations from text layout/wrapping by ~85% for UIs with lots of single-line text. (#3538)
Binding.DefaultUpdateTriggerslets you set a project-wide defaultUpdateSourceTriggerper control type/property (e.g. make allTextBox.Textbindings update onLostFocus) instead of setting it on every individualSetBindingcall. See https://docs.flatredball.com/gum/code/binding-viewmodels/advanced-binding-options#default-update-triggers (#3903)- Added embedding APIs for hosting Gum inside another app's own render loop and cameras (public
GumService.Rootsetter,AttachManagersOnly, pluggable popup/modal roots that get the same automatic z-order and canvas-sizing handling as the defaults). (#3584, #3588) - Gamepad-focused ScrollViewer, ItemsControl, Menu, and ListBox controls can now be scrolled with the right analog stick, not just the D-pad — including in FlatRedBall (FRB) projects. (#3840, #3881)
- Fixed several Raylib Text/Sprite/Container properties (Color, Alpha, alignment, BBCode tags, missing-source-file errors) silently doing nothing when set via states or data binding instead of direct code assignment. (#3628, #3632, #3633, #3643, #3644, #3724, #3725, #3726)
- Fixed a cluster of inline BBCode run bugs: word-wrap and
RelativeToChildrensizing ignoring[FontSize]/[FontScale]runs, locale-dependent tag parsing, dropshadows lost on font-swap runs,[Custom]reading the wrong position after a CRLF line, and a crash resolving fonts after a prior BBCode[IsBold]cache miss (thanks @kaltinril). (#3523, #3525, #3529, #3531, #3533, #3635, #3646, #3647) - Fixed a crash constructing legacy V1/V2 default-visual classes directly in apps that only initialize V3/Newest defaults; fixed a Slider crash with a custom Button template; fixed custom Button visuals not receiving click events; improved TextBox caret positioning performance on Raylib/Sokol. (#3547)
- Fixed
.achxsprite-sheet animations using the Pixel coordinate type rendering the whole texture instead of the correct frame on Raylib and Skia. (#3551) - Fixed Raylib Rectangle and Polygon elements loaded from a Gum project resolving to a generic visual instead of
RectangleRuntime/PolygonRuntime, losing runtime-specific properties. (#3577) - Fixed RaylibGum's camera and window-fit sizing using DPI-scaled logical dimensions instead of physical pixels, so raylib HiDPI windows size/fit consistently with the other backends. (#3589)
- Fixed ListBox popups overflowing off-container when shown inside a custom popup root instead of the default global canvas. (#3592)
- Fixed a rare crash (
KeyNotFoundException) in SkiaGum apps loading images, SVGs, fonts, or animations from multiple threads at once. (#3610) - Fixed localized text not being translated at runtime in SkiaGum-based apps (SkiaGum Standalone/WPF/MAUI, Gum.SilkNet). (#3622)
- RaylibGum now targets raylib-cs 8.0.0 (raylib 6.0). (#3638)
- Fixed the
AdditionalPropertyOnRenderableextension hook being silently ignored on the Skia backend. (#3661) - Fixed custom shaders failing to load (silently disabling custom rendering) when a game was launched via a file association, since the shader lookup used the working directory instead of the app's own directory. (#3695)
- Ported the "why isn't this click registering" cursor diagnostic (coordinate/zoom mismatches, hidden or disabled ancestors, etc.) to FlatRedBall (FRB1) projects, matching MonoGame. (#3697)
- Fixed
CustomFontFilesilently falling back to the default font instead of loading a.ttf/.otffile on MonoGame/KNI/FNA and Skia; fixed relativeCustomFontFilepaths in code-only projects resolving against the wrong folder. (#3707) - Fixed render targets (
IsRenderTarget) rendering darker/duller than expected in premultiplied-alpha pipelines such as FlatRedBall. (#3769)
Tutorials and Templates
- Release builds now show a clear "element not found — did you forget to load a Gum project?" error instead of a confusing
NullReferenceExceptionwhen generated code can't find its element. (#3578)
Full Changelog: Release_July_06_2026...Release_July_22_2026



