Gum Release — September 2, 2026
Breaking Changes
- V1 and V2 default Forms visuals removed, replaced by V3. (#4450)
GumServicemoved from file-linked source intoGum.SkiaSharp. (#4454, #4459)
See the upgrade guide for who's affected and how to fix it: https://docs.flatredball.com/gum/gum-tool/upgrading/migrating-to-2026-september
Biggest Changes
Six Built-In Forms Themes, Selectable Right From New Project
Dark Pro, Forest Glade, and others join Gum's built-in Forms themes. New Project now lets you pick a theme up front, same as Add Forms. (#4402, #4413, #4420, #4412, #4568, #4534, #4407)
Hardware-Accelerated SVG Rendering for MonoGame and KNI
SVG elements now render on MonoGame and KNI via a new Apos.Shapes-backed SvgRuntime. Previously they drew nothing at runtime. (#4507, #4526)
Better, Faster Text Rendering
Fonts can now grow their glyph atlas automatically instead of showing missing-glyph placeholders, opt-in on MonoGame/KNI/FNA and RaylibGum. Raylib also gains font oversampling parity with MonoGame/KNI, and SpriteBatch can group draws by texture to cut draw calls. (#4547, #4557, #4561, #4366, #4543)
ColorPicker Joins the Add Forms Component Set
A new ColorPicker control is available in Add Forms, in all six built-in themes. (#4538)
Gum Tool
- New Project now lets you pick a Forms theme up front, sharing the same picker as Add Forms. (#4534)
- New projects start with a screen and Forms controls already added by default. (#4407)
- Canceling the New Project dialog no longer forces the save-location prompt afterward. (#4407)
- Renaming an element over an existing code file now sends it to the Recycle Bin instead of deleting it. (#4427)
- Deleting an element now sends its XML file to the Recycle Bin instead of deleting it. (#4427)
- An element's
.codsjcode-settings file now moves with it on rename. (#4427) - Deleting an element only prompts about custom code files that have actually been edited. (#4428)
- Gum now flags code files orphaned by a deleted, renamed, or moved element in the Errors tab. (#4429)
- Added
gumcli codegen --pruneto remove orphaned generated code files. (#4429) - The orphaned-code-file scan no longer walks
bin/objbuild output. (#4434) - Fixed custom code files keeping a stale namespace after moving an element between folders. (#4423)
- Fixed a tree view crash refreshing a reparented node. (#4423)
- Fixed the delete dialog's checkbox label getting clipped when its text was long. (#4432)
- ColorPicker joins the Add Forms component set. See Biggest Changes. (#4538)
- Added an Expander control to the Add Forms component set. (#4554)
- The Errors tab now flags a missing Sprite, SVG, Lottie, animation-chain, or font
SourceFilewith a new GUM0006 warning. (#4494) - Fixed
Maintain File Aspect Ratio Heightnot working for SVG instances. (#4513) - Added Snap to Grid for the main editor canvas. (#4381)
- Grid-snap resizing now snaps the actual dragged edge in world space instead of rounding Width/Height locally. (#4384)
- Resizing past an object's opposite edge now flips the anchored edge instead of allowing negative Width/Height. (#4391)
- Fixed resize position drifting on rotated objects during a multi-tick drag. (#4391)
- Resize From Center no longer sticks at zero size when shrinking past the center point. (#4392)
- Fixed a crash resizing objects using Ratio, ScreenPixel, or RelativeToMaxParentOrChildren units. (#4396)
- Fixed drag-resize snapping to extreme sizes for Ratio-based or Maintain File Aspect Ratio sizing. (#4396)
- Fixed resizing with the Absolute Multiplied By Font Scale unit scaling too fast. (#4396)
- Copy/paste now works on a whole variable category at once from the Variables tab (thanks @kaltinril). (#4456)
- Fixed an unthemed white context menu popping up in Variables-tab text fields. (#4458)
- State/Category tree gained "+" buttons for adding categories and states directly. (#4379)
- Add State and Add Category menu items now show matching icons. (#4383)
- The Alignment tab now shows the same "Editing state X" indicator bar as the Variables tab. (#4374)
- Fixed a spurious rectangle-select marquee after dragging a panel scrollbar or divider. (#4551)
- Fixed a crash deleting instances left broken after their component definition was deleted. (#4369)
- Fixed Container instances rendering with no outline when Show Outlines is enabled. (#4388)
- Fixed a crash adding a child object of a standard type not seeded into the project. (#4500)
- Fixed a crash opening a project with an unnamed element or instance reference. (#4520)
- Fixed Apos.Shapes shapes showing placeholder colors in
gumcli screenshotoutput. (#4409) - Fixed error-indicator refresh scaling quadratically, slowing the tool on larger projects. (#4496)
- The Gum main window now enforces a minimum size and repairs broken saved window geometry. (#4363)
- Overflowing numeric input now clamps to the field's min/max instead of becoming
Infinity. (#4487) - Double-clicking a numeric value now selects the whole value. (#4483)
- Added
gumcli import-screenfor headless HTML-import testing. (#4532) gumcli pack/checknow detects a.ttfreferenced viaFont, not justCustomFontFile. (#4511)- Plugin assembly load failures are now reported in the Output tab (thanks @profexorgeek). (#4475)
- Fixed the animation-chain dropdown showing stale names after a file changed on disk. (#4486)
- Fixed property-change events always reporting the old value as
null. (#4389) - Fixed undersized focus rings and a missing Window border in the Bubblegum theme. (#4426)
- Fixed themed checkbox labels throughout the tool failing to wrap. (#4436)
- Fixed the Slider thumb overhanging its track at minimum/maximum values. (#4498)
- HtmlToGum: web font selection now prefers fonts that cover Latin characters (thanks @devinguthrie). (#4357)
- HtmlToGum: form buttons and inputs now convert with their real label/value text. (#4357)
- HtmlToGum:
background-size:autoimages now position and scale correctly. (#4357) - HtmlToGum: multi-line
<pre>/<code>blocks now preserve line breaks and whitespace. (#4357) - HtmlToGum: nested cookie-consent banners are now excluded from conversion. (#4357)
- HtmlToGum: large downscaled images now match the browser's scaled appearance. (#4357)
- HtmlToGum: improved accuracy for SVGs, CSS masks, and dropdown menus. (#4357)
- Gum now supports
.achj, FlatRedBall2 Animation Editor's JSON animation-chain format. (#4480) - You can now drag an
.achx/.achjfile onto the wireframe editor to create a new Sprite. (#4480) - Fixed dragging a file onto the editor producing a lowercased instance name. (#4480)
- Fixed a crash dropping a file onto certain tree view spots. (#4480)
- Fixed several places where Gum silently lowercased file paths on case-sensitive filesystems. (#4482)
- Added the Dark Pro theme to Add Forms. See Biggest Changes. (#4402)
- Added the ForestGlade theme to Add Forms. See Biggest Changes. (#4413)
- Added the Neon theme to Add Forms. See Biggest Changes. (#4420)
- Added the Retro95 theme to Add Forms. See Biggest Changes. (#4412)
- Added the Meadow theme to Add Forms. See Biggest Changes. (#4568)
- Added an "un-theme" option to the
MonoGameGumThemesShowcasesample. (#4562) - Fixed missing checkmark/arrow icon glyphs in the DarkPro, Bubblegum, Hazard, Neon, and Retro95 themes. (#4437)
- Fixed a missing icon sprite sheet reference in the Bubblegum, DarkPro, and Hazard themes. (#4555)
- Fixed invisible glyph icons in the Bubblegum, DarkPro, and ForestGlade themes. (#4556)
- Fixed new projects sometimes skipping the files for their standard shapes on first save. (#4412)
Gum Runtimes
GumServicefor WPF/MAUI/standalone Skia is now compiled intoGum.SkiaSharpinstead of file-linked. See Breaking Changes. (#4454)- Silk.NET's
GumServiceis rebuilt on the sharedGumServiceSkiaBase. See Breaking Changes. (#4459) ExportSnapshotandLoadAnimationsare now available on WPF/MAUI/standalone/Silk.NET'sGumService. (#4462)- Fixed a TextBox placeholder staying visible after you started typing, on Skia-family backends. (#4459)
- Fixed the same TextBox placeholder bug on Sokol. (#4463)
- Fixed a GPU memory leak on MonoGame/Raylib from repeated oversampled-font regeneration during zoom. (#4378)
- Fixed Absolute-width text boxes re-wrapping unexpectedly when toggling font oversampling. (#4372)
- Fixed Raylib BBCode text and word-wrap rendering at the wrong size under font oversampling. (#4376)
- Fixed Raylib Forms control text shrinking once font oversampling engages. (#4376)
- Fixed automatic font oversampling never actually engaging on MonoGame or RaylibGum. (#4366)
- Fixed turning font oversampling off not reverting text to normal. (#4366)
- Fixed centered Button/RadioButton text shifting once font oversampling engaged. (#4366)
- Fixed a SkiaGum zoom bug on Silk.NET where
Camera.Zoomcompounded every frame. (#4366) - Fixed RaylibGum's automatic font growth not engaging for
UseCustomFontwith a.ttf. (#4559) - Fixed inconsistent glyph positioning under fractional scale, like window zoom or DPI. (#4561)
- MonoGame/KNI/FNA's draw-call counter now reports real draw calls, matching raylib. (#4543)
- Apos.Shapes-backed SVG rendering for MonoGame/KNI. See Biggest Changes. (#4507)
- Animation chains can now author a per-frame
Alphaon MonoGame/KNI/FNA, Raylib, and Skia. (#4489) - Animation chains can now author a per-frame
Multiplycolor tint. (#4491) - Fonts packed into a
.gumpkgnow actually load at runtime, instead of silently falling back. (#4516) - KernSmith's
RegisterFontnow resolves paths through Gum's file-loading system. (#4525) - RaylibGum gains a path-based
RegisterFontoverload. (#4525) - Fixed a KernSmith-registered font resolving to the wrong file in a bundled build. (#4531)
- A failing
IInMemoryFontCreatornow raises aPropertyAssignmentErroron Raylib. (#4465) - The same fix applies on MonoGame/KNI/FNA. (#4467)
- Fixed an unhandled dynamic-font-creation error breaking rendering on Blazor/WebGL. (#4533)
- Fixed slow theme switching from repeated failed font-signature resolution. (#4565)
- Fixed font rendering failures on browser-wasm by using the StbTrueType rasterizer. (#4565)
- Updated Apos.Shapes to fix a shader-compilation crash on some OpenGL setups. (#4411)
- Fixed a crash rendering rounded-corner shapes on macOS/Linux OpenGL drivers. (#4474)
- Fixed
GumService.Uninitialize()throwing when shape visuals are re-initialized. (#4418) - Fixed shapes silently failing to resolve after an Uninitialize/Initialize cycle. (#4419)
- Fixed ScrollViewer eating the first tap when a new touch begins. (#4397)
- Fixed TextBox/PasswordBox scrolling horizontally when wrapped text spans multiple lines. (#4398)
- Fixed a custom mouse cursor resetting to the default arrow over any Forms control. (#4444)
- Fixed
DialogBox.DismissfiringFinishedShowingbefore cleanup finished (thanks @ultimateownsz). (#4440) - Fixed raylib and SkiaGum ignoring a Layer's screen-space camera settings. (#4375)
- Fixed a SkiaGum shape's stroke rendering at the wrong size on a layer. (#4375)
- Fixed SkiaGum shape strokes not thickening as the camera zooms in. (#4375)
- raylib and SkiaGum renderers can now create additional layers, matching MonoGame. (#4375)
- Fixed a double
Content/path prefix breaking loading screens on Android/iOS. (#4550) - ColorPicker joins the Add Forms component set. See Biggest Changes. (#4538)
- Fixed a resized ColorPicker's saturation/hue squares not scaling with the control. (#4538)
What's Changed
- Port Meadow theme to Add Forms tool content (#4566) (#4568)
- Cache unresolvable font signatures to avoid repeated slow fallback retries (#4565)
- Add un-theme option to MonoGameGumThemesShowcase (#4562)
- Fix inconsistent glyph positioning under fractional scale (font oversampling / window zoom) (#4561)
- RaylibGum: route UseCustomFont ttf CustomFontFile through InMemoryFontCreator (#4559)
- RaylibGum: automatic font glyph growth (#4546) (#4557)
- Fix DejaVuSansMono glyph icons silently invisible in Bubblegum/DarkPro/ForestGlade (#4556)
- Bundle UISpriteSheet.png into Bubblegum/DarkPro/Hazard themes (#4555)
- Add TextRuntime automatic font glyph growth (#4547)
- Add Expander to the Add Forms component set (#4554)
- Fix #4545: include nested component instances in AllIpsos (#4551)
- Fix double Content/ prefix loading screens on Android/iOS (#4548) (#4550)
- Add incremental KernSmith font atlas growth (0.21.0) (#4537)
- Document texture-level batch sorting (BatchSortKey, DrawCallCount) (#4549)
- Add ColorPicker to the Gum editor's Add Forms component set (#4538)
- Group SpriteBatch draws by texture to cut per-element draw calls (#4543)
- Let New Project pick a Forms theme; share the picker UI with Add Forms (#4534)
- Fix uncaught font-creator exception leaving SpriteBatch open on BlazorGL/WASM (#4533)
- Fix #4527: RegisterFont resolves paths from FileManager.RelativeDirectory (#4531)
- Add gumcli import-screen for headless HTML-import merge testing (#4532)
- Document .ttf file indirection and bold/italic synthesis for KernSmith fonts (#4528)
- Register a .ttf through FileManager so bundled fonts resolve (#4523) (#4525)
- Honor a non-uniform Width on SvgRuntime for the Apos.Shapes backend (#4509) (#4526)
- Log per-phase timings on HTML import (#4522)
- Don't crash loading a project with unnamed element references (#4520)
- Fix uncompilable setup snippet and document ListBoxItem states (#4519)
- Make a .ttf inside a .gumpkg readable at runtime (#4515) (#4516)
- Document Font .ttf packaging in gumcli pack docs (#4514)
- Fix SVG aspect ratio layout updates (#4513)
- Fix runtime-agnostic font packaging (#4511)
- Add Apos.Shapes-backed SvgRuntime for MonoGame/KNI (#4507)
- Add XnaFiddle demo to font oversampling docs, fix rasterizer backend docs (#4508)
- Explain what determines tabbing order in docs (#4503)
- Document purpose of WPF/MAUI host-embedded samples in gum-samples skill (#4501)
- Fix crash adding a child object whose standard type isn't in the project (#4500)
- Fix slider thumb overflowing track bounds at min/max value (#4498)
- Fix O(n^2) full-tree error refresh (#4495) (#4496)
- Report GUM0006 warning when an instance file variable is missing on disk (#4493) (#4494)
- Support Multiply per-frame color from .achx/.achj animation chains (#4490) (#4491)
- Support per-frame Alpha from .achx/.achj animation chains (#4489)
- Clamp overflowing numeric input instead of producing Infinity (#4487)
- Refresh Variables tab when an animation chain file changes (#4485) (#4486)
- Support FlipDiagonal from .achx/.achj animation chains (#4484)
- Select entire numeric value on double-click instead of splitting at decimal point (#4483)
- Fix silent case-mangling in FileManager.Standardize/MakeRelative call sites (#4481) (#4482)
- Get the Gum tool compiling and running from source on Linux (via Wine) (thanks @profexorgeek) (#4475)
- Support .achj (JSON) animation chain format alongside .achx (#4480)
- Bump Apos.Shapes to 0.8.1 and fix Arc.cs's DrawRing thickness for issue #4473 (#4474)
- Document KernSmith's StbTrueType rasterizer requirement for web targets (#4472)
- Clarify unqualified vs qualified instance variable references in docs (#4470)
- Surface MonoGame/KNI/FNA in-memory font creator failures via PropertyAssignmentError (#4467)
- Raylib: surface in-memory font creator failures via PropertyAssignmentError (#4465)
- Fix Sokol TextBox placeholder never hiding when the user types (#4463)
- Port ExportSnapshot/LoadAnimations onto GumServiceSkiaBase (#4460) (#4462)
- Rebuild Silk.NET's GumService as a GumServiceSkiaBase subclass (#4452 phase 2) (#4459)
- Theme the native TextBox Cut/Copy/Paste context menu (#4457) (#4458)
- Copy and paste a whole variable category from the Variables tab context menu (thanks @kaltinril) (#4456)
- Compile GumService into Gum.SkiaSharp instead of file-linking it (#4452 phase 1) (#4454)
- Unify FormsUtilities: drop dead Game param, dead namespace shim, hard-delete V1/V2 default visuals (#4450)
- Rewrite SkiaSharp general-canvas doc to be truly Forms-free (#4448) (#4449)
- Add SkiaSharp general canvas setup doc (#4446)
- Only revert CustomCursor to Arrow when leaving an element that set one (#4442) (#4444)
- Fix DialogBox.Dismiss raising FinishedShowing before cleanup (thanks @ultimateownsz) (#4440)
- Fix Forms theme icon glyphs to use bundled .ttf instead of unbundled/missing system font (#4437)
- Let themed CheckBox labels wrap by stretching the content column (#4433) (#4436)
- Prune bin/obj during orphan code file scan traversal (#4430) (#4434)
- Orphaned code file scan, Errors tab action, and gumcli codegen --prune (Part of #4422) (#4429)
- Split the element-delete code-file prompt into per-file decisions (#4422) (#4428)
- Route rename-collision and element-XML deletes through the recycle bin; move .codsj on rename (Part of #4422) (#4427)
- Reconcile custom code files when an element is renamed or moved (Part of #4422) (#4423)
- Fix Bubblegum focus-ring geometry and missing Window border (#4424) (#4426)
- Port Neon theme to Add Forms tool content (Part of #3527) (#4420)
- Reset AposShapeRuntime._registered on UninitializeRuntimeTypes (#4417) (#4419)
- Reset ShapeRenderer.Self on GumService.Uninitialize (#4416) (#4418)
- Port ForestGlade theme to Add Forms tool content (Part of #3527) (#4413)
- Port Retro95 theme to Add Forms tool content (#4412)
- Bump Apos.Shapes/Apos.Shapes.KNI 0.7.8 -> 0.7.10; remove Mesa self-gate (#4411)
- Fix Circle rendering in gumcli screenshot (ShapeRenderer never initialized) (#4409)
- New projects start with a screen and Forms controls (#4407)
- Port Dark Pro theme to Add Forms tool content (#3527) (#4402)
- Fix TextBox scrolling horizontally when single-line-mode text renders on multiple lines (#4398)
- Fix ScrollViewer applying spurious scroll delta on new touch (#4397)
- Fix NotImplementedException resizing objects with certain dimension units (#4396)
- Flip Resize From Center at zero Width/Height instead of floor-clamping (#4392)
- Flip resize anchor instead of allowing negative Width/Height (#4391)
- Populate PropertyChangedArgs.OldValue in DataUiGrid.PropertyChange (#4389)
- Restore Container outlines in the editor by not registering ContainerRuntime (#4386) (#4388)
- Snap resize's dragged edge in world space, not Width/Height locally (#4384)
- Show State/Category icons on Add State and Add Category right-click menu items (#4383)
- Add grid overlay and snap-to-grid to the main editor canvas (#4381)
- Add + buttons for categories and states in the States tree (#4379)
- HtmlToGum: fidelity harness split, canaries, and shared converter wins (thanks @devinguthrie) (#4357)
- Dispose the superseded font on every oversample re-rasterize (#4364) (#4378)
- Fix raylib/SkiaGum renderers ignoring LayerCameraSettings when drawing (#4375)
- Compose oversample compensation into Raylib BBCode default/[FontScale] runs (#4376)
- Show state-editing indicator bar in Alignment tab (#4374)
- Fix Absolute-width text re-wrapping when toggling font oversampling (#4370) (#4372)
- Document deprecated standard types as separate from version gating (#4371)
- Fix NullReferenceException selecting instances with no tree node (#4369)
- Add Raylib font oversampling (parity with #4317) + cross-backend zoom demo screen (#4366)
- Give the Gum main window a minimum size and reject degenerate saved geometry (#4363)
- Close #4349: system fonts already covered; remove dead design-metrics plumbing (#4362)
- Document TextRuntime.UseFontOversampling / RegenerateOversampledFont (#4360)