Releases: vchelaru/Gum
Hotfix January 31, 2026
This release is a hot fix to address a bug causing slow project loading and subsequent errors on standard elements.
What's Changed
- Fixed Window cursors not changing when resize mode is set to none by @vchelaru in #2059
- 1974 non rectangular buttons not supported part2 by @vchelaru in #2061
- Lots of refactoring by @vchelaru in #2062
- Fixed combo box binding context resetting when list box opens/closes by @vchelaru in #2068
- Refactor rendering library by @vchelaru in #2070
- Fixed slow load time/errors by ignoring file changes on elements on i… by @vchelaru in #2073
Full Changelog: PreRelease_January_28_2026...PreRelease_January_31_2026
January 28, 2026
Breaking Changes
- Replaced
IRenderableIpsoin GraphicalUiElement withGraphicalUiElementto reduce casting. - Moved SkiaGum to the Runtimes folder
For more information on breaking changes and new deprecated members, see the Migrating to January 2026 page: https://docs.flatredball.com/gum/gum-tool/upgrading/migrating-to-2026-january
Biggest Changes
Added new resolution dropdowns
These dropdowns can be used to test your project in common resolutions. These can also be customized by modifying the .gumx file.
Added new StackSpacing support on Grid containers
Added new Anchor Horizontal and Anchor Vertical
New Anchor Horizontal and Anchor Vertical added to the tool, plus also added at runtime (thanks @kaltinril )
Added support for NineSlice Border Scaling
NineSlices can now scale their borders instead of always drawing at 100%.
TextBox in raylib
Previous versions of raylib Gum did not support TextBox. This version introduces TextBox, matching functionality of MonoGame Gum.
Performance Improvements on NuGet package
All Gum NuGet packages are now built in release mode rather than debug, improving runtime performance. (thanks @kaltinril )
Gum Tool
- Added new option to optimize font textures by recursively creating fonts at different sizes
- Fixed broken rename folder functionality
- Added generated code for animations (thanks @Yuan-Zzzz )
- Component and Screen Name textbox no longer includes the folder name
- Added Cut and Copy right-click menu items next to Paste (thanks @kaltinril )
- Default text box no longer line-wraps placeholder text, and layout is now the same as TextBox (thanks @kaltinril )
- Added Polygon XOrigin and YOrigin
- Default polygon now starts at 0,0 and is 32x32 down and to the right
- Point movement on polygons now rounded to avoid long floating point values
- Renaming a component no longer creates an empty animation file
- Fixed bugs when drag+dropping an instance from one component into another component
- Fixed bug when drag+dropping instances onto another instance of the same name, but from different components
- Reduced sensitivity of dragging
- Fixed bug when grabbing+dragging a small object resulted in corners being grabbed
- Fixed crash when renaming method due to missing codegen path
- Multi-select no longer allows editing variables that are read-only in single selection, such as Locked in a state
- Components now reload when changed on disk if they are in a subfolder
- Fixed crash loading project which had file paths with "../" which went up above the drive root
Gum Runtimes
- Improved shapes dropshadow rendering by upgrading to latest Apos.Shapes
- Improved error reporting when using Shapes without initialization
- Added support for GradientInnerRadius on shapes
- Simplified initialization of ShapeRenderer to no longer require a Game instance
- Fixed full-texture sprite scaling in raylib (thanks @profexorgeek )
- Added rounding to improve text rendering in raylib (thanks @profexorgeek )
- Unified syntax between XNA-like runtimes and raylib runtimes, making maintenance easier in the future
- Added support for V3 visuals in raylib
- Various XML documentation added including IVisible-related properties
- Removed CustomEffectManager exception throwing (thanks @mfigueirido )
- Custom tags on bbcode can now be set before the function is defined - order no longer matters
- Fixed bug where GumBatch wasn't setting the camera to the viewport
- Added TextRuntime.WrappedText to make it easier to access
- Added check and exception if a visual is added as a child of itself
- Added raylib Cursor extension methods including getting why events aren't being raised
- Fixed ComboBox.DisplayMemberPath to not reflect the contained ListBox DisplayMemberPath
- Fixed Cursor not properly respecting viewport on Desktop platforms
- TextBox (V3) no longer line-wraps placeholder text by default
- Ratio sizes now properly respect global font scales for siblings that use size multiplied by font size
- Raylib now caches font, greatly improving performance
- Controls no longer need to be added to managers to perform cursor activity - this makes it easier to use GumBatch with interactive elements
- Fixed possible crash when creating a Text instance if there is no managers
- Added WindowVisual.MakeSizedToChildren
- InteractiveGue HasCursorOver is now virtual, opening the door for custom hit tests like polygons
- Fixed crash when cleaing a ListBox after adding buttons - caused by mismatch between ListBoxItems and the InnerPanel Children count.
- Fixed crash when pressing ENTER on an Android keyboard
- Marked ListBox.ListBoxItemGumType and ListBox.ListBoxItemFormsType as obsolete
- Children spillover now works the same on horizontal and vertical auto grids
- AutoGridHorizontal and AutoGridVertical now distributes additional height to all cells
- Fixed Skia text bolding when setting a TextRuntime's IsBold to true (thanks @yuechen-li-dev )
- Added ContentLoader.XnaContentManager to FNA and KNI to match MonoGame
- TextRuntime no longer crashes if it has missing Custom methods
- Generated code now sorts and de-dupes using statements
- Upgraded to Apos.Shapes 0.6.3, fixing a build error caused by missing shader XNB
- Added new GetCharacterIndexAtPosition extension method
- Fixed layout bugs when toggling visibility in a stack, or with children that have ratio sizes
Samples and Setup
- Improvements in wine setup script for .NET 8 (thanks @kaltinril )
- Fixed dotnet environment variable (thanks @kaltinril )
- Upgraded all MonoGame samples from MonoGame 3.8.1.303 -> 3.8.4.1 (thanks @kaltinril )
- Added new Hytale inventory samples (thanks @kaltinril )
New Contributors
- @yuechen-li-dev made their first contribution in #2008
Full Changelog: Release_December_28_2025...PreRelease_January_28_2026
Release December 28, 2025
Breaking Changes
GraphicalUiElement Children is a collection of GraphicalUiElements
Previously, GraphicalUiElement.Children was a collection of IRenderableIpso instances. This required lots of casting and made it confusing to work with.
This version of Gum changes that type to a collection of GraphicalUiElements.
All "GetBy" methods have also been converted to return GraphicalUiElement instances.
For more information see https://docs.flatredball.com/gum/gum-tool/upgrading/migrating-to-2025-december#breaking-changed-graphicaluielement-children-type
Biggest Changes
Colored Category Headers
All categories are now color-coded, and each color is consistent across all object types. The colors are also in a rainbow pattern, making it easier to find categories and build muscle memory.

