v2.5.0
What's new
Changes
Current Development Release
v2.5.0 - 2026-07-04
- Fixed: declarative
minimapbuttons forgot their dragged position.RGX.Addoncreated the button without passingstorage, so the angle never persisted; creation now happens afteraddon.dbexists and persists there by default. The bare form also assumes a left-click that opens your options panel, and a new advanced table form passes through the full minimap opts (tooltip,defaultAngle,onRightClick, ...). - Fixed: declarative
dropdowncontrols saved but never visually restored their selection —value = addon.db[key]was not passed, the exact save-without-restore bug class the framework exists to kill. - New
{ color = "dbKey" }control — the DSL now reachesUI:CreateColorPicker; default color assumed from the db defaults. slashadvanced form —slash = { "cmd", handler = function(addon, msg) ... end }overrides the assumed open-the-panel handler.- Auto-derived SavedVariables names now strip non-identifier characters (
"RGX-Hello"→RGXHelloDB), matching whatrgx_generate_addonemits. Hyphenated-name addons relying on the old raw concatenation should setdbNameexplicitly (RGX-Hello always has). - Progressive-disclosure principle and the BLU-proven layout model (panel → tabs → multi-page tabs → 1–2 column cards → widgets) encoded in
CLAUDE.md,docs/DECLARATIVE-API.md, and the schema;docs/ACE3-ANALYSIS.mdgained a verified current-state parity map against Ace3.
v2.4.1 - 2026-07-03
- Fixed: declarative slider
suffixwas silently dropped.{ slider = "volume", suffix = "%" }in anRGXAddonoptions table validated fine and ran with no error, but the options-table-to-UI mapper only forwardedkey/label/min/max/steptoUI:CreateSlider—suffixnever reached it, so no addon using it (including RGX-Hello's own Volume slider) ever actually showed the suffix. Found by runningtools/rgx-mcpend-to-end against RGX-Hello's real, shipped opts table instead of a synthetic fixture. schemas/rgx-addon.schema.jsonnow allowssuffixonsliderControl(it was rejecting the same shipped, working key the schema itself hadn't caught up to).rgx_generate_addongained adbNameoverride andlabel/suffixpassthrough on generated sliders. Without an override it was emittingRGX-HelloDB(hyphen intact) as the SavedVariables hint for a name like "RGX-Hello", which doesn't match what any hyphenated addon should actually ship — it now strips non-identifier characters for the default and lets callers override explicitly.- New
tools/rgx-mcp/test/test-rgx-hello.mjs— drives the real server over the real MCP client SDK and points it at the actual RGX-Hello repo (generate/validate/audit), so future changes to the schema, the mapper, or the generator get checked against a real addon, not just synthetic input.
v2.4.0 - 2026-07-03
- RGXColorPicker redesigned with a modern circular control vocabulary (ring-and-fill drag handles on the SV box and hue bar, circular swatches and preview, hover feedback on presets, primary-themed focus states on the hex/RGB inputs) built on
RGXDesigntokens instead of hardcoded colors, replacing the borrowed Blizzard minimize-button icon that was standing in for a cursor. UI:CreateLabelfixed to actually wrap long text. FontStrings with no explicit width auto-size to a single line and silently overflow their parent frame's edge instead of breaking — every multi-sentence label (e.g. the visual test harness's "What to test" hints) rendered past its panel.CreateLabelnow accepts an opt-inoptions.widththat enablesSetWordWrapand justification; short labels are unaffected.tools/rgx-visual-test/moved to theRGX-Hellorepo, merged into that addon rather than shipped as a separate in-tree dev tool — RGX-Hello is now both the minimal reference addon and the visual QA harness.tools/rgx-mcp/now ships inside the packaged addon zip (previously excluded). Addon authors who install RGX-Framework and want to build on it should already have the framework's MCP server on hand instead of needing a separate download.
v2.3.0 - 2026-07-03
- New module: RGXTooltip — tooltip composition (
Show/Attach) replacing theSetOwner → ClearLines → AddLine × N → Showboilerplate found across 71 GameTooltip call sites in BattlePetUtility alone, plus a safe wrapper (HookNative) over Blizzard'sTooltipDataProcessorfor augmenting native item/spell/unit/aura/pet/mount/macro tooltips. Blizzard does not pcall-wrapTooltipDataProcessordispatch, soHookNativepcall-guards every registered callback — one addon's tooltip hook can no longer break tooltip rendering for every other addon. - RGXColorPicker actually renders now.
Show()silently failed since the module was introduced — six frames called:SetBackdrop()without the requiredBackdropTemplatemixin, throwing partway through construction so the frame was never cached. With that fixed, two more stub features were exposed: the hue bar never had a rainbow (a hardcoded flat red — the original code's own comment admitted it was left unfinished), and the saturation/value box never had a saturation axis (only value/brightness worked). Both replaced with real gradients (a 6-segment hue rainbow, and a reactive white→hueSetGradientfor saturation). - New dev tool:
tools/rgx-visual-test/— an in-tree QA harness for manually testing RGX's UI controls in-game (/rgxvisualfull panel,/rgxcolorpicker only). Not player-facing, excluded from the packaged zip. - Documented the in-tree
tools/rgx-mcp/MCP server and the Declarative API in README.md and description.html (shipped in v2.2.0, previously undocumented in either entry point).
v2.2.1 - 2026-07-02
- Packaging hotfix: the v2.2.0 zip leaked
docs/,schemas/, andtools/— the packager's ignore matcher silently fails on directory entries with trailing slashes. Entries normalized; the zip now contains only the runtime (TOC, XML, core, modules, media, LICENSE).
v2.2.0 - 2026-07-02
- rgx-mcp ships in-tree at
tools/rgx-mcp/— read-only MCP server (validate/audit/generate against the Simplicity Contract), excluded from the player zip; anyone with the checkout has the tool. Registered in.mcp.json. - CI: Discord notifications fixed — the notify step now fails loudly on webhook rejection instead of silently succeeding (
curlwithout--failtreated 4xx as success); avatar URL corrected; empty-secret guard added. - Repaired double-encoded UTF-8 (mojibake) across 11 documentation files; deleted
docs/USAGE-BPU.mdin favor of the Tier 2 work item it described. - New module: RGXAuras — taint-safe aura scanning and watching (
HasPlayerAura/GetPlayerAurafast path,HasAura/GetAura/IterateAurasfor any unit,WatchUnitincrementalUNIT_AURAcache withOnApplied/OnRemoved/OnUpdatedcallbacks). Designed around Midnight's secret-aura restrictions: every potentially-secret field comparison stays behind an internal pcall boundary, so restricted units yield nil/false instead of taint. Generalizes BPU'sPlayerHasAuraSpellIDpattern; first rgx-mod trigger primitive. RGXAddonglobal entry point — line 1 of a consumer addon is the addon:RGXAddon "MyAddon" { ... }(curried form supported). WrapsRGX.Addon; per the frozen Simplicity Contract (docs/DECLARATIVE-DSL.md,dslbranch), thelocal RGX = assert(...)form is now the documented escape hatch, not the front door.- Declarative API contract shipped —
schemas/rgx-addon.schema.json(machine-checkable shape of theRGXAddonopts table; keys annotatedx-rgx-ships: today|tier4, trigger vocabulary + control grammar encoded) anddocs/DECLARATIVE-API.md(human reference for the shipped surface, verified againstcore/core.lua). This is Tier 5 #14 and the contract the externalrgx-mcptool validates against. Schema excluded from the packaged zip. RGXSharedMedianow fires the internal messageRGX_SHAREDMEDIA_UPDATEDafter every scan so consumers can re-import bridge entries and refresh media pickers.- Added
SM:ExcludeFolder(addonFolderName)— consumers that manage their own media can exclude their AddOn folder from the generic scan so their paths are not re-bridged as duplicates. The framework's own folder is excluded by default. - Packaging fixes: added missing
LICENSE.txt(TOC already declaredX-License: MIT);.pkgmetanow excludes agent/tool files (CLAUDE.md,Home.md,.agents/,.claude/,graphify-out/) from the zip, uses the validmanual-changelogkey pointing atdocs/CHANGES.md, and drops stale font-download instructions (fonts are committed undermedia/fonts/). - Removed dead
KittyGetSoundPacks/KittyRegisterSoundPackscan and hook fromRGXSharedMedia— these globals never existed in any real addon; the generic addon-global scan already covers third-party sound packs. - Enforced the framework's own "no
C_Timer" rule:RGXDelves:QueueLivesRefreshandRGXHonor:QueueChecknow useRGX:Afterso deferred work is budgeted and diagnosable by the framework timer driver. - Documented the design thesis in
CLAUDE.md: the framework prevents taint and deprecated-API bugs by construction. Verified by audit that the framework (and consumers BLU, BPU) use onlyhooksecurefunc, no protected-function calls, with correct combat-lockdown handling.
v2.1.0 - 2026-06-30
- Enabled RGXCombat — combat enter/leave/kill/crit/low-health/execute/encounter callbacks now active for all consumers.
- Enabled 8 event callback modules that were dormant since v1.8.0: Achievement, LevelUp, Quest, Honor, Delves, Housing, TradingPost, Prey.
- All modules are now active in the XML loader. No dormant code remains in-tree.
TryInit("RGXCombat")wired into initialization.lua between RGXSharedMedia and RGXPetBattles.- Removed stale comment in initialization.lua that described RGXCombat as blocked during load screen (its Init() already defers via PLAYER_REGEN_ENABLED).
Full notes:
Production Releases
v2.0.0 - 2026-06-30
- Stable RGX 2.0 framework release for retail 12.0.7.
- Promotes the RGX.Addon, NewDatabase, event, timer, and runtime integration work out of alpha.
- Keeps unfinished callback modules out of the XML loader for a clean live load.
- Includes combat-safe event/runtime hardening and SharedMedia scan coalescing from the alpha cycle.
Full notes:
v2.0.0-alpha.2 - 2026-06-28
- SharedMedia startup scan now coalesces light/full rescans instead of doing the expensive generic pass immediately.
- Generic addon-global media scan is deferred until after
PLAYER_LOGIN, reducing startup timer-slow warnings. - Added scan-state guards so late media-provider loads can upgrade a pending scan without duplicating work.
Full notes:
v2.0.0-alpha.1 - 2026-06-11
- RGX.Addon() — one-call addon factory: auto-creates database, slash commands, minimap button from a single declarative table.
- Declarative options engine — table-driven panel builder with toggle, slider, dropdown, button, section, label controls, all auto-bound to
addon.db. - Proxy fix —
__newindex/__indexnow guard internal fields (_guard,_raw,_defaults,_callbacks,_onSwitch) withrawget/rawsetso they never leak into profile SavedVars. - Fixed
MergeDefaults→MergeTable(3 call sites —MergeDefaultswas never defined). - Added
database_test.luawith 14 assertions, wired via/rgx dbtestcommand. RGX.Addon()now passesopts.onSwitchthrough toNewDatabase.- Timer-slow threshold: 50ms → 250ms (SharedMedia:QueueScan ~207ms is normal I/O).
Full notes:
v1.9.0 - 2026-06-09
- NewDatabase API —
RGX:NewDatabase(name, defaults, opts)with metamethod-based profile access, profile CRUD, cross-characterdb.global. - Combat lockdown safety —
pcall(function() ... end)closure pattern replaces raw C function reference. RGXCombatreturned to dormant status.
v1.8.0 - 2026-06-09
- BLU v7 migration foundation — 10 callback modules (Achievement, LevelUp, Collectibles, Loot, Quest, Honor, Delves, Housing, TradingPost, Prey).
- Theme highlight tokens, combat safety guards.
v1.6.0 - 2026-05-01
Changes
- Reworked backend font handling to properly support shared bundled fonts across downstream addons.
- Improved RGX font registration, lookup, and UI application paths so addons can reliably consume the shared font system.
- Updated shared option UI behavior for tabs, buttons, labels, and reset controls.
- Restored framework tab sizing and label anchoring to the expected RGX defaults.
- Cleaned up button/tab text handling to avoid unintended wrapping, alignment drift, and inconsistent font-string anchors.
- Rewrote README.md as a polished entry point with links to the full wiki documentation.
- Added comprehensive wiki documentation: Architecture, API Reference, Fonts System, Dropdowns System, Theming & Design, Troubleshooting, and Migration Guide.
- Updated CurseForge description.html with current module list, font counts, and documentation links.
- Fixed stale file path references (modules/fonts/fonts.lua → modules/fonts/definitions.lua).
- Fixed inconsistent dormant module wording across all docs (standardized to "in-tree but not loaded by the XML loader").
- Fixed stale interface version in Super Simple example code (110002 → 120005).
- Standardized font count language across all docs (36 bundled + 8 WoW defaults = ~44 total, 10 blocked, ~34 available).
Fixes
- Fixed shared font plumbing needed by BattlePetUtility and SimpleQuestPlates.
- Fixed RGX option tabs using widened dimensions and incorrect text alignment.
- Fixed non-icon option tab labels being left-aligned instead of centered.
- Fixed icon tab label padding regressions.
- Removed unintended word-wrap and font-string anchor changes from shared RGX controls.
- Verified touched RGX Lua files pass syntax validation.
This mod has no additional files

