Gum is an MIT-licensed C# UI layout tool built on object-oriented principles, distributed as NuGet runtimes for MonoGame, KNI, raylib, SkiaSharp, MAUI and FNA, and intended for developers who need one flexible, inheritance-driven layout system across game engines and .NET platforms.
What it is
Gum is a general-purpose UI layout tool built on object-oriented principles. It supports inheritance, object instances, default and overriding variables, and states that are either categorized or uncategorized, all driven by what the project describes as an incredibly flexible layout engine. Layouts are exported as human-readable XML, and the tool itself can be extended either through MEF or by modifying the source code directly. It lives in the C# and .NET ecosystem, and its runtimes are published to NuGet with every package sharing the same version number so that they stay in sync.
The concrete problem Gum solves is layout authoring that would otherwise be written by hand per control and per platform. Because Gum produces general-purpose XML, a layout authored once can be consumed in virtually any C# environment, and integrations exist beyond the packaged runtimes for environments such as FlatRedBall, Meadow, Silk.NET, WPF and Avalonia. On top of the layout engine, Gum Forms controls look clean by default, and a single line of code restyles every control with a built-in theme, so the same UI can take on a completely different look without being rebuilt.
Key capabilities
- Inheritance, object instances, and default or overriding variables form the core object model that layouts are authored against.
- States, both categorized and uncategorized, let a single component carry multiple visual variations.
- A layout engine the README describes as incredibly flexible handles positioning and sizing.
- Exports human-readable XML, which is what makes the output portable across C# environments.
- Extensible through MEF or by modifying the source code directly.
- One-line theming with
DarkProTheme.Apply(GraphicsDevice); restyles every Gum Forms control; shipped themes are DarkPro, Bubblegum, Neon, Retro 95 and Forest Glade.
- Per-platform runtime packages:
Gum.MonoGame, Gum.KNI, Gum.raylib, Gum.SkiaSharp, Gum.SkiaSharp.Maui and Gum.FNA, plus Gum.Shapes.MonoGame and Gum.Shapes.KNI add-ons for drawing rectangles, circles and other primitives. GumCore exists for integrating with a custom runtime.
Who uses it and how
- Game developers targeting MonoGame or KNI, who install the runtime package plus the separate Shapes add-on when they need primitive drawing.
- Developers on raylib, SkiaSharp and MAUI, where Shapes is built into the runtime rather than shipped as a separate package.
- Teams working in FlatRedBall, Meadow, Silk.NET, WPF or Avalonia, which have integrations beyond the packaged runtimes listed in the README.
- Prototypers, as reflected in the project topics alongside
game-ui, layout, ui and xna.
- Anyone consuming Gum through GumCore to wire the layout output into their own runtime.
Getting started
Install the NuGet package for the target platform — for example Gum.MonoGame, Gum.KNI, Gum.raylib, Gum.SkiaSharp or Gum.SkiaSharp.Maui — and add Gum.Shapes.MonoGame or Gum.Shapes.KNI alongside it on MonoGame and KNI. Documentation and tutorials are hosted at https://docs.flatredball.com/gum/.
How it compares
No list of paid products replaced by Gum is provided here, so the useful comparison is against the runtimes and integrations the facts themselves name: MonoGame, KNI, raylib, SkiaSharp, MAUI, FNA, FlatRedBall, Meadow, Silk.NET, WPF and Avalonia. Gum sits above those as the layout and styling layer, supplying one XML-based authoring model and one theming call rather than a different UI approach per platform.
When to use it — and when not to
Gum is a library rather than a service, so there is no database, storage or SMTP to operate; the maintenance burden is keeping NuGet package versions in sync and tracking upstream runtime changes. It is a poor fit for anyone who needs the Sokol backend: Gum.sokol is no longer published, versions up to 2026.9.2.1 remain on NuGet and still work but receive no further updates, and the source at Runtimes/SokolGum/ must be built against a hand-cloned Sokol.NET because that dependency is not actively maintained and its submodule tree broke git pull for the Gum repository. FNA users should also note that Shapes is explicitly not supported on that runtime.
project readme (upstream, from github) — read inline

A general purpose UI layout tool built on object-oriented principles.


Specifically it supports:
- Inheritance
- Object instances
- Default/overriding variables
- States (categorized and uncategorized)
- Incredibly flexible layout engine
Gum exports to human-readable XML, and can be extended either using MEF or by modifying the source code directly.
Beautiful UI, styled in one line
Gum Forms controls look clean by default, and a single line of code restyles every control with a built-in theme — same UI, completely different look. Pick one of the shipped themes or author your own.
DarkProTheme.Apply(GraphicsDevice); // one line — every control restyled
See the full theme gallery and usage →
Tutorials and documentation can be found here:
https://docs.flatredball.com/gum/

Star History

Contributors
Need Help?
The fastest way to get help is to ask in our Discord: https://discord.gg/uQSam6w36d
You can also post an issue: https://github.com/vchelaru/Gum/issues
You can also check the docs: https://docs.flatredball.com/gum/
Installation
Gum's runtimes are published to NuGet. Install the package for your platform. All packages share the same version number, so they stay in sync.
Shapes is the recommended way to draw rectangles, circles, and other primitives in Gum. On MonoGame and KNI it ships as a separate add-on package (install it alongside the runtime); on the other platforms it's built into the runtime.
Sokol is no longer published. Gum.sokol versions up to 2026.9.2.1 remain on NuGet and still work, but receive no further updates: the backend depends on Sokol.NET, which is not actively maintained and whose submodule tree broke git pull for the Gum repo. The source still lives at Runtimes/SokolGum/ and builds against a hand-cloned Sokol.NET — see its README.
Gum produces general-purpose XML, so it can be used in virtually any C# environment. Beyond the packaged runtimes listed above, integrations also exist for environments such as FlatRedBall, Meadow, Silk.NET, WPF, and Avalonia. For integration details — or for using GumCore to integrate with your own runtime — see the main documentation: https://docs.flatredball.com/gum/