Significant Performance Improvements
This version of Gum makes the tree view far more responsive than before. It also improves the variable grid refresh speed. Quickly switching between selected instances is way faster than before. (thanks @vicdotexe _
First Release of Apos.Shapes Support
New NuGet packages for Apos.Shapes support in MonoGame and KNI, unifying the syntax and feature set with SkiaSharp runtimes.
Raylib Text Rendering
Raylib text rendering has been overhauled this version, unifying the text rendering system between MonoGame and raylib. These changes include:
- Full support for .fnt files on TextRuntimes
- Pixel-perfect positioning (thanks @profexorgeek )
- Line wrapping support
- Added support for assigning FontScale
Gum Tool
- Removed confusing popup about bad file watch paths
- Added more informative error when a .png cannot be loaded
- Increased max PNG size from 4096x4096 -> 8192x8192
- When a component is selected, its children still have priority in the editor tab. This makes component editing much easier
- Added ability to reorder instances in behaviors
- Errors are now reported in the Errors tab for invalid variables
- Fixed constantly swapping XSD/XSI xml sections
- Fixed bug where scaling animation lengths would introduce decimal value inaccuracy
- Fixed bug where fonts would not get re-created when assigning font values on categorized states (non-default)
- Localization CSV is now cleared when creating a new project
- Localization now ignores symbols when determining if a text should be localized.
- Animations that reference invalid states now display errors in the Error tab
- Referencing bad .achx no longer throws exceptions or shows error messages - behaves the same as a bad .png reference
- Fixed bug where right and bottom dock/anchor would assign a value of -0
- Huge redo of how copy/paste works, making pasting work more predictably
- Fixed incorrect corner radius on ColoredRectangle
- Added support for NineSlice sizing using aspect ratio and source file units
- Added +/- buttons for zooming Editor tab
- Fixed exposing already-exposed variables generating the wrong code.
- Fixed wrong UI when setting a Text's UseCustomFonts in a categorized state on the standard element itself
- Undo/Redo add/remove of instances on base component now properly adds/removes instances on derived component
Gum Runtimes
- Implemented clipboard (copy/paste) support for Kni.BlazorGL (thanks @squarebananas )
- Simplified the creation of animations at runtime, no longer requiring an ElementSave instance
- Fixed infinite stroke width value bug in Skia renderer
- Cursor WindowPushed, WindowOver, and VisualRightPushed are now nullable
- GraphicalUiElement.Children now returns a GraphicalUiElement collection
- GraphicalUiElement.GetChildByName, GetParentByNameRecursively, GetParentByName, GetParentByTypeRecursively, GetParentByType all return GraphicalUiElements instead of IRenderableIpsos
- Added GumService.IsInitialized
- Marked SkiaGum Text ScreenDensity as obsolete, in favor of using Text.GlobalTextScal
- SkiaGum now throws an exception if ScreenDensity is assigned to 0
- Added more informative error on failed bindings
- Fixed bug where the wrong items would get removed from a ListBox when removing from the Items collection.
- Added ScreenBase as a base class for all Screens
- Added support for FileManager.CustomGetStreamFromFile on non-mobile/web platforms so that custom content loading can be used
- Added new Cursor.VisualPushed, FrameworkElementPushed, FrameworkElementRightPushed, VisualOver, and FrameworkElementOver. Marked the "Window" properties as obsolete.
- Added GumService.UseGamepadDefaults
- Added GumService.DeferredActionQueue - unifying with MonoGamegum
- Added Textruntime.OverlapDirection (MonoGame/KNI/FNA only)
Samples and Setup
- Improved Linux setup scripts (thanks @KallDrexx and @kaltinril )
Full Changelog: Release_November_30_2025...Release_December_28_2025
Release November 30, 2025
⚠️ Linux Users and .NET 8
This version of Gum upgrades to .NET 8 which has caused problems with users who installed previous versions using the install script. We now recommend installing using Bottles. For more information, see the setup page: https://docs.flatredball.com/gum/gum-tool/setup
Breaking Changes
- Moved
<Gum Root>\SkiaGum.Wpf\SkiaGum.Wpf.csprojto<Gum Root>\Runtimes\SkiaGum.Wpf\SkiaGum.Wpf.csproj
For more information and upgrading instructions, see https://docs.flatredball.com/gum/gum-tool/upgrading/migrating-to-2025-november
Biggest Changes
V3 Visuals
V3 visuals are a new set of visuals that greatly simplify styling. All controls now provide color properties which can be assigned and used along with the built-in states. (thanks @kaltinril )
To make a simple button have a red background, the following code was previously required:
using Gum.Forms.DefaultVisuals;
protected override void Initialize()
{
GumUI.Initialize(this, Gum.Forms.DefaultVisualsVersion.V2);
var button = new Button();
button.AddToRoot();
var buttonVisual = (ButtonVisual)button.Visual;
buttonVisual.ButtonCategory.ResetAllStates();
buttonVisual.States.Enabled.Apply = () =>
buttonVisual.Background.Color = Color.Red;
buttonVisual.States.Disabled.Apply = () =>
buttonVisual.Background.Color = Color.Gray;
buttonVisual.States.Highlighted.Apply = () =>
buttonVisual.Background.Color = new Color(255, 55, 55);
buttonVisual.States.Pushed.Apply = () =>
buttonVisual.Background.Color = new Color(200, 0, 0);
button.UpdateState();
base.Initialize();
}Now, setting states is much simpler since it no longer requires changing states. A simple button could be made red using the following code:
using Gum.Forms.DefaultVisuals.V3;
protected override void Initialize()
{
GumUI.Initialize(this, Gum.Forms.DefaultVisualsVersion.V3);
var button = new Button();
button.AddToRoot();
var buttonVisual = (ButtonVisual)button.Visual;
buttonVisual.BackgroundColor = Color.Red;
button.UpdateState();
base.Initialize();
}All of the styling docs have been re-written to use V3. For more information see the styling page here: https://docs.flatredball.com/gum/~/changes/738/code/styling/code-only-styling
Documentation Reorganization
Along with the November release comes a reorganization of the CODE section of the Gum docs. This reorganization brings the most common-asked questions to the top level. A new About and Getting Started section provide immediate information for new users to get started with Gum more quickly. New sections have been added to cover layout concepts, events and interactivity (including diagnosing problems), and styling.
Animation Improvements
Gum's animation system has been improved top-to-bottom.
- Each category now creates its own tracks, making it easier to see how keyframes interpolate (thanks @vicdotexe )
- Tracks display their interpolation type so you can see animation curves at a glance (thanks @vicdotexe )
- Animation column now indicates the name of the object being edited
- Reduced IO noise when working with animations in the tool, improving performance and reducing file change reactions in tools like FlatRedBall.
- Improved animation playback performance so they play more smoothly
- Fixed a variety of runtime errors which were causing variables to interpolate incorrectly
- Removed unnecessary KeyframeRuntime CachedCumulativeState, simplifying the code needed to create animations in code
Gum Tool
- Gum tool has been upgraded from .NET 4.7 => .NET 8 greatly improving performance
- Errors are now displayed for variables which are leftover from type changes or renames that didn't propagate
- Duplicate entries in localization CSV no longer causes crash
- Fixed radio button alignment issue on popups (thanks @vicdotexe )
- Fixed bug preventing the renaming of new screens added to folders (thanks @kaltinril )
- Texture Coordinate tab now remembers snapping values
- Fixed a variety of issues around the border of the Gum tool when in full screen on multiple monitors (thanks @vicdotexe and @kaltinril )
- Fixed bug with object being shifted incorrectly when changing the height on a rotated object
- Fixed bug when moving object in Editor tab when it uses percentage X Units or Y Units
- Fixed crash when changing an instance's BaseType
- Fixed a variety of drag+drop bugs in the TreeView (thanks @vicdotexe )
- Fixed incorrect underline of object name when deleting an instance (thanks @vicdotexe )
- Added minimum size for panels, preventing panels from collapsing to 0 width
- Fixed menus and tooltip zooming (thanks @kaltinril )
- Localization CSVs are now properly re-loaded when they are exported from LibreOffice
- Fixed bug where TreeView would get clicked when clicking on a search result (thanks @vicdotexe )
- Error tab now tells you if any instance has an invalid base type
- Fixed crash when states cause infinite recursion
- Fixed bug where tool theme may not get initially set before popups appear (thanks @vicdotexe )
- Added support for copying states from one category (and element) to another
- Pressing DELETE now allows deleting multiple behaviors at once
- Pressing DELETE now deletes selected folder (or attempts to)
- Loading invalid file type no longer says "for texture" since files can be loaded for many types
- Improved file watch to no longer watch a single root folder, improving performance and reducing file change noise
- Added right-click option to reset states to default
- Fixed treating "-0" as a distinct value compared to "0"
- Removed some warnings when generating TextBox generated code by using override
- Nudging now only saves the file after the nudging has been complete, fixing IO spam
- Nudging now records undos, and groups the undos until the key is released
- Gum now saves all XML files with
xsdnamespace followed byxsinamespace, addressing unnecessary version history when values get swapped - New Gum Forms projects no longer include forms controls with lots of invalid variables
- Fixed localized bbcode not displaying correctly
- Exposed variables now appear in the category of their base variable rather than in an Exposed section
- Categories now always sort the same way, making it easier to find them
Gum Runtimes
- Fixed render target rendering when rendering one layer at a time (like in FlatRedBall)
- Added new Cursor.GetEventFailureReason which greatly simplifies debugging broken events
- Fixed arc width rendering, and unified stroke width on all Skia Runtimes
- Fixed possible crash when using a font scale of 0
- Fixed incorrect Sprite size when using entire texture and setting texture coordinate width or height to 0
- Fixed bug where custom ListBoxItems wouldn't have their UpdateTo method called
- Fixed raylib rotated sprite rendering, causing scrollbars from tool rendering incorrectly
- Fixed raylib broken NineSlice rendering
- Fixed raylib not caching loaded textures, improving reuse of texture speed when loading .gumx
- Updated to KNI 4.2 (thanks @squarebananas )
- Fixed MenuItem from-file rendering at the incorrect size
- Fixed bbcode rendering when text includes \r character
- Added Unit properties to FrameworkElement
- Fixed bug when wrapping children in a stack when the stack is sized by its children but has a Max Height or Max Width
- Calling Children.Clear now properly sets the childrens' Parent to null
- Changing ItemsControl FrameworkElement now re-creates all children
- Removed plugins into "Gum" folder, cleaning up top-level items
- Removed unnecessary keyboard diagnostic output
- BBCode now supported in localized text
- Fixed line grid using absolute rather than screen pixel width
Samples and Setup
- Fixed bug in inventory sample where grabbed item would show up when grabbing an empty slot
- Updated Linux/Mac setup to use the new locations of Gum (thanks @kaltinril )
Full Changelog: PreRelease_October_25_2025...Release_November_30_2025
Release October 31, 2025
Release October 31, 2025
Breaking Changes
- Animations with bool values now assign the value when the interpolation from one keyframe to another finishes rather than when it starts.
- Using
MonoGameGum.Formsnamespace now produces errors rather than warnings. The newGum.Formsnamespace should be used instead. - raylib NineSlice.Texture is now nullable
- raylib Sprite.Texture is now nullable
For more detail and information on upgrading, see the migration document: https://docs.flatredball.com/gum/gum-tool/upgrading/migrating-to-2025-october
Biggest Changes
The entire Gum tool UI has been redone to improve appearance, usability, performance. ❤️ ❤️ HUGE thanks ❤️ ❤️ to @vicdotexe for his work over the past few months getting this all together. This is the biggest release we've ever had to the Gum tool and it would have never happened without his help!
- Light/Dark mode support
- Changing primary theme color
- Modernized icons in Project, States, and Variable tabs
- New edited icon displays non-default variables rather than a green background
- Tree view reordering is now supported through drag drop. Drag+move no longer flickers and clearly shows the target of the drop
- Gum icon is now shown in the task bar
- Reduced space used in the menu strip, combining project name, menu strip, icon, and buttons at the top-right
- General Animation Tab cleanup
- Alignment tab icons updated and general layout improvements
- Output tab clear button
- Texture Coordinate tab improvements:
- View now centers on selected region rather than displaying it in the top-left (thanks @kaltinril )
- Double-click now creates a region matching the grid size if grid is enabled
- Added CTRL+arrow panning and CTRL +/- zooming support
- Added scroll bars
- Added zoom UI controls (drop down and +/- button)
- Scrolling with middle mouse button now prevents scrolling too far beyond the bounds of the texture
- Snapping-related properties are now preserved between sessions per-project
This version also includes runtime improvements for MonoGame and Raylib
-
SpriteRuntime can now draw render targets that are created from other ContainerRuntimes. This allows entire components to be scaled, rotated, positioned, and sized using the full Gum layout engine for useful effects such as fading and scaling components.

-
Raylib now supports from-file (.gumx) file loading, including projects with Gum Forms components
Gum Tool
- Recent files now shows associated .csproj files to differentiate between same-named projects
- Pasting instances now immediately sorts variables in the .xml file, reducing churn in the files
- Removed "Make Default" right click menu item in Project Properties tab
- Linux setup script now checks for Wine 10 or newer
- Fixed possible crash when exposing variables
- Text using WidthUnits of RelativeToChildren and a MaxWidth now properly wraps text
- File UI now disables its View in Explorer button if no value is set
- Added tooltip to View in Explorer button
- Fixed bug with nested BBCode color tags
- Fixed possible crash in animation tab on new projects (thanks @kaltinril )
- Undo/Redo menu items are now disabled if there is no history ahead/behind current position (thanks @kaltinril )
- Clicking on ARGB slider immediately goes to the value instead of adding 1 (thanks @kaltinril )
- Removed noisy errors about fonts that weren't real errors
- Localization CSV no longer causes exceptions if duplicate entries exist in the CSV - the first entry with a given name is used
- Fixed error preventing the renaming of newly-created Screens in folders (thanks @kaltinril )
- Reduced unnecessary saving of animation (.ganx file) when selecting new animations
- Fixed drag+move objects not staying with the cursor when using percentage-based XUnits or YUnits
- Fixed crash when changing instance type in a behavior
- Fixed arc angle UI showing only text box instead of angle selector
- Gradient values for Skia objects now shows ARGB values as sliders
Gum Runtimes
- Fixed broken MinAlpha blend mode
- Fixed situation where cumulative states would not get set properly, resulting in animations not playing as they should
- Added GumService (GumUI) UseKeyboardDefaults method (thanks @kaltinril )
- Added batch rendering support, enabling the addition of virtually any MonoGame rendering system inside Gum
- Moved diagnostic errors from
DEBUGtoFULL_DIAGNOSTICSas a step towards releasing NuGet packages in release mode (thanks @kaltinril ) - Added new RenderableBase class which can be used for custom rendering
- Added support for Apos.Shapes through a new library. There is no NuGet for this yet, must be used in source.
- Tabbing on buttons within a stack no longer loses focus if it's the only button
- Fixed bug where Slider state wouldn't get set correctly if it has focus and a previous control received keyboard input
- Fixed SVG loading in fully-generated Skia projects, including new documentation
- Skia ColoredCircle runtime now matches default in tool
- Fixed re-initialization of entire gum system when creating multiple SKCanvasViews in Maui
- Fixed bug in Text wrapping when scaling by float values
- Made progress towards moving Gum from .NET 4.7 -> .NET 8 by multi-targeting
- Fixed layer-by-layer rendering with render targets, fixing libraries like FlatRedBall render targets
- Fixed bug when changing the height on rotated objects not properly adjusting its position
- Added Cursor.GetEventFailureReason extension method
Samples and Setup
- Fixed Gum samples to no longer use MonoGameGum.Forms.
Full Changelog: Hotfix_October_3_2025...PreRelease_October_31_2025
PreRelease October 25, 2025
Release October 25, 2025
Breaking Changes
- Animations with bool values now assign the value when the interpolation from one keyframe to another finishes rather than when it starts.
- Using
MonoGameGum.Formsnamespace now produces errors rather than warnings. The newGum.Formsnamespace should be used instead. - raylib NineSlice.Texture is now nullable
- raylib Sprite.Texture is now nullable
Biggest Changes
The entire Gum tool UI has been redone to improve appearance, usability, performance. ❤️ ❤️ HUGE thanks ❤️ ❤️ to @vicdotexe for his work over the past few months getting this all together. This is the biggest release we've ever had to the Gum tool and it would have never happened without his help!
- Light/Dark mode support
- Changing primary theme color
- Modernized icons in Project, States, and Variable tabs
- New edited icon displays non-default variables rather than a green background
- Tree view reordering is now supported through drag drop. Drag+move no longer flickers and clearly shows the target of the drop
- Gum icon is now shown in the task bar
- Reduced space used in the menu strip, combining project name, menu strip, icon, and buttons at the top-right
- General Animation Tab cleanup
- Alignment tab icons updated and general layout improvements
- Output tab clear button
- Texture Coordinate tab improvements:
- View now centers on selected region rather than displaying it in the top-left (thanks @kaltinril )
- Double-click now creates a region matching the grid size if grid is enabled
- Added CTRL+arrow panning and CTRL +/- zooming support
- Added scroll bars
- Added zoom UI controls (drop down and +/- button)
- Scrolling with middle mouse button now prevents scrolling too far beyond the bounds of the texture
This version also includes runtime improvements for MonoGame and Raylib
-
SpriteRuntime can now draw render targets that are created from other ContainerRuntimes. This allows entire components to be scaled, rotated, positioned, and sized using the full Gum layout engine for useful effects such as fading and scaling components.

-
Raylib now supports from-file (.gumx) file loading, including projects with Gum Forms components
Gum Tool
- Recent files now shows associated .csproj files to differentiate between same-named projects
- Pasting instances now immediately sorts variables in the .xml file, reducing churn in the files
- Removed "Make Default" right click menu item in Project Properties tab
- Linux setup script now checks for Wine 10 or newer
- Fixed possible crash when exposing variables
- Text using WidthUnits of RelativeToChildren and a MaxWidth now properly wraps text
- File UI now disables its View in Explorer button if no value is set
- Added tooltip to View in Explorer button
- Fixed bug with nested BBCode color tags
- Fixed possible crash in animation tab on new projects (thanks @kaltinril )
- Undo/Redo menu items are now disabled if there is no history ahead/behind current position (thanks @kaltinril )
- Clicking on ARGB slider immediately goes to the value instead of adding 1 (thanks @kaltinril )
- Removed noisy errors about fonts that weren't real errors
Gum Runtimes
- Fixed broken MinAlpha blend mode
- Fixed situation where cumulative states would not get set properly, resulting in animations not playing as they should
- Added GumService (GumUI) UseKeyboardDefaults method (thanks @kaltinril )
- Added batch rendering support, enabling the addition of virtually any MonoGame rendering system inside Gum
- Moved diagnostic errors from
DEBUGtoFULL_DIAGNOSTICSas a step towards releasing NuGet packages in release mode (thanks @kaltinril ) - Added new RenderableBase class which can be used for custom rendering
- Added support for Apos.Shapes through a new library. There is no NuGet for this yet, must be used in source.
- Tabbing on buttons within a stack no longer loses focus if it's the only button
- Fixed bug where Slider state wouldn't get set correctly if it has focus and a previous control received keyboard input
- Fixed SVG loading in fully-generated Skia projects, including new documentation
- Skia ColoredCircle runtime now matches default in tool
- Fixed re-initialization of entire gum system when creating multiple SKCanvasViews in Maui
- Fixed bug in Text wrapping when scaling by float values
- Made progress towards moving Gum from .NET 4.7 -> .NET 8 by multi-targeting
Samples and Setup
- Fixed Gum samples to no longer use MonoGameGum.Forms.
Full Changelog: Hotfix_October_3_2025...Test_October_25_2025-2
Hotfix October 3, 2025
This hotfix version fixes a bug where Gum could crash when trying to find a common root folder for file watches.
What's Changed
- Upped version numbers by @vchelaru in #1482
- Fixed movement of parent/child resulting in child moving extra if par… by @vchelaru in #1483
- Cleanup to make the same runtime classes with .shapes by @vchelaru in #1484
- Added TextRuntime.TextRenderingPositionMode by @vchelaru in #1486
- Add the objNetFramework to the cleanup script by @kaltinril in #1487
- Fixed free floating text snapping. by @vchelaru in #1488
- Update sonarscanner.yml by @kaltinril in #1489
- 1413 Gum tool window should have a minimum width and height by @vicdotexe in #1493
- Added skia arc dropshadow support by @vchelaru in #1497
- 1492 enhance font character file usage by @kaltinril in #1494
- 1495 - fix undo/redo by @vicdotexe in #1496
- First pass by @vchelaru in #1499
- 1501 gum tool crashes on startup null ref in filewatch by @vchelaru in #1503
- 647 add support for custom bbcode tags with custom functions by @vchelaru in #1502
- App falls over when popping dialogs before load by @vicdotexe in #1505
- 1501 FileWatchManager null check for root dir climb resulting in null by @whuop in #1504
- Update wine and winetricks installation checks by @AristurtleDev in #1506
- fix app scaling by @vicdotexe in #1508
- Apos shapes 0 4 4 alpha by @vchelaru in #1512
- Added support for premult blend modes by @vchelaru in #1514
- Replace timeline control by @vicdotexe in #1513
New Contributors
Full Changelog: Release_September_27_2025...Hotfix_October_3_2025
PreRelease September 14, 2025
This pre-release is mainly focused on bug fixes.
What's Changed
- Update ControlsCompatability.cs by @vchelaru in #1339
- Fixed coordinate selection by @vchelaru in #1341
- Added codegen tests for expoed variables by @vchelaru in #1343
- Added NineSliceRuntime.BorderScale by @vchelaru in #1350
- 1348 roundedrectangle is not displaying button pickers for different unit types by @vchelaru in #1351
- Fixed newlines adding extra width to text by @vchelaru in #1354
- 1356 bug generated label seems to be broken by @vchelaru in #1357
- Fixed codegen by @vchelaru in #1360
- Added message about being experimental by @vchelaru in #1362
- Upped game sample version to .NET 8 by @vchelaru in #1365
- 1358 handle exceptions when running bmfont by @vchelaru in #1364
- Fix gue.Name not matching the containing obj Name by @Thraka in #1366
- Pushed .achx offsets by @vchelaru in #1367
- Oops typo that didn't get pushed last time by @vchelaru in #1369
- Fixed variable types not being assigned at times by @vchelaru in #1370
- fixed type assignment by @vchelaru in #1372
- Fix type assignment by @vchelaru in #1374
- Esc crashing app from view references dialog by @vicdotexe in #1382
- Replace MessageBox.Show by @vicdotexe in #1379
- Improved skia rendering by @vchelaru in #1386
- Fix variable propagation by @vchelaru in #1387
- Fixed duplicate name checking on element rename by @vchelaru in #1390
- Adds HorizontalAlignment support to TextBox Caret & Selection by @squarebananas in #1388
- Added more diagnostics on crash by @vchelaru in #1391
- Window no longer changes the cursor when hovering over the edges if C… by @vchelaru in #1398
- Fixed TextBox losing focus when dragging off by @vchelaru in #1394
- Fixed rotated text rendering. by @vchelaru in #1400
- Selection now looks different when Text has no focus. by @vchelaru in #1402
- Added new clone methods by @vchelaru in #1396
- Adds UISpriteSheet link to KniGum project by @squarebananas in #1405
- Fixes SpriteRenderer text drawing at 90° angles by @squarebananas in #1403
- 1383 - Replace TextInputWindow with DialogService by @vicdotexe in #1406
- Migrate AddFormsWindow by @vicdotexe in #1407
- Fixed GumFormsSampleCommon by @vchelaru in #1404
- Fixed multi-line textbox crash by @vchelaru in #1409
- Fixed possible bad variable causing crash by @vchelaru in #1412
- Migrate LoadRecentWindow by @vicdotexe in #1410
- Migrate DisplayReferences to DialogService by @vicdotexe in #1414
- Fixed skia codegen including missing method by @vchelaru in #1416
- Fixed name verifier not checking for duplicate folder names by @vchelaru in #1417
- 1381 double click events for all elements by @vchelaru in #1418
- Fixed ruler text line wrapping incorrectly. by @vchelaru in #1419
- Not sure if this is missing ... by @vchelaru in #1421
- Upped assembly version by @vchelaru in #1425
- Marked FrameworkElement.Show as obsolete. by @vchelaru in #1426
- Modals no longer steal input if they are invisible by @vchelaru in #1427
- Remove unreferenced window by @vicdotexe in #1423
- Next click action is no longer immediately called on the same frame w… by @vchelaru in #1437
- Migrate ImportDialog by @vicdotexe in #1422
- Latest code NuGet packages by @vchelaru in #1438
- First test with graphics device tests by @vchelaru in #1436
- 1434 window v2 visual should have a min height and width by @vchelaru in #1439
- 1433 copypaste of multiline text should paste correctly and should place the caret in the right position by @vchelaru in #1441
- 1432 document how to bring windows to the foreground on clicks by @vchelaru in #1442
- CTRL+A now properly selects text on the desktop platform by @vchelaru in #1443
Full Changelog: Release_August_28_2025...PreRelease_September_14_2025
Release August 31, 2025
Update August 31, 2025
This is a hotfix over the August 28 2025 version which fixes bmfont.exe being blocked.
Breaking Changes
MonoGame Gum has been upgraded from .NET 6 to .NET 8.
Most projects will not be affected by this, but if your game targets .NET 6 and you want to upgrade to the latest NuGet packages, you need to upgrade your project to .NET 8 or newer.
Removal of MonoGameGum.Forms Namespace
The latest NuGet packages remove the MonoGameGum.Forms namespace. To make the transition easier, many of the controls and common types have been left with an obsolete tag. Projects are encouraged to replace any usage of MonoGameGum.Forms with Gum.Forms since the first namespace will be removed in the coming months. Also, some types, such as V2 visuals, have been fully migrated so your project may be required to migrate over.
TextRuntime Now Uses XNA BlendState Rather Than Gum BlendState
This makes TextRuntime match other runtime syntax
SliderVisual.NineSliceInstance is now called TrackBackground
Renamed this property so its usage is clearer.
For more information on the breaking changes and more detailed instructions on migration, see the migrating page: https://docs.flatredball.com/gum/gum-tool/upgrading/migrating-to-2025-august
Biggest Changes
This version of Gum greatly improves support for different languages, especially languages with large character sets like Chinese. The following features have been added:
- Added support for mid-word line wrapping if a word is longer than the width of a Text instance
- Added support for new character file which can be used to automatically set character sets
- Fixed bitmap font configuration file (bmfc) is now properly generated for character sets with a large number of groups
- Added support for referencing fonts with no-ascii file names (such as fonts with names that have Chinese characters)
- Improved Gum's ability to generate fonts in a single .png when using font outlines
Gum Tool
- Drag+drop multiple items to new parent now moves all items instead of only the first (thanks @kaltinril )
- Continued refactor to eliminate singletons, move items to service locator pattern, and break up large service objects into individual types (thanks @vicdotexe )
- Added using statement in codegen for LINQ to fix compile errors
- Fixed codegen being broken for new Label which inherits from Text rather than containing a Text
- Default Window now has properly sized Window InnerPanel
- Fixed a variety of codegen bugs (thanks @Pituivan )
- Added
global::prefix to avoid namespace conflicts - Added support for generating items with C# keyword names like
class - Fixed codegen bugs on items that begin with numbers
- Treat spaces as underscores
- Missing instance base types no longer generate code that won't compile
- Added
- Improved fixing instance variable types on Gum project load
- Added support for specifying a character file to control which characters are generated (thanks @Yuan-Zzzz )
- Improved code generation speed by using object cache
- Expose/Unexpose is now properly listed in undo history (thanks @Pituivan )
- Text now line wraps at word when width is small rather than extending beyond the boundaries
- Fixed texture looping with negative texture coordinates (thanks @Yuan-Zzzz )
- Variables tab text boxes now lose focus when the entire app loses focus
- Instance base type is now displayed in variables even if the instance type is not found, allowing users to change it
- Changing the source file to a .achx file no longer sets AnimationFrame variables
- Last project is no longer reloaded over and over if it doesn't exist on disk every time Gum is opened
- Fixed IsRenderTarget on Components (thanks @Yuan-Zzzz )
- Fixed Label Text exposed variable codegen error
- Fixed encoding problem when font file name contains non-ascii characters (thanks @Yuan-Zzzz )
- Improved single-page rendering of PNGs when text has outlines
- Fixed crash moving state to new category
- Fixed bug where deleting component while instance is selected through menu strip now properly deselects the component
- Undoing a paste of multiple items now only adds a single undo
- Added a scroll viewer to dialogs to handle large content and sets a maximum height based on the main window's height, preventing dialogs from exceeding the screen boundaries. (thanks @vicdotexe )
Gum Runtimes
- Removal of MonoGameGum.Forms namespace (see breaking changes above)
- TextBoxVisual (V2) now properly places placeholder text (thanks @kaltinril )
- Button Visual (V2) now uses the styling White color (thanks @kaltinril )
- Label Visual (V2) now uses the styling White color (thanks @kaltinril )
- Sliders now properly update their state when losing a push on touch screens such as on iOS.
- Removing an item from any root now unsets its focus so that removed screens no longer receive input
- Fixed crash when trying to create a Label by passing a TextRuntime
- Added InteractiveGue.RightClick event
- ListBox can now be disabled and will update its state visually
- MenuItem can now show a subitem with a ScrollViewerTemplate
- Added support for re-assigning the ListBox on a ComboBox Visual (V2)
- MenuVisual V2 now has a min height of 5 pixels
- Fixed bug where combo boxes might not properly close if the game window is zoomed
- Fixed SpriteRuntime.SourceRectangle not working correctly
- Added support to set Texture on NineSlice styling (thanks @kaltinril )
- ItemsControl Items is now instantiated before Visual is assigned, allowing constructors to access this property immediately.
- Experimental - added pygame support
- Removed implicit usings to avoid common syntax errors with FRB
- Default Gum blend states now properly set blend factor and write channels so that they can be cloned and reused.
- Fixed ItemsControl not respecting VisualTemplate and FrameworkTemplate
- Added ItemsControlVisual to make casting more predictable
- Added new code generation test projects to reduce chances of future regressions (thanks @Pituivan )
- Added ItemsControl Orientation property
Samples and Setup
- Linux steps have been improved to include better diagnostics, detecting of existing packages and installs, and removed XNA setup (thanks @bozau )
New Contributors
Full Changelog: Release_July_28_2025...Release_August_28_2025
PreRelease_August_17_2025
This release is a pre-release focused primarily on improving code generation.
What's Changed
- Release 2025.7.28 by @vchelaru in #1139
- Improvements to Linux manual and automated Gum Tool Installation by @bozau in #1144
- Fix the placement of the Text Placeholder text displayed when no text… by @kaltinril in #1148
- 1143/fix multi drag drop by @kaltinril in #1150
- 1138 mark monogamegumforms namespace as obsolete replace with gumforms by @vchelaru in #1145
- Decouples FileCommands and ProjectCommands from GumCommands by @vicdotexe in #1151
- Fixed FRB compile errors by @vchelaru in #1156
- Remove HotkeyManager.Self by @vicdotexe in #1155
- Added System.Linq to codegen by @vchelaru in #1157
- Fixed code generation for label text by @vchelaru in #1159
- Remove SetVariableLogic.Self by @vicdotexe in #1158
- More namespace fixes by @vchelaru in #1160
- [Breaking] Moved all V2 visuals to Gum.Forms namespace by @vchelaru in #1163
- Found 2 white colors that needed to come from styling by @kaltinril in #1165
- Fix window inner panel by @vchelaru in #1166
- Renamed SliderVisual.NineSlice to ThumbBackground. by @vchelaru in #1170
- Update state focus push release by @vchelaru in #1171
- Removing item from root, modal, or popup now removes its children fro… by @vchelaru in #1173
- Labels can now use a TextRuntime as their main visual by @vchelaru in #1177
- Added InteractiveGue.RightClick event by @vchelaru in #1180
- ListBoxes now respect IsEnabled = false by @vchelaru in #1188
- Fixed screen crash on sample due to input receiver changing by @vchelaru in #1191
- MenuItem can now show sub item with ScrollViewer Visual (V2) by @vchelaru in #1194
- Added ability to replace ListBox on visual by @vchelaru in #1198
- MenuVisual now has a min height of 5 by @vchelaru in #1199
- Move host to main entry by @vicdotexe in #1186
- Fixed cursor not closing dropdown when zoomed by @vchelaru in #1200
- Reduce dependencies on MainWindow by @vicdotexe in #1201
- Fixed Spriteruntime SourceRectangle not working properly by @vchelaru in #1203
- 1205/replace
Gum.DataTypes.DimensionUnitTypewith justDimensionUnitTypeby @Pituivan in #1206 - Re-added qualification on codegen by @vchelaru in #1207
- 1168/add texture to nineslice styling by @kaltinril in #1169
- Improved dealing with components that have bad types by @vchelaru in #1211
- font generation is now outputted by @vchelaru in #1212
- Fixed runtime error in FRB by @vchelaru in #1214
- Add missing namespace that was causing generated code compiler errors regardless of
usingdirectives due toglobal::prefix by @Pituivan in #1215 - Unified variable display code by @vchelaru in #1217
- Items is now assigned immediately allowing for items to be assigned i… by @vchelaru in #1218
- 1223 is codegen supposed to have this many errors by @vchelaru in #1225
- Fixed compile error by @vchelaru in #1226
- Create ITabManager interface and make MainPanelControl implement it by @vicdotexe in #1222
- Create python binding by @kaltinril in #1216
- 1221 treat spaces as underscores in name verification by @Pituivan in #1232
- Update to use ITabManager instead of GuiCommands for tab operations by @vicdotexe in #1230
- Small docs clarification by @vchelaru in #1234
- 1174 add option to set character set file by @Yuan-Zzzz in #1175
- 1204/tag deleted component instances as missing (CodeGen) by @Pituivan in #1220
- Added ObjectFinder cache to make generation faster by @vchelaru in #1237
- Create MVVM infrastructure for tab management by @vicdotexe in #1236
- Remove MainPanel references in GuiCommands related to tools visibility by @vicdotexe in #1241
- 1242: fix ui scaling by @vicdotexe in #1245
- 1247 type conversion is broken in codegen by @vchelaru in #1250
- 1235 add font character file change detection feature by @Yuan-Zzzz in #1239
- Forgot early exit and prefix by @Pituivan in #1238
- 1221 treat spaces as underscores in category name verification by @Pituivan in #1246
- fix: 1251 - Error tab header UI scaling by @vicdotexe in #1253
- 1221 replace spaces with underscores in CodeGen by @Pituivan in #1248
- 509 list expose/unexpose explicity in undo history by @Pituivan in #1258
- Refactors plugin tab management by @vicdotexe in #1261
- dedicated dispatcher service by @vicdotexe in #1264
- 1259 handle C# keywords in names (CodeGen — Forms) by @Pituivan in #1260
- Dedicated service for UI settings by @vicdotexe in #1265
- AutoSelect when viewing Properties tab by @vicdotexe in #1272
- Remove MainWindow's dependency on GuiCommands by @vicdotexe in #1269
- 1262 possible name conflicts in states and categories by @Pituivan in #1263
- 1254 support for breaking words apart if they extend beyond the bounds of the text instance by @vchelaru in #1274
- Fix texture looping with negative Texture Left by @Yuan-Zzzz in #1275
- move treeview images by @vicdotexe in #1273
- 1227 - PluginTab.GotFocus by @vicdotexe in #1278
- TextBox now suppresses focus if it has keyboard focus by @vchelaru in #1281
- Instance base type is now displayed in the Variables tab even if the … by @vchelaru in #1283
- Removed implicit usings to improve FRB compatibility by @vchelaru in #1290
- Setting source file to .achx no longer assigns AnimationFrames property. by @vchelaru in #1292
- Last project is removed if it doesn't exist on load by @vchelaru in #1293
- Fix the IsRenderTarget is broken when preview in-component, but its working in Screen by @Yuan-Zzzz in #1276
- Added nullable enable to library for FRB by @vchelaru in #1295
New Contributors
Full Changelog: Release_July_28_2025...PreRelease_August_17_2025





