ahel is live on Product Hunt today. Upvote

KernSmith Integrations

SkillDev tools

KernSmith runtime bitmap-font packages. Triggers: Integrations/KernSmith, KernSmith.MonoGameGum, KernSmith.RaylibGum, KernSmith.KniGum, KernSmith.FnaGum, KernSmith.GumCommon, InMemoryFontCreator.

Available today. Use it from your connected AI after setup.

Connect ahel once, and every AI you use reads what you have installed.

Then ask your AI: use the KernSmith Integrations skill

What this skill tells your AI

The instructions your AI receives, as published by vchelaru/gum in .claude/skills/gum-kernsmith-integrations/SKILL.md and read by ahel’s review.

KernSmith is a third-party, cross-platform, in-memory BMFont rasterizer. Integrations/KernSmith/* are optional first-party Gum packages that bridge it into each runtime. The tool itself also uses KernSmith directly as an alternate offline generator backend — see gum-tool-font-generation for that (KernSmithFileGenerator, unrelated to the runtime packages below).

Package map

PackageRole
KernSmith.GumCommonShared mapping layer: Gum's BmfcSave → KernSmith's FontGeneratorOptions
KernSmith.MonoGameGumMonoGame IRuntimeFontCreator-style wiring, produces BitmapFont
KernSmith.KniGum / KernSmith.FnaGumSame shape, KNI/FNA targets
KernSmith.RaylibGumKernSmithRaylibFontCreator, produces Raylib_cs.Font

Each platform package plugs into CustomSetPropertyOnRenderable.InMemoryFontCreator (a game project sets this at startup) so Gum rasterizes fonts on the fly instead of loading pre-generated .fnt/.png files.

Gotcha

These are opt-in NuGet add-ons a game project references directly — Gum does not wire one up by default. If InMemoryFontCreator is never set, Gum falls back to the tool's pre-generated bmfont.exe pipeline. Seeing a KernSmith.* package reference alongside Gum.MonoGame/etc. in a user's .csproj is expected, not a conflicting fork.

Rasterizer backend gotcha (wasm/AOT)

KernSmith picks a glyph rasterizer via RasterizerBackend, each backend its own opt-in NuGet package (KernSmith.Rasterizers.FreeType/Gdi/DirectWrite.TerraFX/StbTrueType) so a consumer only pays for the one it needs — see the KernSmith README. Gum's KernSmith.GumCommon references only FreeType (upstream's default, and native-only). StbTrueType is the sole pure-C# backend and the only one that runs on browser-wasm/AOT, but no Gum KernSmith.* package references it — a wasm consumer must add KernSmith.Rasterizers.StbTrueType themselves, and separately call RuntimeHelpers.RunClassConstructor(typeof(StbTrueTypeRasterizer).TypeHandle) before using it, since KernSmith's reflection-based backend auto-discovery is trimmed away under wasm/AOT publish (silent "backend is not registered" failure otherwise). Any fix that wires this into Gum's own packages must condition both the reference and the call on the browser-wasm RID — adding it unconditionally defeats the per-backend package split's whole purpose.

GumFontGenerator.Generate throws PlatformNotSupportedException when called on browser-wasm with no explicit backend argument, instead of leaving the failure to KernSmith or a silent fallback — see GumFontGenerator.IsBrowserPlatform (test seam for OperatingSystem.IsBrowser).

See docs/code/files-and-fonts/font-strategies.md for the user-facing font strategy comparison.

Signals

GitHub stars
620
Forks
80
Last commit
Sep 2026
Advanced
Catalog kind
skill
Gateway key
gum-kernsmith-integrations
Source
github.com/vchelaru/gum