Skip to content

Release July 6, 2026

Latest

Choose a tag to compare

Gum Release — July 6, 2026

Breaking Changes

  • Gum.SkiaSharp (SkiaGum) is now rendering/layout only. GumService has moved out to each host package (SkiaGum.Wpf, SkiaGum.Maui, standalone) instead of living on SkiaGum itself. This is a breaking change for any code that referenced SkiaGum's GumService directly — update to the host-specific GumService. Real-world impact is expected to be near-zero (no known external consumers of SkiaGum.GumService today), but it's a public API removal so it's called out here. (#3220)
  • Legacy V1/V2 Forms default visuals are now marked [Obsolete] (a compiler warning, not an error) and are planned for removal in a future release. V3 remains the current default. (#3493)

For more information on migrating, see the upgrade guide: https://docs.flatredball.com/gum/gum-tool/upgrading/migrating-to-2026-july

Biggest Changes

Raylib Reaches Render-Target & Post-Process Shader Parity

Raylib containers can now do everything MonoGame's render-target containers gained last release: bake a subtree to an offscreen texture and composite it back — including nested render targets, group alpha, additive blending, and now custom post-process shaders via RenderTargetEffect/SourceShaderFile. A string of raylib-specific bugs that would have undermined this (zero-size targets dropping content, blend leaking onto siblings, stale-frame flashing, camera zoom/pan getting clobbered by a blurred dropshadow bake, off-camera targets bleeding content into the visible area) were fixed along the way. See https://docs.flatredball.com/gum/code/standard-visuals/containerruntime

1_shader

TextRuntime Baked Drop Shadows

Text can now have a real drop shadow baked directly into its font atlas at generation time. Set HasDropshadow (plus DropshadowColor, DropshadowOffsetX/Y, DropshadowBlur) on a TextRuntime and KernSmith bakes a per-glyph shadow into the font, replacing the old workaround of rendering the label twice to fake a shadow. Requires KernSmith registered as the font generator. See https://docs.flatredball.com/gum/code/standard-visuals/textruntime/fonts

2_dropshadowraylib

Code Generation Now Targets Raylib

Screens and Components can generate C# code targeting RaylibGum — selectable in the tool's Output Library picker, or auto-detected by gumcli codegen-init for Raylib-cs projects. Initial support covers the FindByName instantiation style; FullyInCode codegen for Raylib isn't supported yet.

3_raylibCodegen

Raylib Inline BBCode Text Markup

Raylib's Text now renders inline BBCode markup — [color=Red], [FontScale=1.5], and friends — with per-run styling, matching MonoGame. Previously these tags were stripped with no visual effect on raylib. See https://docs.flatredball.com/gum/code/standard-visuals/textruntime/bbcode

4_raylibbbcode

Restyle Any Built-In Theme Before Applying It

Every built-in theme (DarkPro, Bubblegum, Editor, Retro95, Forest Glade, Meadow, Neon, Hazard) now exposes a mutable XyzStyling.ActiveStyle — e.g. DarkProStyling.ActiveStyle.Colors.Primary = ... — so you can restyle a shipped theme's colors and fonts before calling Apply() instead of forking its source. Along the way, a few themes had colors that were cached too early to pick up ActiveStyle changes; those now read live.

5_a_style1 5_b_style2

Animation Editor Reliability Overhaul

A cluster of fixes makes the animation editor trustworthy again: keyframes referencing a missing state or animation now show a clear red error icon (in both the keyframe list and the tree view) with a tooltip naming the specific missing state and category; errors refresh immediately on project open, on edit, and on undo/redo instead of going stale; animation edits (timing, state/animation references) are now part of undo/redo; deleting a keyframe prompts for confirmation; and .ganx files edited externally now live-reload instead of requiring a restart.

6_animerrors

Experimental Standards Palette

A new View menu option ("Standards palette (experimental)", off by default) replaces the Standard elements tree folder with a draggable chip grid pinned to the bottom of the Project panel. Drag a chip onto the tree or wireframe canvas to create an instance, right-click a chip for "Add to current element" or "Edit defaults", or Ctrl+click to add it to the currently open Screen/Component.

7_newStandards

Gum Tool

  • Experimental Standards palette — see Biggest Changes. (#3404)
  • Animation editor reliability overhaul — see Biggest Changes. (#3382, #3389, #3394, #3396, #3397, #3398, #3407, #3409, #3411, #3412)
  • Code generation setup now auto-detects shared projects (.shproj) as well as .vbproj/.fsproj as the project root, so KNI/MonoGame setups with multiple heads sharing one project no longer require a .csproj to enable code generation. (#3499)
  • Fixed a code-generation bug (CS0117) that made FullyInCode games fail to compile when targeting plain MonoGame, Raylib, WPF, MAUI, or Xamarin.Forms — a Forms-only method call was being generated for all output types, not just MonoGame Forms. (#3502)
  • Fixed a crash ("Cannot modify the empty collection") running FullyInCode-generated code for a Screen with no BaseType on the unified MonoGame/Raylib/KNI/FNA runtime, if the Screen had any instances; also fixed FullyInCode Screens outside MonoGame Forms output defaulting to a tiny 32x32 size instead of filling their parent when no explicit Width/Height was set. (#3503)
  • Fixed opening older (pre-v3) Gum projects auto-injecting newer v3-only variables into standard elements on load, which broke FlatRedBall codegen for older projects with compile errors after the project was re-saved. (#3290)
  • Fixed SVG export (gumcli svg and File > Export) silently dropping Rectangle shapes. (#3262)
  • Fixed a crash exporting a project to SVG when it contained a Line shape. (#3365)
  • The Errors tab now explains the red "!" missing-file indicator in the tree: selecting a flagged element shows a GUM0004 error naming the element and the file path Gum expected to find (also surfaced by gumcli check). (#3366)
  • Gum now detects when an element's file is deleted from disk while the tool is running and flags it with the red "!"/GUM0004 error instead of silently diverging until the next save; restoring the file automatically clears the indicator. (#3371)
  • Fixed: declining to recreate a missing standard/screen/component file ("Recreate it?" > No) no longer gets silently overridden — Gum no longer regenerates that file the next time the project is saved. (#3370)
  • Fixed a crash (KeyNotFoundException) when the tool tried to recreate a missing Skia shape standard (Arc, Canvas, Line, Svg, LottieAnimation) or legacy shape (ColoredCircle, RoundedRectangle) while loading a project; it now shows an informational message telling you to restore the file from version control or re-add the plugin instead of crashing. (#3375)
  • Fixed a crash when pressing Ctrl+C to copy text in a dialog if Windows briefly denied clipboard access; the tool now retries more and silently gives up instead of crashing. (#3377)
  • Copy/paste now preserves your selection: pasting a parent instance with children no longer selects all the new children too — only what you originally had selected is selected after paste. (#3272)
  • The Variables tab's right-click menu on an exposed variable now says "Rename Variable [exposed name]" instead of the misleading "Edit Variable", since that action only renames the exposed name. (#3379)
  • TextBox controls (Standard and Bubblegum Forms themes) now preview multi-line vs. single-line mode in the tool when you set TextWrapping/AcceptsReturn, instead of showing no visible change at design time. (#3387)
  • Fixed the Output window printing the same "Error setting SourceFile" message 4 times when selecting a Screen or Component containing a Sprite with a missing/invalid SourceFile — now printed once. (#3213)
  • The Output window now confirms when a Container's shader file compiles successfully for the WYSIWYG render-target preview, instead of staying silent on success. (#3216)

Gum Runtimes

  • Raylib render-target & post-process shader parity — see Biggest Changes. (#3436, #3448, #3451, #3467, #3468, #3469, #3477, #3479)
  • TextRuntime baked drop shadows via KernSmith — see Biggest Changes. (#3413)
  • Raylib inline BBCode text markup — see Biggest Changes. (#3480)
  • Built-in theme restyling via mutable ActiveStyle — see Biggest Changes. (#3439, #3441, #3442)
  • Full raylib Blend-mode and shape-parity sweep: raylib now supports all Gum Blend modes (Replace, ReplaceAlpha, SubtractAlpha, MinAlpha, Additive, etc.) on Sprite, NineSlice, Rectangle, and Circle; Sprite texture wrap/tiling (Wrap=true); Arc gradient fills; Sprite/NineSlice auto-loading .achx animation chains; and IsAntialiased added to Circle for cross-platform code compatibility. (#3453, #3455, #3457, #3461, #3473, #3492)
  • Raylib Text now supports GetCharacterIndexAtPosition (for click/tap-to-character lookup), Blend, and a per-instance TextRenderingPositionMode override to opt out of pixel-snapping — all matching MonoGame. (#3485)
  • Raylib Forms gamepad navigation now reads the analog triggers and right stick, matching the MonoGame gamepad driver (previously only the left stick and face/shoulder buttons were read). (#3484)
  • Raylib Sprite now honors ColorOperation.ColorTextureAlpha (tint fills the sprite using only the texture's alpha as a mask), matching MonoGame; also fixed a MonoGame bug where a sprite using this color operation would retroactively tint other sprites already queued earlier in the same batch. (#3488)
  • Fixed raylib projects: Menu, MenuItem, and PasswordBox components defined visually in the Gum tool (loaded from a .gumx file) now get their proper interactive Forms behavior — previously they silently fell back to plain, non-interactive elements even though the identical controls worked when created in code. (#3489)
  • Fixed raylib Sprites with an oversized source rectangle repeating at the edges instead of clamping. (#3462)
  • Fixed CircleRuntime.Color rendering a white outline instead of the assigned color on raylib. (#3446)
  • Fixed a RaylibGum font-cache bug that caused fonts to be repeatedly re-rasterized and re-uploaded to the GPU, making theme switching (and any repeated font use) slow to leak over time. (#3447)
  • Raylib text now renders using the project's TextureFilter setting (Point or Linear) instead of always forcing Point filtering; loading a multi-page bitmap font from a bundled/in-memory stream now fails with a clear error instead of silently rendering wrong glyphs from only the first page. (#3497)
  • Fixed rectangles with a ScreenPixel-unit corner radius not scaling correctly under camera zoom on raylib, matching MonoGame/KNI/FNA and Skia. (#3495)
  • Fixed raylib text disappearing (and vertical stacking breaking) after the first Text failed to load a .fnt file — the empty fallback font got reused for every later Text in the same layout, collapsing them to zero size. (#3232)
  • Fixed a memory leak where GPU render targets used by IsRenderTarget containers were never freed when rendering via the single-layer Draw(Layer) path — most notably affecting FlatRedBall/Glue integration, which uses this draw path by default. (#3418)
  • Fixed render-target-backed textures (referenced via RenderTargetTextureSource) showing up blank when referenced from a different layer than the one currently being drawn with per-layer Draw(Layer) calls. (#3420)
  • Performance: invisible IsRenderTarget containers are no longer re-rendered every frame unless something actually references them. (#3421)
  • Fixed a performance issue in the experimental Forms Grid control where resizing a child inside a plain Auto-sized row triggered a full rebuild of every cell in the grid, causing multi-second freezes when nesting non-trivial controls inside Grid cells. (#3217)
  • Fixed Text progressively shrinking and eventually disappearing (in both the tool's editor preview and at runtime) when using TextOverflowVerticalMode.TruncateLine together with HeightUnits set to RelativeToChildren. (#3378)
  • Fixed Text with an inline [FontScale] markup run overlapping the next element in a stack — the larger run's height/width is now correctly included in the reported layout size. (#3482)
  • Fixed dropshadows with very large blur values saturating to a flat gray blob instead of fading out like a real soft glow, on Circle and RoundedRectangle in both the tool and at runtime. (#3266)
  • Fixed a visible gap between the fill and stroke at rounded corners on filled Rectangles with a stroke and CornerRadius set. (#3270)
  • gue.AddChild(formsControl)/RemoveChild now work under a plain using Gum; — no need for using Gum.Forms.Controls; (which could collide with your own control names like StackPanel) or the older MonoGameGum/RaylibGum namespaces. (#3227)
  • Fixed a bug in the MonoGame Circle and Rectangle shape runtimes where cloning a shape with a gradient fill didn't apply the gradient to the clone until some other property was changed afterward. (#3427)
  • Fixed a NullReferenceException loading MonoGame/KNI/Skia projects with previously code-generated screens/components that reference shape or standard runtimes predating the Gum.GueDeriving namespace migration — existing generated code now works without needing to regenerate. (#3381)
  • Fixed ListBox corrupting selection and throwing when a non-ListBoxItem visual (e.g. a Button) was mixed into Items — adding/selecting items after it could throw or select the wrong object; clicking a non-ListBoxItem is now correctly inert. (#3306)
  • Fixed ListBox rows all highlighting together when the same data object appeared more than once in the bound Items list; also fixed SelectedIndex sometimes pointing at the wrong row after reordering, and Ctrl+Click multi-select failing when two rows shared the same duplicate data value. (#3510)
  • ListBox/ItemsControl now supports inert decorations (separators/chrome) placed between rows via new AddDecoration/InsertDecorationBefore/InsertDecorationAfter/RemoveDecoration APIs — decorations can't be selected, keep SelectedIndex contiguous, and are skipped by keyboard/gamepad navigation. (#3314)
  • Fixed Standard Element category/state assignments (e.g. a NineSlice's ColorCategoryState or StyleCategoryState) silently doing nothing in code-only games — projects with no loaded .gumx file, or using FullyInCode — these now apply correctly. (#3506)
  • Reduced per-frame managed allocations during idle rendering by ~85% (831 to 128 bytes) by fixing an internal per-frame rendering state stack that grew unbounded every frame — less GC pressure and fewer potential frame hitches in MonoGame/KNI/FNA games. (#3514)

What's Changed

  • Runtime allocation pass (#1934): idle Draw-walk zero-alloc + SpriteBatchStack NET8+ leak fix (#3514)
  • Document Raylib code generation support (Output Library + codegen-init auto-detect) (#3511)
  • Fix ListBox selection collapsing all rows sharing a duplicate data reference (#3510)
  • Unify MonoGame shape demos into MonoGameGumInCode, retire GumShapesGallery (#3474) (#3508)
  • Fix Standard Element category/state assignments silently no-op in code-only games (#3505) (#3506)
  • Fix FullyInCode codegen crash and layout bugs for unified-runtime Screens with no BaseType (#3503)
  • Fix RefreshInternalVisualReferences codegen gate to MonoGameForms only (#3502)
  • Recognize .shproj (and .vbproj/.fsproj) as valid code-gen project roots (#3499)
  • raylib Text: apply project TextureFilter to font textures (#3497)
  • RaylibGum RectangleRuntime: add CornerRadiusUnits (ScreenPixel scaling) (#3494) (#3495)
  • Forms: mark V1/V2 default visuals as [Obsolete] (#3493)
  • RaylibGum CircleRuntime: add Blend (real) and IsAntialiased (parity) (#3491) (#3492)
  • Samples: mirror Blend-on-Text row to MonoGame and make additive visible (#3490)
  • raylib: register from-file Menu/MenuItem/PasswordBox Forms defaults (#3489)
  • raylib Sprite: honor ColorOperation.ColorTextureAlpha (#3486) (#3488)
  • Docs: mark raylib native text input as intentional won't-do (#3487)
  • raylib Text parity: GetCharacterIndexAtPosition, Blend, TextRenderingPositionMode override (#3485)
  • RaylibGum: read gamepad triggers and right stick in Forms driver (#3484)
  • Text: grow reported size by per-line inline [FontScale] run (#3481) (#3482)
  • raylib Text: render BBCode inline Color/FontScale markup (#3471) (#3480)
  • raylib: render nothing for off-camera / degenerate render targets, converging on MonoGame (#3478) (#3479)
  • raylib: skip off-camera render-target bake so it can't clear the screen (#3475) (#3477)
  • raylib: implement full Blend mapping (Replace/ReplaceAlpha/SubtractAlpha/MinAlpha) (#3473)
  • Fix raylib blurred dropshadow clobbering active render target inside a bake (#3469)
  • Add raylib container post-process shader (RenderTargetEffect / SourceShaderFile) (#3465) (#3468)
  • RaylibGum: bake invisible render-target containers when referenced by a Sprite (#3452) (#3467)
  • Fix raylib blurred dropshadow clobbering active camera for rest of frame (#3460) (#3463)
  • Implement software clamp-to-edge for raylib Sprite Wrap=false (#3459) (#3462)
  • Add raylib Blend support to RectangleRuntime (#3458) (#3461)
  • raylib: implement Sprite texture wrap / tiling (#3456) (#3457)
  • Add gradient surface to raylib ArcRuntime/LineArc (#3454) (#3455)
  • Port SpriteRuntime.RenderTargetTextureSource to raylib (#3451)
  • Enable Sprite/NineSlice .achx auto-load via SourceFile on raylib (#3453)
  • Fix RaylibGum font-cache poisoning causing repeated texture regen/leak (#3447)
  • Re-enable ClipsChildren inside a render target on raylib (#3440) (#3448)
  • Add theme customization checkbox + docs (#3445)
  • Fix CircleRuntime.Color rendering white outline on raylib (#3444) (#3446)
  • raylib render-to-texture for IsRenderTarget containers (#3434 PR 1) (#3436)
  • Fix stale palette references in themes README (#3443)
  • Themes: mutable XyzStyling.ActiveStyle for Retro95, ForestGlade, Meadow, Neon, Hazard, Template (batch, part of theme palette redesign) (#3442)
  • Themes: mutable EditorStyling.ActiveStyle + fix missing Accent sync (#3441)
  • Themes: mutable XyzStyling.ActiveStyle for DarkPro + Bubblegum (#3439)
  • Document V3 code-only styling's state-color mechanism (#3438)
  • Add Raylib support to code generation (#3431)
  • Extract shared Gradient/Dropshadow state from Circle/RectangleRuntime (#3427)
  • Skip baking invisible render targets unless referenced. (#3421)
  • Fix cross-layer RenderTargetTextureSource on per-layer Draw(Layer). (#3420)
  • Fix render-target leak on single-layer Draw(Layer) (#3418)
  • Docs + samples: TextRuntime baked drop shadow (#3414) (#3415)
  • Expose KernSmith baked text drop shadows at runtime (#2724). (#3413)
  • Show broken-keyframe indicator on animation list rows (#3401) (#3412)
  • Live-reload .ganx animation files edited on disk (#3410) (#3411)
  • Name the missing reference in animation keyframe error (#3400) (#3409)
  • Make animation edits undoable (fold into the element undo snapshot) + keyframe-delete prompt (#3407)
  • Add experimental Standards palette to replace the Standard tree folder (#973) (#3404)
  • Refresh animation keyframe errors after deleting a category (#3392) (#3398)
  • Unify tree-view error icon to a circled-! matching the keyframe ErrorCircle (#3391) (#3397)
  • Focus the animation-name textbox when the New Animation popup opens (#3390) (#3396)
  • Make missing-state keyframe error readable in both themes and move it to the top (#3385) (#3394)
  • Mark broken keyframes with a red error icon in the animation keyframe list (#3386) (#3389)
  • TextBox: drive line-mode (LineModeCategoryState) from TextWrapping/AcceptsReturn at design time (#3387)
  • Detect animation keyframe errors per-element (headless) so the tree '!' shows on project open and on edits (#3293) (#3382)
  • Loader: instantiate obsolete shape/standard shims, not the new base (#3380) (#3381)
  • Say 'Rename Variable' for exposed variables in the Variables-tab context menu (#3301) (#3379)
  • Fix Text vanishing under TruncateLine + RelativeToChildren height (#3372) (#3378)
  • Don't crash the tool when Ctrl+C clipboard copy hits CLIPBRD_E_CANT_OPEN (#3368) (#3377)
  • Fix shape runtime docs: correct FillColor/IsFilled model and mirror Circle/Rectangle pages (#3376)
  • Don't crash recreating a missing Skia standard; inform instead (#3373) (#3375)
  • Detect runtime deletion of element files and flag missing source (#3367) (#3371)
  • Don't recreate missing-source element files on project save (#3369) (#3370)
  • Surface missing-source elements as GUM0004 in the Errors tab (#3309) (#3366)
  • Fix headless SVG export crash on projects containing a Line (#3324) (#3365)
  • Remove the shipped ListBoxSeparator convenience visual (#3321)
  • Document the ListBox/ItemsControl decoration API (separators/chrome) (#3316) (#3318)
  • ListBox/ItemsControl decoration API: inert separators/chrome between rows (#3305) (#3314)
  • Resolve ListBox selection by reference so non-ListBoxItem visuals can't corrupt it (#556) (#3306)
  • Version-gate standard-element back-fill so old projects aren't injected with v3 variables (FRB #1881) (#3290)
  • Mirror copy-time selection after paste (#3269) (#3272)
  • Fix #3268: reduce rounded-rect fill corner radius by FillInset (#3270)
  • Fix #2955: energy-preservation falloff for extreme dropshadow blur (#3266)
  • Fix #3259: register Rectangle runtime in SkiaGum so it renders in SVG export (#3262)
  • Docs: modernize MonoGameGum.Input.* / MonoGameGum.Forms.* in code-doc samples (#3257) (#3258)
  • Docs: teach using Gum; for GumService in setup/tutorial pages (#3221) (#3255)
  • Docs: fix broken/missing internal links across the docs site (#3238) (#3244)
  • Documentation updates (#3237) (thanks @kaltinril)
  • Fix raylib font cache-hit serving the empty font cached after a failed .fnt load (regression from #3173) (#3232)
  • Modernize hand-written samples to using Gum; and normalize raylib loop order (#3222) (#3230)
  • Make GraphicalUiElement.AddChild/RemoveChild instance methods so gue.AddChild(formsControl) works under 'using Gum;' (#3226) (#3227)
  • Make Gum.SkiaSharp rendering-only; relocate render-only GumService to a host-owned model (#3218) (#3220)
  • Docs: make code-only Forms tutorial cross-platform (MonoGame + Raylib) (#3178) (#3219)
  • Fix Forms Grid layout storm: skip rebuild on resize for plain Auto rows (#3205) (#3217)
  • Report successful render-target shader compiles to the Output window (#3216)
  • Fix Sprite SourceFile error printing 4x on screen selection (#3212) (#3213)

Full Changelog: Release_June_19_2026...Release_July_06_2026