5.4.5-JuNNeZ
What's new
Changelog
A note on WoW 12.1 addon development
Retail 12.1 protects more combat, aura, cooldown, and unit data as secret values. Addons can often display those values only by handing them directly to Blizzard-owned widgets instead of reading or formatting them, which is why one visual layer may keep working while related text or logic disappears; safe fixes increasingly require narrow ownership boundaries between Blizzard and other addons.
Release note rule: each version entry must include only what changed since the previous release (delta-only). Do not repeat older items from prior versions in newer entries.
5.4.5-JuNNeZ (2026-09-06) - Less Work on Every Target Swap
Fixed
- Changing targets in a raid no longer rebuilds the target aura row from scratch. A boss and an ordinary target differ only in how wide that row is and how many icons it holds, but every swap between the two also re-applied the row's anchors, all seven of its group layouts and its filters, and that last step makes the game re-evaluate every aura on the spot. Those steps now run only when something they depend on actually changes, so retargeting in a raid does less work each time. Nothing about the row you see changes.
Internal
- The aura access guard added in 5.4.4 now falls back to
C_Secrets.ShouldAurasBeSecretwhere the per-object access query is unavailable, so it fails closed instead of open. No behaviour change on a current client. /azdebugaura snapshots list helpful auras again. The debug code kept a private copy of the aura group list that stopped matching the six helpful groups the player row registers, and had been quietly dumping harmful auras only. It now reads the list the containers actually register.
5.4.4-JuNNeZ (2026-09-06) - The Raid Freeze on Target Auras
Fixed
- The UI no longer locks up when you change targets in a raid. Switching between a boss and anything else rebuilds the target's aura row, and in a raid that rebuild threw an error part-way through. Because it never finished, the next target change started it over and threw again, so it compounded with every swap - at its worst on a boss reset, when the whole raid retargets at once. Target auras now leave those icons alone in content where the game keeps aura information private.
Known limitation
- In a raid, the player aura brightness toggle only reaches icons drawn after you change it. The
game will not let us restyle an aura icon that is already on screen there, so
/az -> Unit Frame Settings -> Player -> Player Aura Row -> Always Show Full Brightnessmay not take hold until those icons are redrawn. Everywhere else it applies at once, as before.
5.4.3-JuNNeZ (2026-09-05) - Range Fading at Your Own Distance
Added
The range indicator can fade at a distance you choose. Party, Raid (5), Raid (25), Raid (40) and Arena each get their own slider beside the range toggle. 40 yards is the game's own group check and stays the default, so nothing changes until you move it. Shorter distances are measured with the spells and items your class currently has, and settle on the nearest range one of them covers - ask for 30 and you may get 28, depending on what you can cast. If nothing reaches that far, group frames fall back to the 40 yard check rather than fading the whole group out.
/az -> Unit Frame Settings -> Party Frames -> Fade Distance (yards)/az -> Unit Frame Settings -> Raid Frames (5) -> Fade Distance (yards)/az -> Unit Frame Settings -> Raid Frames (25) -> Fade Distance (yards)/az -> Unit Frame Settings -> Raid Frames (40) -> Fade Distance (yards)/az -> Unit Frame Settings -> Arena Enemy Frames -> Fade Distance (yards)
Fixed
- The arena range indicator now actually fades. It had never done anything: the check
behind it only answers for units in your own group, and arena enemies never are. Enemy
frames now measure at every distance, the default 40 yards included, so the existing
toggle at
/az -> Unit Frame Settings -> Arena Enemy Frames -> Use Range Indicatorstarts working for the first time.
Changed
- Export and import moved to their own page. They sat above the settings tree, where two
multiline text boxes crowded every settings page into the lower third of the window. They
are now the last entry in the tree, at
/az -> Export & Import, with room for larger boxes.
5.4.2-JuNNeZ (2026-09-05) - Portrait Alpha and the Party Frame Error
A patch release for one error report from 5.4.1 and the two older bugs found sitting underneath it. All three are in the 3D portraits.
Fixed
Party frames threw a
SetAlphaerror on entering a scenario, dungeon or raid. Six of them at login, from the portrait's alpha handling. It asked the game for the frame's on-screen opacity, and inside an instance Retail 12.1 is allowed to refuse the question and answer with nothing at all - which the portrait then tried to use. It no longer needs to ask.Portraits were losing their 85% opacity and rendering solid. The same code overwrote the portrait's configured transparency with the unit frame's the first time the frame faded for any reason, so portraits drifted to fully opaque and stayed there.
Raid and arena portraits stayed bright when the unit went out of range. Both frame types dim to 60% at range, and the portrait was the one piece that never dimmed with them. It does now, matching party and target frames.
Internal
- The portrait alpha fix is a single shared helper in
UnitFrames/Functions.lua, wired into all five stylers that own a 3D portrait, replacing the closure pairs each of them carried. It writes to the model's own alpha channel rather than the widget's, so the configuredPortraitAlphais no longer in the path of the fade. - Unit frames no longer hook
UIParent:SetAlphaat all - nothing in the addon or in Blizzard's own interface calls it. Nameplates still need the hook and keep one shared handler over the plate registry, instead of a fresh closure for every plate created in a session.
Fixed
Party frames threw
bad argument #1 to 'SetAlpha'on restricted maps. The 3D portrait alpha hook fedGetEffectiveAlpha()straight intoSetAlpha, and in 12.1 that getter is allowed to return nothing at all - it carries theRequiresScriptObjectAlphaAccessprecondition, which fails by returning no values once anything in the frame's parent chain owns the secret Alpha aspect, as it does inside a scenario, dungeon or raid. The party frames' new range indicator was what finally drove the hook down that path: turning the option off disables the range element, which sets the frame's alpha on its way out, which fires the hook. Six errors at login in a scenario.Portraits were losing their configured 85% opacity. The same hook wrote the unit frame's alpha over the portrait's own, so
PortraitAlphasurvived only until the first time a frame's alpha changed. The portrait's own alpha is now left alone, and the fade rides a separate channel.Raid and arena portraits never faded with the frame. Both frame types dim to 60% when the unit is out of range, and both have a 3D portrait that stayed at full brightness while everything around it faded. They had no portrait alpha handling at all; they now share the same one as party, target and the alternate player frame.
Changed
- Fewer hooks on
UIParent. Every unit frame and every nameplate used to install its own closure onUIParent:SetAlpha, none of which were ever removed - dozens of them by the end of a session, all doing the same work. The unit frame ones are gone outright (nothing in this addon or in Blizzard's interface callsUIParent:SetAlpha), and the nameplate one, which has a real job to do, is now a single hook that updates every plate instead of one hook per plate.
5.4.1-JuNNeZ (2026-09-04) - Profile Sharing, Keybind Mode, and Target Markers
The first phase of the roadmap rebuilt in FEATURE_PLAN.md on 2026-09-04, and
deliberately the low-risk phase: three of the four items surface behaviour the addon
already had but never exposed.
Please stress test the profile strings. Export and import are new, they touch every module's settings at once, and the machinery underneath them shipped unfinished upstream and had to be repaired before it could run at all. Duplicate your profile before importing anything.
Profile export and import
The profile page can finally share a setup. Generate Export String packs the active profile, frame positions included, into one printable string; paste someone else's string into the import box and press Accept to apply it. Importing overwrites the active profile and prompts for a reload, and a string from a newer version of AzeriteUI is rejected with its own message rather than half-applied.
This shipped unfinished upstream. ns.Export, ns.ExportLayouts and ns.Import had
empty bodies, the options entries were dev-mode only and permanently disabled, and three
supporting bugs had to be fixed before any of it could work:
ns:PurgeKeysandns:PurgeOtherKeysmutated their table but returned nothing, so every caller assigned nil.PurgeOtherKeysalso recursed into subtables asking the opposite question, leaving branches standing that it was meant to strip.GetDefaults()returns the AceDB wrapper,{ profile = ... }, not the profile itself. The merge and export paths walked it alongsideself.db.profile, which would have nested the whole settings tree under a bogusprofilekey. They now go through a newModule:GetProfileDefaults().MergeSettingsrecursed with a nil target when a branch was missing, and a nil target falls back to the module's entire profile - so a missing subtable would have merged its defaults onto the top level.
Export is opt out rather than opt in. Every module holding a settings profile takes part unless it says otherwise; the debug, development, experimental and options modules never do. Layouts only come from modules that actually save a position.
Keybind mode is documented
/kb has worked since the bars were written - LibKeyBound ships with the addon, every
action, pet and stance button already carries a bind target, and the library registers the
slash command itself. Nothing said so. It is now in the README slash table and has an
Action Bars > Keybind Mode button that closes the options window first, since the
window sits on top of the bars you are trying to hover.
Unit frames
- Party frames now have the range indicator. Every other group frame has had one for
years and the party layout has always declared
OutOfRangeAlpha; only the element was missing. Off by default, under Party > Use Range Indicator. - Target markers on party, raid (5) and target frames. The skull, cross and star icons were only ever drawn on the 25 and 40 player raid frames. On by default, with a Show Target Markers toggle on each of the three.
Housekeeping
- README and the badge workflow said 12.0 / Interface 120000. The TOC has been 120100 since 12.1. Both are corrected; the workflow was the one that mattered, since it rewrites those lines in the README on every run.
- Eleven new locale keys, present in all ten locales. The German, Spanish, French, Italian, Portuguese, Russian, Korean and Chinese strings are new translations and have not been reviewed by the locale contributors.
5.4.0-JuNNeZ (2026-09-03) - Reclaimed Art, Working Smoothing, and a Cleared Audit Backlog
The version family moves from 5.3 to 5.4 because this release is not a patch. A full codebase audit on 2026-08-26 produced a backlog of eight items; all of them are closed here. Along the way three things turned out to have never worked at all rather than to have broken recently - bar smoothing, the development mode toggle, and roughly a fifth of the artwork the addon has been shipping since the fork.
Highlights
- The mana orb has its glass dome. The player frame has been creating a glass texture for the orb on every single login and hiding it again, because the layout never carried a texture for it to draw. It draws now. This is a specular highlight over the orb rather than a change to its shape, and it is one toggle away if you prefer the old look.
- The mana orb ships four fill artworks and you can pick one. Clouds is what you have always had. Galaxy, Moon and Sphere have been sitting in the addon's art folder, unreachable, since the fork. Two further decorative layers came with them - a heavy Rim at the orb's edge and a sculpted Pedestal beneath it - and both default to off.
- Health and power bars can finally animate. The function that turns bar smoothing on has been discarding its argument since it was written: it asked the game for an interpolation mode that does not exist, got nothing back, and quietly fell through to "no smoothing" on both branches. Two bars asked for smoothing and never got it, and both now interpolate: the player health bar and the target power bar. Every other bar in the addon explicitly asks for immediate updates and is unchanged.
- Boss castbars use boss castbar art. With mirrored castbar art switched on, a boss target drew the Seasoned tier's bar - a different texture at a different height from the health bar underneath it - because the mirror was hardcoded to one tier's name. Each tier now names its own.
- Raid target icons sit in the right place on 40-player raid frames. The Raid (25) frames move the raid target marker to the left of the leader and master-looter icons. The Raid (40) frames never did, because the function that does it only ever existed in one of the two nearly identical files. Mark a target in a 40 and it now matches a 25.
- The cog wheel lights up when you hover it. It was the only button in the addon with no mouseover feedback at all, and the lit version of its artwork has been shipping unused the whole time.
- Optional badges for ordinary, level-?? and dead targets. The classification badge set that ships includes a silver badge, a lit skull and a spent skull that nothing has ever drawn. Off by default, because it puts a badge on units that normally have none.
/devmodeactually turns on development mode. The experimental module gated itself on an unpackaged git checkout and the dev mode setting, and the first half is never true in a build anyone can download./serialand/toggleblipsnow work from an installed copy once dev mode is on, which is what the setting always claimed to do.- Two option descriptions came back. The nameplate interrupt-colour legend and the Class Power Click-Through description were removed from all ten locale files by an unreleased cleanup pass, which would have rendered them as raw English key text in every language. Both are restored, byte-identical to their previous translations.
- The public documentation has been rewritten. The README and all twelve wiki pages predated
roughly forty-five releases. They now describe the current addon, including everything shipped
since April: group frame sorting, per-context player toggles, party and raid specialization
icons, the micro menu toggle, assisted combat highlight, ability pings and the target castbar
rework. Several documented facts were simply wrong -
/azdebugdoes not require development mode, the Player Alternate frame does not require development mode, the interface version was a release behind, and six slash commands were missing entirely.
Access
/azerite-> Unit Frames -> Player -> Mana Orb Texture (Clouds, Galaxy, Moon, Sphere)/azerite-> Unit Frames -> Player -> Mana Orb Glass (new, on by default)/azerite-> Unit Frames -> Player -> Mana Orb Rim / Mana Orb Pedestal (new, off by default)/azerite-> Unit Frames -> Target -> Extended Classification Badges (new, off by default)/devmodenow reaches/serialand/toggleblipsfrom an installed copy
Internal
DisableSmoothingresolves the enabled branch toEnum.StatusBarInterpolation.ExponentialEaseOut, with a literal1fallback mirroring the existing literal0. There is noLinearmember on 12.1 - the enum has onlyImmediate = 0andExponentialEaseOut = 1- so reading it returned nil, fell back toimmediate, and made the assignmentdisabled and 0 or 0.Target.luaread the same missing member forpower.smoothing.Raid40.luagainsLeaderIndicator_PostUpdate, copied verbatim fromRaid25.luaand assigned at the matching point instyle(). The diff between the two files drops from 41 hunks to 39, with noLeaderdifference remaining.Target.luareadsdb.HealthBarMirrorTextureinstead of a hardcodedhp_cap_bar_mirror. The Seasoned and Boss tiers declare their own; the SaiyaRatt variant declaresfalseexplicitly, becausens:Mergeonly fills keys a variant leaves nil and would otherwise have paired a cap mirror with a critter bar.- Unreferenced art went from 28 files of 135 to zero, with nothing deleted. 26 were wired into
rendering code or published through
Core/SharedMedia.lua; the last two, which have no home, moved to a new gitignoredAssets_Moot/that reaches neither build. Research, measurements and per-asset reasoning are inDocs/RESEARCH_Optional_Deletions_2026-09-02.md. The short version is that 24 of the 28 ship unreferenced in upstream AzeriteUI 5 as well and were never referenced in its 1596-commit history, so there was no upstream implementation to restore and placement had to come from the art, the naming, and what the code was already shaped to accept. ApplyDiabolicManaOrbArtended with unconditionalHide()calls on the orb'sGlassandArtworktextures. Both now route through oneApplyManaOrbDecorationhelper alongside a newRimlayer, driven byManaOrbGlass*/ManaOrbRim*/ManaOrbArtwork*layout keys on all three player style tiers. Sizes come from each file's measured content fraction, not its canvas:orb-glassframes its circle at 0.594 of canvas andorb-borderat 0.656, so matching the orb's 103px fill needs 173 and 157. The pedestal also moved fromOVERLAY, 1on the case frame toBACKGROUND, -3on the orb frame, since drawn above the wooden surround it covered the orb.SetManaOrbFillTextureresolves the orb fill from a profile setting and falls back to the layout as written. LibOrb takes one path per animated layer and the layout has always passed the same texture twice; the existing texcoord flip on layer two still follows both call sites, so the paired layers keep animating against each other.Classification_Updategained generic, unknown-level and dead branches behind one profile toggle. The badge refreshes on the frame's normal update cycle rather than on health ticks, so a target dying while already selected can hold its old badge until the next update; registeringUNIT_HEALTHon that frame was not judged worth it for an opt-in decoration.Layouts/Data/ActionButton.luagainedButtonAssistedHighlightTexture. The assisted-combat highlight and the proc glow were tinted from the same coloured ring, andSetVertexColormultiplies, so only a white base lands on the intended hue.GetSpecializationmigrated toC_SpecializationInfo.GetSpecializationacross six files as a file-local shadow, so the existing call sites and theirtype()guards keep working whichever the client exposes. Twelve sites, not the nine the audit listed -GroupSpecCache.luaarrived after that list was drawn, and its guard pairsGetSpecializationwithGetSpecializationInfo, so both moved together.GetCVar/GetCVarBoolmigrated toC_CVar.*the same way in nine files.SetCVarneeded more than a shadow becauseC_CVar.SetCVarexpects a string and several call sites passed numbers:WorldMap.luaandTutorials.luagot a localSetCVarValuehelper, andNamePlates.lua's six bare calls now route throughSetCVarIfSupported, the guarded string-converting helper that already existed in that file.- Removed the
tocversion >= 110007block inCompatibility.luathat recapturedInCombatLockdown,issecurevariable,issecure,hooksecurefunc,RegisterStateDriverandUnregisterStateDriverinto_G. The 11.0.7 restriction never shipped, all six exist on 12.1, and the block'srawgetguards were all true, so it wrote nothing. Re-publishing captured secure functions is the shape of thing that causes taint problems if it ever does fire. - Removed the Cataclysm Classic branches (
or (tocversion >= 40400 and tocversion < 50000)) at three sites and the four "Classics" shims forUnitEffectiveLevel,IsXPUserDisabled,UnitHasVehicleUIandGetTimeToWellRested. All four exist on retail, so none of theif (not _G.X)guards ever fired; the addon's calls to all four now reach Blizzard's own functions.Compatibility.luais 54 lines shorter. Core/Experimental.luagates on a localIsDevModeEnabled()testingns.IsDevelopment or ns.db.global.enableDevelopmentMode, matching the idiomCore/Debugging.luaalready used.ToggleUIstays unregistered and now says why in a comment: it switches between AzeriteUI and DiabolicUI, and this build has no relationship with DiabolicUI.Durability.luano longer writes an unusedanyItemBrokenglobal. The bytecodeSETGLOBALscan is down to the three deliberate global writes in the whole addon.Finalize.lua's metatable lock spelled the metafield____metatable, with four underscores, so it has never locked anything in this lineage. Corrected to__metatable. Verified that the onlysetmetatableon the addon namespace is AceAddon's, fromCore.lua, which runs well beforeFinalize.lua.Core/SharedMedia.luaregistered "Azerite Vehicle Exit Button" asicon-exit-flight; the file isicon_exit_flight.tga.GetMediaonly formats a path and never checks the file exists, so that entry pointed at nothing. The addon's own use had the correct name.- Locale. 124 dead
enUSkeys, theChatorphan and azhCN/zhTWaura-sorting orphan were removed from all ten files - 1,251 lines, pure deletions, so every surviving translation is byte-identical to what it was. That pass also removed two keys that are still referenced, both containing embedded\nsequences, which is the exact blind spot the audit had identified in its own key-extraction regex; the recount was redone with an index-based extractor but the deletion was not. Both restored. Ten new keys were added for the five new options and translated across all nine non-English locales. All ten files now hold 605 keys with zero missing, extra or duplicate, and every key is used. - Packaging.
.pkgmeta's ignore list is now the blacklist mirror ofbuild-release.ps1's whitelist, so the CI-published zip and the locally built zip contain the same files. Seven tracked root entries were reaching the published zip that the local zip excluded.build-release.ps1parses## Version:out of the TOC and exits non-zero if it is missing, empty or an unsubstituted token, so the version has one home.FixLog.mdis no longer tracked: the 11,150-line internal debug log stays on the maintainer's disk and stops being published.
Verification
All 167 addon Lua files parse. The bytecode global-write scan returns only the three deliberate
writes. Ten locale files hold 605 keys each with zero missing, extra or duplicate, and every
L["..."] lookup in the addon resolves. Assets/ holds 133 files with an unreferenced count of
zero. Nothing here can be confirmed statically - see the in-client checklist in Docs/TODO.md.
5.3.90-JuNNeZ (2026-08-24) - Per-Context Player Toggles and Group Frame Sorting
Highlights
- Showing your own frame is now two separate settings on both the Party frames and the 1-5 Raid frames: one for parties, one for raid groups. Hiding yourself in arena while keeping your frame in a five man dungeon was not possible before, because a single toggle covered both. Your existing choice carries over to both halves, so nothing changes until you split them yourself.
- The 1-5 raid frames can now show your own frame in a party. They only ever drew your group members there, never you, no matter what the setting said - the raid half of the same frames always drew you. Both halves answer to their own toggle now, and both default to showing you.
- All four group frame families gained Sort By and Sort Direction: by group, by role, by class, or by name. Nothing was configurable before.
- Role sorting on the Raid (25) and Raid (40) frames now actually works. Those frames have shipped with role sorting turned on for years and have been quietly ignoring it, because the setting named the main tank flag rather than the tank/healer/damage role, so nothing ever matched and the roster stayed in join order. These frames will visibly reorder the next time you are in a raid: tanks, then healers, then damage. Set Sort By to Group if you want the old order back.
Access
/azerite-> Unit Frames -> Party Frames -> Show player in party / Show player in raid/azerite-> Unit Frames -> Raid Frames (5) -> Show player in party / Show player in raid/azerite-> Unit Frames -> Party Frames, Raid Frames (5), (25) and (40) -> Sort By / Sort Direction
Internal
- New
Components/UnitFrames/GroupSorting.luaowns the four modes for both mechanisms. Real headers getgroupBy/groupingOrder/sortMethod/sortDirattributes; the driver fed Raid (5) frames get an ordered token list instead, since none of those attributes reach them. ROLEis the main tank / main assist flag inSecureGroupHeaders.lua;ASSIGNEDROLEis TANK / HEALER / DAMAGER. Raid (25) and (40) paired the former with aTANK,HEALER,DAMAGERorder, so every unit fell through to the nil-order branch and sorted by raid index. ElvUI spells the same modeASSIGNEDROLE.- The party header's name list branch ignores
groupByentirely, so hiding yourself in a raid would have silently dropped the sort with it. The list is now built in sorted order and read back withsortMethod = "NAMELIST". showPlayersplits intoshowPlayerInParty/showPlayerInRaidin place on first read, rather than throughSETTINGS_VERSION, which resets every profile wholesale.- Both header families now refresh on
PLAYER_ROLES_ASSIGNED. Blizzard re-sorts a group header on roster and name events only, so a plain role change left a role sorted header stale.
5.3.89-JuNNeZ (2026-08-24) - Hiding Your Own Frame in Raid Sized Groups
Highlights
- The party frames' Show player toggle now works in raid groups as well. It only ever applied while you were in an actual party, so in the raid sizes you can set the party frames to appear in - arenas and battlegrounds included, since those put you in a raid group - your own frame came back no matter what the setting said. Blizzard's group header only consults that setting on party units, so the frames now pick their members by name in a raid instead.
- The 1-5 raid frames gained the same toggle, which they never had. Turn it off and those frames carry the rest of your group without you, which is what you want in arena when your own frame is already the big health orb: two teammates to heal, and nothing else in the way.
- Both toggles follow the group as it changes. Joining, leaving, or being moved between raid subgroups rebuilds the frames, and anything that lands mid-fight is applied the moment you drop out of combat.
Access
/azerite-> Unit Frames -> Party Frames -> Show player/azerite-> Unit Frames -> Raid Frames (5) -> Show player (new, on by default, so nothing changes unless you turn it off)
Internal
showPlayeris a party-only attribute inSecureGroupHeaders.lua:GetGroupHeaderTypereads it only on the PARTY branch, while the RAID branch walksraid1toraid<N>with no way to drop a single unit.Party.luanow routes bothgroupFilterandnameListthrough one helper and, in a raid with the option off, clears the filter and hands the header its own subgroup minus the player. The name list branch is unreachable while any group or role filter is set, so the two attributes have to move together.- The 5 player frames are not a secure group header at all - five oUF frames on a
SecureHandlerStateTemplate, each driven by its own unit attribute driver on a fixedraid1-raid5token.GetRaidUnitIndexesnow builds those tokens and skips the player's own index, leaving the empty slots last so the visible frames stay flush against the anchor. Party tokens are left alone; they never included the player to begin with. RaidFrame5Mod.OnEventcalledUpdateHeaderonPLAYER_REGEN_ENABLED, which never touches the unit drivers, so a driver rebuild deferred out of combat was dropped. It callsUpdatenow.
5.3.88-JuNNeZ (2026-08-22) - Ability Pings, Resource Callouts, and the Pet Bar Ping Error
Highlights
- Pinging an ability on your action bars now works. It announces the spell or item along with its cooldown and whether you can afford it, the same callout Blizzard's own bars give. This had never worked on any AzeriteUI bar: the buttons claimed to be ping receivers but reported no action underneath, so the ping system quietly decided there was nothing to announce.
- Pinging your own unit frame now calls out your health and mana instead of only flagging where you are standing. This is the resource callout Blizzard puts on the player frame; every AzeriteUI frame was being treated as an ordinary unit frame, which has no notion of your own resources.
- Fixed an error from the pet bar that broke Blizzard's ability ping system. Pinging anywhere over the pet bar raised a Lua error and left pinging broken everywhere else on screen until reload. This is the same defect fixed on the stance bar in 5.3.87, which the pet bar shared and which the stance bar fix did not reach.
- Pings aimed past an empty slot on an action bar now reach the world instead of dying on the button. Empty buttons had been holding on to their ping receiver status rather than stepping aside as Blizzard's do.
- Holding the ping key over your own unit frame no longer opens the ping wheel, and gives you the health and mana callout instead. Blizzard offers the wheel only over the player portrait and the callout everywhere else on that frame; our player frame is all orb and crystal with no portrait, so the callout is the whole frame. The wheel is unchanged everywhere else, including over the world, your target, and other players' frames.
Internal
LibActionButton-1.0-GEgainsGetActionButtonInfoon the generic, action, spell, item and toy prototypes, and clears the inheritedBaseActionButtonInfoMixinstub off each button at creation the way it already clearedHasAction. The stub returns nil, andPingableType_ActionButtonMixin:GetIsPingablereads a nil result as "not pingable", so every button on every bar was unpingable while looking correctly configured. Bumped to minor 76.- The library's secure
UpdateStatesnippet now maintains theping-receiverattribute, replicatingPingableType_ActionButtonMixin:UpdatePingAttributes.PingableActionButtonTemplatehardcodes the attribute on and Blizzard clears it again for empty slots; we inherited the attribute but not the upkeep. It is done inside the restricted environment because it has to stay correct through combat. PetButton.Createsetsbutton.index, whichPetActionButtonMixin:GetActionButtonInforeads. See the matching note onStanceButton.lua.- The player frame overrides
GetTargetInfoto passisPlayerResource, andGetAllowRadialWheelto suppress the wheel, matchingPingableType_PlayerUnitFrameMixin. Blizzard gates both on the cursor being off the portrait; our player frame has no portrait, so the health orb and power crystal are the whole frame. - Removed the target frame's
GetContextualPingType/GetTargetPingGUIDpair. Both were dropped fromPingableTypeMixinwhen the ping system moved toGetTargetInfo, so nothing called them, and the bare mixin they sat on returns a target with no guid. All the frame did was park a second, guid-less ping receiver over a target frame that oUF already spawns fromPingableUnitFrameTemplate.
5.3.87-JuNNeZ (2026-08-21) - Target Castbar Fill, Raid Specialization Icons, and Fewer Stray Clicks
Highlights
- The target castbar now fills instead of stretching. The art was being scaled into the fill region rather than revealed by it, so a cast looked like a zooming picture rather than a filling bar. This had been wrong since 12.0 for every target except yourself.
- The target castbar now also fills in the same direction as the target health bar it sits on. It previously swept left-to-right while the health bar underneath emptied right-to-left.
- Added specialization icons to the raid frames. On Raid Frames (5) they replace the portrait, as in party; on Raid Frames (25) and (40) they sit on the role badge next to the health bar, which also gives damage dealers a badge where they previously had none.
- Fixed Explorer Mode getting stuck visible and never fading again until a reload. Mounting and dismounting - including the automatic dismount from casting while mounted - could leave the interface believing you were still on a skyriding mount.
- Added an option to hide an action bar while you are mounted. A hidden bar cannot be clicked at all, so this stops stray clicks landing on abilities while you ride. Your skyriding bar is unaffected.
- Added an option to ignore clicks on faded out buttons. Faded buttons are invisible but still live, so clicking where one sits will cast it; with this on the click is ignored until you hover the bar and the buttons come back into view.
- Fixed an error from AzeriteUI's stance bar buttons that broke Blizzard's ability ping system. Pinging anywhere over the stance bar raised a Lua error and left pinging broken everywhere else on screen until reload.
Access
/az -> Unit Frame Settings -> Raid Frames (5) -> Show Specialization Icons/az -> Unit Frame Settings -> Raid Frames (25) -> Show Specialization Icons/az -> Unit Frame Settings -> Raid Frames (40) -> Show Specialization Icons/az -> Action Bars -> Action Bar <n> -> Show while mounted/az -> Action Bars -> Action Bar <n> -> Ignore clicks while faded
Internal
- The target castbar's visible art is now an addon-owned texture anchored to the statusbar texture, rather than the statusbar texture itself. A timer-driven
StatusBaron 12.x resizes its texture's region but does not narrow its texcoords, and texcoords written onto it by an addon do not survive, so neither letting it crop itself nor cropping it in place could ever work. The target health bar had always used the addon-owned structure, which is why health rendered correctly and cast did not. /azdebugtargetgainscast,cropandmirrorsubcommands for comparing castbar render paths live, andstatusnow reads the fill direction back off both bars and states whether they agree.- Specialization icon drawing for party and all three raid layouts is shared in
Components/UnitFrames/SpecIcons.lua.GroupSpecCache.luastays a pure data module.
5.3.86-JuNNeZ (2026-08-21) - Micro Menu Toggle, Party Specialization Icons, and an Options Overhaul
Highlights
- Added a toggle that brings Blizzard's own micro menu back along the bottom of the screen, at
/az -> Action Bars -> Micro Menu. The AzeriteUI cog wheel in the bottom right corner now has its own toggle in the same place, and the two are independent, so you can run either or both. - Added an option to show each party member's specialization icon in place of their portrait, at
/az -> Unit Frame Settings -> Party -> Show Specialization Icons. - Fixed AzeriteUI calling protected mouse methods on Blizzard's hidden action buttons during combat, which could raise
ADDON_ACTION_BLOCKEDwhenever Blizzard touched their mouse state mid-fight. - Added
/azdebug taint, which names the addon responsible for tainting Blizzard's action, pet and stance buttons. - Party specialization icons now resolve within a couple of seconds instead of up to six, and keep resolving during combat. Rejoining a group you were in earlier draws its icons immediately.
- Every Explorer Mode option now has a tooltip. The four delay sliders previously gave no indication that their numbers were seconds, and the exit conditions and element toggles had no explanation at all.
- Auras with no timer, such as Devotion Aura and the bonus event buffs, now show a full duration bar in the movable top-right aura header instead of an empty trough.
- Fixed an
AzeriteUI tried to call the protected function 'Frame:SetScale()'error when opening/lockduring combat. Moving the player aura row or the secondary mana crystal while in combat now waits for the fight to end and then applies the position, instead of being blocked outright.
Internal
- Replaced roughly 440 bare
pcallguards across 27 files withAPI.SafeCall/API.TryCallfrom the newCore/API/ProtectedCall.lua.SafeCallroutes a failed guarded call to the standard error handler so BugSack, BugGrabber, or Blizzard's error frame reports it with a call-site label, bursting three times per site and then throttling to one report per 60 seconds.TryCallremains silent and is reserved for guards whose failure is expected. Nothing in the addon should swallow an error without either fixing it or naming it. - Consolidated the secret-value accessibility check into
API.CanAccess, withAPI.IsSafeNumber,API.IsSafeStringandAPI.IsSafeBoolwrappers inCore/API/SecretValues.lua. It replaces three private copies -CanAccessValueinComponents/UnitFrames/Functions.lua,CanAccessTargetValueinUnits/Target.luaandIsArenaValueAccessibleinUnits/Arena.lua- which had drifted apart: the arena copy returned true when both probe globals were absent while the target copy returned true when onlyissecretvaluewas absent, so arena and target frames could disagree about the same value. The shared check never consultscanaccessvalue. - Repaired the locale files. Ten strings that appear in the live interface had never been added to
enUS, so they could not be translated in any language: the/lockhelp text, the movable-frame position and validation strings, theVehicle SeatandWidgetsanchor names, the tooltipIDlabel, and the player power color description, which had been reworded for the class-color option in5.3.74without the locale key following. Two entries had been destroyed by a bad global replace, collapsing pairs of real keys intoEnable Aura SoClass Powerr KeyinptBRand a spliced action-bar/clock string inzhTW. Twenty-eight further translations were missing and falling back to English, mostly the Mana Orb and Demon Hunter Soul Fragment options, withzhTWalso missing its Edit Mode and aura keys. All ten locales now carry everyenUSkey exactly once. disableMouseInputinHideBlizzard.luanow defers to the combat drop when the target frame is protected and combat is active, with a weak-keyed pending set flushed onPLAYER_REGEN_ENABLED. It runs as ahooksecurefunchandler, so Blizzard changing mouse state on a protected action button in combat previously took us straight into a blocked protected call.GroupSpecCachenow advances the moment a reply arrives rather than on a fixed 1.5 second tick, with 0.5 seconds kept only as a floor between consecutive requests. It also drops the combat gate, sinceNotifyInspectis unprotected and gating on combat meant a group that zoned in and pulled could go a long time before anything resolved.INSPECT_READYis no longer filtered on our own pending request, so inspects triggered by other addons are harvested for free.- Fixed a stall in
GroupSpecCache:INSPECT_READYis not guaranteed to arrive, and a dropped reply left the pending slot occupied permanently, halting every later lookup for the rest of the session. Pending requests now expire after three seconds. - Members who leave a group keep their cached specialization, marked stale, so a rejoin draws instantly and re-inspects in the background instead of starting from portraits again.
- Localized the group frame reload prompt in
Core/FixBlizzardBugs.lua, which had shipped as hardcoded English including its button label while every other user-facing string went throughAceLocale. - Moved the new
Micro Menugroup to order 50 so it sits with the page-level Action Bars settings instead of after the stance bar. - Fixed a duplicated
orderin the numbered action bar options, wherefadeAloneandfadeInCombatboth sat at 10 so their on-screen positions were settled by an alphabetical tiebreak instead of by intent. They now read 10 and 11, matching the pet and stance bar generator they had drifted from. MicroMenugained a settings namespace, and the Blizzard micro menu frames moved out ofHIDDEN_FRAME_NAMESinto their own list so the quarantine can be skipped. The AzeriteUI popup is unaffected either way: its entries are proxies running/click <MicroButtonName>, not reparented Blizzard buttons.- Added
Components/UnitFrames/GroupSpecCache.lua, a throttled inspect-backed specialization cache. There is no API that reports a group member's specialization, so it drivesNotifyInspectandINSPECT_READYone unit at a time, skips units that are disconnected, out of range or not inspectable, retries failures no more than once every fifteen seconds, and drops members who leave. It stays dormant until an option asks for it. Core/Compatibility.luanow adoptsns.APIat file scope, because the TOC loads it ahead ofCore.xml.- The top-right aura header's duration bar is now drawn inverted: a full-width aura-colored layer with an opaque dark spent layer growing over it from the right, bound with
Enum.StatusBarTimerDirection.ElapsedTimeandSetReverseFill(true). Blizzard'sApplyDurationBarpasses permanent auras a zero duration with no zero check, unlike theApplyDurationTextpath beside it, and addons have no per-aura way to tell a permanent aura apart. Inverting the layers makes elapsed zero render as a full bar, leaving timed auras looking the same as before.
Not yet released or verified in client. Expect this change to surface previously silent failures rather than hide them.
5.3.85-JuNNeZ (2026-08-20) - Group Frames in Arena, Reload Prompt, and the Blizzard Party Title
Highlights
- Group frames now actually appear in Arena, Solo Shuffle and Skirmish. The 5 player frames were taking their group filter from Blizzard's raid manager, which does not exist in instanced PvP and reports "no groups shown" there, so the frames were both hidden and faded out no matter what your settings said.
- The reload prompt no longer greets you at every login. It was firing whenever a group frame module was switched off in your profile, including the settings pass that runs at login, so a permanently disabled module asked every session. It now appears only when you turn the frames off during the session, which is the case where Blizzard's own frames really are left stranded.
- Blizzard's leftover "Party" title no longer floats over the screen when you use the Raid (1-5) frames with the Party frames turned off. Blizzard's party frames were only being hidden when the Party module itself was enabled.
- Fixed the remaining
Cannot set tex coords when texture has maskerror from arena enemy frames. The previous guard asked the texture whether it was masked, and Retail 12.1 does not answer that reliably.
Access
- Group frame visibility:
/az -> Unit Frame Settings -> RaidorParty, then theVisibilitytoggles. - Blizzard group frame fallback:
/az -> Unit Frame Settings -> PartyorRaid, turn the Azerite frames off, then accept the reload prompt. - Group frame diagnostics:
/azdebug group.
Internal
Raid5no longer consultsWoW12BlizzardQuarantine.GetRaidGroupFilter. That filter describes which subgroups of a 10-40 player raid the compact frames draw, and it returns"0"whenever the raid manager is unavailable, which both wrotegroupFilter = "0"onto the header and turned the driver's[@raid1,exists]clause intohide. The 5 player header now always uses"1,2,3,4,5,6,7,8", andIsRaidGroupShownis gone.ApplyAzeriteRaidGroupVisibilityno longer mirrors the raid manager's hidden mode ontoRaidFrame5, which was setting its alpha to zero in the same contexts.RaidFrame25andRaidFrame40still follow it.ShouldHandlePartyFramesnow returns true when eitherPartyFramesorRaidFrame5is enabled, so the party quarantine coversPartyFrame,CompactPartyFrameand their titles in a Raid5-only setup.- The reload prompt in each group module's
UpdateSettingsnow comparesprofile.enabledagainst a per-module__blizzardFrameHandoverStateand only fires on an enabled to disabled transition. SetSpecIconTexturetrusts anazeriteHasMaskflag written whereSetMaskis called instead ofGetNumMaskTextures(), withpcallaround the fallbackSetTexCoord.
5.3.84-JuNNeZ (2026-08-19) - Group Frames in Instanced PvP
Highlights
- Party frames now appear in Skirmish Arena and other instanced PvP. The group frames decided whether you were grouped using a group-state condition rather than checking whether your party members actually exist, and that distinction matters in an instance group where you have no home party at all. All four group frame families now test for the party and raid units directly, the way the frames already tested for raid sizes.
- Group frames recover after zoning straight into combat. Blizzard's secure group header can only lay its unit buttons out while you are out of combat, and nothing on Blizzard's side retries once combat drops. Party and raid headers now rebuild themselves when you zone in and again whenever you leave combat.
- Fixed the
Cannot set tex coords when texture has maskerror thrown repeatedly by arena enemy frames. The specialization icon is drawn through a circular mask, and Retail 12.1 rejects tex coordinate changes on a masked texture. - Raid (11-25) and Raid (26-40) unit frames now receive their intended frame layering again. Both headers were being created without any of their startup configuration, which left every unit button ten frame levels lower than designed.
- Holding the modifier key now reveals the top-right aura header even when you have a target selected. The target check previously ran first, so the key could not reveal anything for as long as something was targeted.
- Turning the Azerite party or raid frames off now offers to reload. Blizzard's own group frames cannot be revived mid-session once they have been replaced, and a reload is what brings them back.
Access
- Group sizes:
/az -> Unit Frame Settings -> PartyorRaid, then theVisibilitytoggles. - Blizzard group frame fallback:
/az -> Unit Frame Settings -> PartyorRaid, turn the Azerite frames off, then accept the reload prompt. - Aura header modifier:
/az -> Aura Header Settings -> Only Show With Modifier Key.Keep Visible While Targetingis greyed out while that mode is on, because the modifier now overrides it.
Internal
- Group visibility drivers moved from
[group:party,nogroup:raid]and[group:raid]to[@party1,exists]and[@raid1,exists], with the raid sizes tested ahead of the party check because a raid subgroup also answers to theparty1-4tokens. This matches how ElvUI and GW2_UI drive their own group headers. - Added
GroupHeader.ForceSecureUpdate, which bumps a private attribute to fireOnAttributeChangedand rerunSecureGroupHeader_Update. It is applied at the end of everyUpdateHeaderand on every combat drop, and is a no-op on headers that are not real secure group headers. PartyFramesnow registersPLAYER_ENTERING_WORLDand keepsPLAYER_REGEN_ENABLEDregistered; the raid modules no longer unregister theirs after the first recovery.- Fixed a stale
oUF:SpawnHeadercall shape inRaid25andRaid40. The bundled oUF no longer takes the old thirdvisibilityparameter, and its attribute loop exits on the first nil name, so the leftover argument was discarding every spawn attribute. - Added
/azdebug group, which reports instance type, combat state, group category, roster counts, each header's live driver result viaSecureCmdOptionParse, and every child button with its assigned unit.
5.3.83-JuNNeZ (2026-08-18) - Target Auras in Combat, Class Power Layering, and Group Frame Fixes
Highlights
- Target frame buffs and debuffs now display during combat on Retail 12.1. The target aura row was still reading aura data through the old scanning path, which Retail 12.1 no longer supplies to addons while in combat; it now uses the same Blizzard-owned aura display the player rows already use.
- The Class Power bar no longer disappears behind the player frame when dragged over the Mana Orb. It now stays above every player frame layer, matching how it already behaved over the Power Crystal.
- Removed the invisible clickable area left by the Class Power frame. Clicking an empty Class Power region no longer targets you.
- Top-right aura headers set to mouse-over now reliably come back. They could previously stay invisible for the rest of the session while still showing tooltips, after a reload or zone change with the cursor over them.
- Azerite raid frames now appear in Skirmish Arena. Zoning straight into combat previously left the group frames hidden for the entire match.
- Turning Azerite raid frames off now leaves Blizzard's raid frames working, instead of leaving you with no group frame at all.
- Fixed two Lua errors on nameplate auras in combat that could stop aura updates for the rest of the session.
- Party, raid, and arena auras gained during combat can now appear, instead of only ones carried in from before the pull.
Access
- Class Power position: run
/lock, then dragClass Power. - Blizzard raid frame fallback:
/az -> Unit Frame Settings -> Raid, turn the Azerite raid frames off, then/reload.
Internal
- Target auras migrated to
AuraContainervia a new single-unitns.PlayerAuraContainers.CreateForUnit; the oUF scanning element stays as the fallback when the native template is unavailable. - Secret-value handling reworked in the embedded oUF aura element: surrogate keys for secret
auraInstanceID, non-secret sort ranks, up-front cache initialization, andissecrettableadopted for wholly-secret payload guards. - Aura filters now fail open when a payload cannot be judged, rather than silently hiding it.
- Added
/azdebug aurasnapshot target.
5.3.82-JuNNeZ (2026-08-16) - Secondary Mana Crystal and Options Fixes
Highlights
- Fixed the small secondary Mana crystal on Retail 12.1 so it can display protected Mana values for Balance Druids, Shadow Priests, and Elemental Shamans while a non-Mana primary resource is active.
- Added an independent mover for the secondary Mana crystal. Its position now persists separately instead of following the main player crystal.
- Fixed
/azpages appearing empty when another addon loaded an outdated shared AceGUI checkbox widget.
Access
- Run
/lock, then dragPlayer Secondary Mana Crystalto place the small crystal independently.
5.3.81-JuNNeZ (2026-08-15) - Power Displays, Bartender Compatibility, and Cooldown Numbers
Highlights
- Player Power Style
Automatic (By Resource)now selects the Mana Orb for Mana and the Power Crystal for Insanity and other primary resources, with corrected resource colors for Shadow Priests and other classes. - Added a small secondary Mana crystal at the player crystal's bottom-left. It appears while a non-Mana primary resource is active and Mana is below full, then hides again at full Mana.
- Fixed target Power Crystal colors and Short Number, Full Number, Percent, and Short + Percent text so they follow the target's actual resource on Retail 12.1.
- Restored numeric cooldown timers on AzeriteUI action buttons while preserving the existing cooldown sweep and charge behavior.
- Restored complete Bartender4 coexistence: Bartender keeps ownership of its action, pet, stance, bag, micro-menu, vehicle, extra-action, status, queue, configuration, and binding systems without AzeriteUI hiding or reparenting them.
Access
- Player resource routing:
/az -> Unit Frame Settings -> Player -> Player Power Style -> Automatic (By Resource). - Target resource text:
/az -> Unit Frame Settings -> Target -> Power Text Style. - Bartender4 requires no AzeriteUI profile reset; enable both addons and configure its bars through
/btas usual.
5.3.80-JuNNeZ (2026-08-14) - Player Aura Controls and Arena Visibility
Highlights
- Restored the player-frame aura customization that remains possible on Retail 12.1: maintained important buffs, boss/role buffs, stealable buffs, personal and player/pet buffs, nameplate-highlighted buffs, other temporary buffs, and optional long or permanent utility buffs.
- Added working controls for full-brightness aura icons and the maximum original duration of temporary buffs, while retaining debuff-only, mixed-debuff, aura-count, and separate-debuff-row controls.
- Custom player-aura filters now use Blizzard's native combat-safe aura groups, so the selected categories continue to work during combat and in vehicle state without inspecting protected aura data.
- Fixed arena-opponent portraits with a reliable 2D fallback, restored class-colored health when ordinary unit data is unavailable, and replaced misleading question-mark badges with specialization or class icons when Retail exposes either value.
- Added an option to keep full class-power displays visible out of combat, including fully recharged Death Knight runes.
- Fixed Retail 12.1 status-ring hover errors that could leave the experience or reputation ring covering the minimap.
- Added native translations for the restored player-aura controls and full class-power option in every supported locale.
Access
- Open
/az -> Unit Frame Settings -> Player -> Player Aura Row. - Disable
Use AzeriteUI Stock Behaviorto configure individual buff categories. Stock behavior, debuff controls, brightness, and display-count controls remain available directly in the same section. - Open
/az -> Unit Frame Settings -> Class Powerand enableShow Full Class Power Out of Combatto keep a capped resource visible between fights.
Known Limitation
- AzeriteUI now makes a best-effort attempt to recover Training Grounds specialization icons from readable unit-tooltip text when Blizzard's normal arena specialization API returns nothing. Retail 12.1 can also protect that tooltip text; in that case AzeriteUI displays the opponent's class icon when available and otherwise hides the badge instead of showing a misleading question mark.
5.3.79-JuNNeZ (2026-08-13) - Target PvP Secret-Value Hotfix
Highlights
- Fixed a Retail 12.1 error that could occur while selecting or clearing targets whose PvP state was protected by Blizzard's secret-value system.
- Target faction badges now hide safely when their source data is inaccessible, while preserving the existing badge behavior for normal, PvP, free-for-all, mercenary, elite, rare, and boss targets.
5.3.78-JuNNeZ (2026-08-13) - Retail 12.1 Native Aura and Input Hardening
Highlights
- Rebuilt player-frame auras on Blizzard's Retail 12.1 native aura containers so combat buffs, harmful effects, vehicle auras, tooltips, and right-click cancellation remain available without secret-value or taint failures.
- Restored the intended AzeriteUI player-aura behavior: important and short temporary effects are prioritized, generic effects remain subdued, buff/debuff capacity is shared, and aura buttons no longer lose mouse input to the player or target frame.
- Modernized the movable top-right aura header with native secure containers, a dark remaining-time bar, and the original centered red warning during the final 10 seconds.
- Fixed AzeriteUI action-button input and state refreshes while safely suppressing invisible Blizzard action buttons; cooldowns, charges, item counts, pet/stance bindings, and Bartender handoff now use current Retail paths.
- Kept stock action-bar furniture hidden after Blizzard load transitions, including the backpack and bag controls, while restoring the Looking for Group queue eye to its AzeriteUI minimap position.
- Hardened unit-frame health, power, nameplate, private-aura, raid-warning, and boss-emote updates for Retail 12.1 secret values and load-on-demand frames.
Access
- Player-frame aura controls:
/az -> Unit Frame Settings -> Player -> Auras. - Movable top-right aura controls:
/az -> Auras. - Existing
/az -> Action Barsand/az -> Minimapsettings continue to apply; no profile reset is required.
Internal
- Player and standalone auras now use
Blizzard_AuraContainertemplates and native duration bindings; the retired Retail secure-header/manual scanner paths were removed. - Blizzard action bars are quarantined with alpha and mouse-input suppression instead of event removal, reparenting, or secure method replacement.
- LibActionButton and oUF Retail paths now avoid branching, indexing, or arithmetic on secret values and prefer current duration/charge APIs.
- Raid warning, raid boss emote, queue status, and aura-container setup now follow their Retail load-on-demand owners.
5.3.77-JuNNeZ (2026-08-12) - WoW 12.1 Aura and Action Bar Fixes
Highlights
- Fixed action bars missing cooldown swipes, timer text, charges, and item counts after WoW 12.1.
- Restored the standalone player aura frame on Retail 12.1 by replacing the retired secure aura-header path with a manual fallback.
- Fixed Retail 12.1 aura startup so the frame populates after
/reload.
Access
- Existing
/az -> Aurasand/az -> Action Barssettings continue to apply.
Internal
- Updated LibActionButton cooldown/count handling for Retail duration objects and charge data.
- Added the initial Retail fallback in
Components/Auras; it is superseded by the native-container implementation in 5.3.78.
5.3.76-JuNNeZ (2026-07-17) - Action Bar Skyriding and Layout Reliability
Highlights
- Fixed Druid flight mode and travel form with skyriding enabled not switching bar 1 to the skyriding action bar.
- Fixed temporary bar-1 states so keyboard binds stay aligned with the displayed actions during possess, vehicle, override, and skyriding transitions.
- Fixed zigzag and grid action-bar layouts using unstable button iteration, which could leave button positions or refreshes inconsistent after reloads and settings updates.
- Added retail WoW 12.0.7 interface support (
120007).
Access
- No new setting is required. Existing
/az -> Action Barssettings continue to apply.
Internal
Components/ActionBars/Prototypes/ActionBar.lua: bar 1 now treats skyriding asbonusbar:5without requiringmounted, and uses the secure click-route consistently for dynamic primary-bar paging states.Components/ActionBars/Elements/ActionBars.lua: dragon/skyriding visual-state checks now followbonusbar:5, and button-count refreshes iterate deterministically.Components/ActionBars/Prototypes/ButtonBar.lua: zigzag and grid layouts now iterate buttons in numeric order so order-dependent offsets stay stable.
5.3.75-JuNNeZ (2026-05-03) - Dragonflying Relog Keybind Recovery
Highlights
- Fixed a dragonflying relog edge case where logging out mounted with the dragon bar visible could leave action-bar keybinds non-responsive after login while mouse clicks still worked.
- Action-bar keybind routing now performs a short follow-up refresh after state transitions so late login/mount state cleanup does not leave stale binding routes.
Access
- No new setting is required. Existing
/az -> Action Barssettings continue to apply.
Internal
Components/ActionBars/Elements/ActionBars.lua: added a guarded deferred binding-refresh pass after standard binding rebuilds to recover from late post-login action-bar state settlement.
5.3.74-JuNNeZ (2026-05-03) - Player Crystal Class Color + Windwalker 6-Chi
Highlights
- Added a new
Class Colorsource for the player Power Crystal / Mana Orb under/az -> Unit Frame Settings -> Player -> Crystal/Orb Color Source. - Preserved saved-variable compatibility for legacy
classcolor-mode values. - Fixed Windwalker Monk Chi display to support 6 Chi points while still showing 5 points when max Chi is 5.
- Updated the 6-Chi visual layout to use a curved progression with the larger unique point at index 6 for clearer read order.
Access
- Crystal/Orb color source:
/az -> Unit Frame Settings -> Player -> Crystal/Orb Color Source. - No new setting is required for Monk Chi; the 6-point behavior applies automatically when your live max Chi is 6.
Internal
Components/UnitFrames/Units/Player.lua: added a dedicatedclassColormode for player power colors and mapped legacyclassvalues to it.Options/OptionsPages/UnitFrames.lua: addedClass Colorto the player Crystal/Orb color-source dropdown.Components/UnitFrames/Units/PlayerClassPower.lua: keeps MonkCHIon theChistyle for max 5 or 6 before genericmax >= 6style routing.Layouts/Data/PlayerClassPower.lua: extendsChito 6 points and applies the curved point ordering/style tuning.
5.3.73-JuNNeZ (2026-05-01) - Party/Raid Right-Click Menu Fix
Highlights
- Fixed right-clicking party and group unit frames not opening the unit interaction menu (invite, inspect, set focus, trade, etc.) in parties and follower dungeons.
- Fixed the same issue in 10-man and 40-man raids. 5-man raids were already working correctly.
- No settings change required. Works after
/reload.
Known Limitation
- Right-clicking a story-mode companion (AI-controlled party member in story-mode raids/dungeons) still only opens a menu if that companion is already your current target. This is a Blizzard engine constraint, not an AzeriteUI bug — see Internal notes.
Internal
Root Cause
AzeriteUI's shared UnitFrame.InitializeUnitFrame deliberately skips RegisterForClicks for secure-group-header children (enforced by an IsSecureHeaderChild() guard). This is intentional — calling RegisterForClicks from insecure code on a protected header child is unsafe. Instead, each group-frame style function is responsible for calling self:RegisterForClicks("AnyUp") explicitly after InitializeUnitFrame.
Raid5.lua had this call. Party.lua, Raid25.lua, and Raid40.lua did not. Without click registration the button never dispatched any click events, so Blizzard's secure togglemenu action bound to *type2 never fired on right-click.
Previous Failed Attempts (from FixLog and research)
RegisterForClicksinside restrictedinitialConfigFunction(oUF snippet) — Failed withRestrictedExecution.lua:428: Call failed.RegisterForClicksis not available in Blizzard's restricted execution environment.- XML virtual template with
registerForClicks="AnyUp"— Producedbad argument #1 ... self:RegisterForClicks(buttons)at runtime. Live debug dumps already showedleftClick true rightClick true, confirming this was solving the wrong layer. - Force
*type2 = "menu"with a custommenu-function— Attributes applied but the menu never opened. Clique explicitly convertsmenuback totogglemenubecausemenuis hard-coded to mouse-up only and breaks with down-click registration. Referencingmenu-functionin restricted snippets also failed becausefunctionis a forbidden token in the restricted parser. PostClick/OnMouseUpfallback callingUnitPopup_OpenMenudirectly — Worked for opening the menu for story-mode companions by mapping non-playerraidNtokens toTARGET. However, selecting any protected item (raid markers, set focus) triggeredADDON_ACTION_FORBIDDENbecause the open was attributed to AzeriteUI. Patching this by wrappingUnitPopupRaidTargetButtonMixin.CanShowbroke Blizzard's normal target-frame raid-marker menu globally. Approach abandoned.
The Fix
Added self:RegisterForClicks("AnyUp") immediately after ns.UnitFrame.InitializeUnitFrame(self) in the style functions for Party.lua, Raid25.lua, and Raid40.lua. This is the same pattern already present in Raid5.lua and matches how DiabolicUI3 registers clicks globally in its shared style wrapper.
Story-Mode Companion Limitation
Blizzard's secure togglemenu action classifies the unit token to choose which popup to open. For raidN tokens it requires UnitIsPlayer(unit) == true. Story-mode companions are NPCs so UnitIsPlayer returns false. The only fallback Blizzard provides is UnitIsUnit(unit, "target") which maps to a TARGET menu — which is why targeting the companion first makes right-click work. Every oUF-based addon (live upstream oUF, DiabolicUI3, ElvUI, DiabolicUI2) hits this same wall. None have a story-mode NPC fallback. Resolution requires Blizzard to expose a secure API for opening unit menus on non-player group tokens.
Files Changed
Components/UnitFrames/Units/Party.lua— addedself:RegisterForClicks("AnyUp")Components/UnitFrames/Units/Raid25.lua— addedself:RegisterForClicks("AnyUp")Components/UnitFrames/Units/Raid40.lua— addedself:RegisterForClicks("AnyUp")
5.3.72-JuNNeZ (2026-05-01) - Target Portrait and Stealth Bar Fixes
Overall
- This release fixes two visible gameplay regressions: bar-1 keyboard binds now follow stealth/form bonus pages correctly, and hostile target portraits have safer fallback handling when WoW 12 refuses or delays the 3D model path inside instances.
Highlights
- Fixed rogue stealth and Shadow Dance keybinds so pressing bar-1 keys casts the same paged action shown on the button.
- Extended the same dynamic binding route to druid and monk bonus pages, keeping keyboard input aligned with secure action-bar paging.
- Improved target portraits for hostile instance targets by trying the normal 3D model path, then a creature-model fallback when safe, then the 2D portrait fallback.
- Fixed a WoW 12 secret-GUID portrait error by skipping NPC-ID parsing whenever Blizzard marks the target GUID as secret.
- Kept normal base-bar command bindings in place for hold-cast support outside dynamic paging states.
Access
- No new setting is required. Existing
/az -> Action Barsand target-frame settings continue to apply.
Internal
Components/ActionBars/Prototypes/ActionBar.lua: treats bar-1 bonus pages7-10as dynamic paging states so override keybinds use secure click routing while those pages are active.Components/UnitFrames/Units/Target.lua: adds protected target portrait model checks, a sibling 2D fallback frame, optional creature-ID fallback, and secret-value guards around GUID handling.
5.3.71-JuNNeZ (2026-04-27) - Party Frame and Action Bar Fixes
Overall
- This release cleans up two visible annoyances from the recent builds: party frames should keep working normally when groups refresh, and action bars you have turned off should stay off even during combat, mounts, vehicles, and fading updates.
Highlights
- Fixed party frames so right-clicking a party member opens the normal unit menu again.
- Fixed a party-frame setup error that could stop group frames from building correctly in WoW 12.0.5.
- Fixed disabled AzeriteUI action bars sometimes appearing during combat and staying visible until
/reload. - Disabled action bars now stay hidden through secure visibility refreshes.
- Explorer Mode and action-bar fading now ignore disabled action, pet, and stance bars instead of bringing them back into a fade cycle.
Access
- No new setting is required. Existing disabled action bars keep using your current
/az -> Action Barschoices.
Internal
Libs/oUF/ouf.lua: preserved the safe party unit-menu assignment path while removing the restricted-environment call that caused the5.3.70-JuNNeZhotfix.Components/ActionBars/Prototypes/Bar.lua: disabled bars now store their hidden intent in the secureuserhiddenattribute that the action-bar visibility snippet already checks.Components/ActionBars/Prototypes/ActionBar.lua: disabled action bars and their buttons are removed fromLibFadingFramesbefore fading updates return.Core/ExplorerMode.lua: Explorer Mode skips disabled action, pet, and stance bars when registering fading.
5.3.70-JuNNeZ (2026-04-26) - Party Frame Hotfix
Overall
- This hotfix removes a bad safety call from party/raid frame setup that could break group frame creation in WoW 12.0.5.
Highlights
- Fixed a
RestrictedExecution.luaerror when AzeriteUI party frames were shown or refreshed. - Restored the safe group-frame setup path used before
5.3.69-JuNNeZ.
Access
- No new setting is required. Reload UI after updating.
Internal
Libs/oUF/ouf.lua: removedRegisterForClicks()from the restricted secure group-header snippet because that method is not available in Blizzard's restricted execution environment.
5.3.69-JuNNeZ (2026-04-25) - Party Right-Click Menu Safety
Overall
- This update tightens party-frame click handling so right-clicking party members keeps opening the normal unit menu consistently.
Highlights
- Added an explicit click registration safety path for party and raid-style group unit buttons.
- This preserves the existing left-click targeting and right-click unit-menu behavior.
Access
- No new setting is required. Reload UI after updating.
Internal
Libs/oUF/ouf.lua: explicitly registers secure group-header unit buttons for mouse-up clicks where the right-click unit menu action is assigned.
5.3.68-JuNNeZ (2026-04-25) - Action Bar Safety + Nameplate Color Options
Overall
- This update focuses on two everyday pain points: hidden dragonriding bars should no longer catch stray clicks, and enemy nameplate threat colors are easier to tell apart from castbar interrupt colors. It also tightens action-button drag-lock handling so button locking behaves more consistently across normal action, pet, and stance buttons without changing the existing hold-to-cast route.
Highlights
- Added enemy nameplate threat color presets, including color-blind friendly choices and a darker AzeriteUI yellow option.
- Fixed invisible bars 2+ during dragonriding so they no longer catch accidental mouse clicks while hidden.
- Improved dragonriding bar visual refresh after action-page changes so hidden secondary bars recover more reliably.
- Made action, pet, and stance button drag-lock handling more consistent with the embedded action-button library.
- Kept the existing bar 1 hold-to-cast behavior unchanged.
Access
- Nameplate threat colors:
/az -> Nameplates -> Colors -> Enemy Threat Colors. - No new action bar setting is required. Reload UI after updating.
Internal
Components/UnitFrames/Units/NamePlates.lua,Options/OptionsPages/Nameplates.lua,Locale/enUS.lua: added the threat color preset profile option, selector, player-facing text, and preset color resolution.Components/ActionBars/Elements/ActionBars.lua: added dragonriding click blockers for visually hidden secondary bars and centralized dragon visual refresh.Components/ActionBars/Elements/PetBar.lua,Components/ActionBars/Elements/StanceBar.lua,Components/ActionBars/Prototypes/PetButton.lua,Libs/LibActionButton-1.0-GE/LibActionButton-1.0-GE.lua: normalized secure drag-lock attribute handling while preserving legacy compatibility.
5.3.67-JuNNeZ (2026-04-22) — WoW 12.0.5 Stability + Arena Frames
Overall
- This update focuses on things that could break silently or make troubleshooting harder in WoW 12.0.5. Arena enemy frames should show again when opponents appear, tooltips should stop tripping over protected unit information, BugSack exports should copy cleanly even when the current target is protected by Blizzard, and aura buttons should behave better in busy fights without losing their normal border look.
Highlights
- Fixed AzeriteUI arena enemy frames not appearing reliably after the last update.
- Fixed BugSack Copy Session exports failing when Blizzard marks the current target or captured error data as protected.
- Fixed tooltip unit handling so world-cursor and unit tooltips avoid protected unit-name reads in WoW 12.0.5.
- Reduced player aura update load in high-aura PvP situations, helping prevent
script ran too longerrors during heavy buff/debuff churn. - Restored normal-looking player, target, party, arena, and nameplate aura borders while avoiding the slower Blizzard backdrop path that could stall during aura creation.
Access
- No new settings required. Reload UI after updating.
- Arena frames use the existing AzeriteUI arena frame settings.
- BugSack users can keep using the Copy Session / Copy All buttons as before.
Internal
Components/UnitFrames/Units/Arena.lua: registers live arena opponent updates and uses secure arena-unit visibility checks while inside arena instances.Components/Misc/BugSack.lua: sanitizes secret values before export text is concatenated and avoids protected target identity reads.Components/Misc/Tooltips.lua: adds safer tooltip-unit discovery and skips custom unit-name rewriting when Blizzard marks identity as secret.Libs/oUF/elements/auras.lua: caches stable aura button state and avoids repeated unchanged cooldown, icon, count, mouse, and visibility writes.Components/UnitFrames/Auras/AuraStyling.lua: replaces per-auraSetBackdrop()border creation with texture-backed border pieces and keeps cached border/icon styling paths.
5.3.66-JuNNeZ (2026-04-18) — Raid Panel Sync + Player Debuff View
Overall
- This update makes AzeriteUI follow the raid panel more closely and gives players a simpler way to keep the player aura row focused on problems that need attention. If you hide raid groups with Blizzard's raid panel, AzeriteUI raid frames should now follow those choices instead of continuing to show filtered groups. If you prefer a cleaner player aura row, you can now show only harmful effects on yourself without building a custom aura filter.
Highlights
- Fixed AzeriteUI raid frames so Blizzard's raid panel group buttons can hide and show matching raid subgroups.
- Fixed the raid-panel eye / Hide Groups state so AzeriteUI raid frames can disappear with the Blizzard raid panel instead of staying visible.
- Improved filtered raid layouts so hidden raid groups are not re-added by AzeriteUI's manual raid-frame positioning pass.
- Added a player aura option to show debuffs only, keeping buffs out of the player aura row while preserving boss debuffs and blacklist behavior.
- Added localized option text for the new debuffs-only player aura setting.
Access
- Raid group hiding uses Blizzard's existing raid panel group buttons and Hide Groups eye button.
- The new aura option is under
/az -> Unit Frame Settings -> Player -> Show Auras -> Player Aura Row -> Show Debuffs Only.
Internal
Core/FixBlizzardBugs.lua: mirrors Blizzard raid-panel hidden/group-filter state into AzeriteUI raid headers, queues secure filter updates during combat, and refreshes after delayed Blizzard button-state changes.Components/UnitFrames/Units/Raid5.lua,Components/UnitFrames/Units/Raid25.lua,Components/UnitFrames/Units/Raid40.lua: consume the mirrored raid group filter and reject stale filtered child units during raid layout reflow.Components/UnitFrames/Auras/AuraFilters.lua,Components/UnitFrames/Units/Player.lua,Options/OptionsPages/UnitFrames.lua,Locale/*.lua: added the playerplayerAuraDebuffsOnlyprofile option, filter behavior, options UI, and locale strings.
5.3.65-JuNNeZ (2026-04-18) — Raid, Pet Bar, and Mounted Bar Recovery
Overall
- This update focuses on things that could disappear, squeeze together, or fail to recover at the wrong moment. Large raid groups should lay out more naturally, hunter pet abilities should appear when the pet UI becomes ready, dragonriding transitions should leave the extra bars in a more dependable visible state, and startup conflicts with AbilityTimeline should be quieter.
Highlights
- Fixed large raid frames so groups above 20 players are no longer capped or squeezed together by older saved layout values.
- Fixed sparse raid groups so later subgroups keep their own row or column instead of sliding into earlier groups when the raid roster has gaps.
- Fixed hunter pet ability bars not appearing reliably when pet action data arrives after the pet unit itself.
- Improved dragonriding and bonus-bar recovery so bars 2+ are refreshed again after late mount, combat, and bonus-bar state changes.
- Hardened startup/profile refresh handling when AbilityTimeline is enabled, reducing nil-anchor, class-power, and spell-glow crashes caused by shared library timing.
Access
- No new settings required. Reload UI after updating.
- Existing raid frame options remain under
/az -> Unit Frames -> Raid Frames (25)and/az -> Unit Frames -> Raid Frames (40).
Internal
Components/UnitFrames/Units/Raid25.lua,Components/UnitFrames/Units/Raid40.lua: large-raid capacity guards, secure child collection hardening, and subgroup-aware sparse roster layout.Components/ActionBars/Elements/PetBar.lua: registeredPET_UI_UPDATEand refreshed pet visibility/buttons when pet UI data changes.Components/ActionBars/Elements/ActionBars.lua: modern bonus-bar source preference plus delayed visual refresh for dragonriding/bonus-bar transitions.Core/MovableFrameModulePrototype.lua,Components/UnitFrames/Units/PlayerClassPower.lua,Libs/LibActionButton-1.0-GE/LibActionButton-1.0-GE.lua: defensive startup/profile guards for AbilityTimeline/shared-library timing.
5.3.64-JuNNeZ (2026-04-17) — Aura Reliability + Dragonriding Bar Recovery
Overall
- This update makes buffs, debuffs, and action bars recover more reliably during combat, reloads, and dragonriding transitions. Timers and stack counts should stay accurate, debuffs are easier to spot, and secondary action bars should no longer feel stuck after mounted combat changes.
Highlights
- Fixed player aura stack counts freezing at their pre-combat value when WoW 12 returned protected combat stack data.
- Fixed the separate player debuff row so active debuffs rebuild more reliably after
/reload, combat transitions, and short-lived aura update gaps. - Fixed top-right debuffs being displaced by wrapped buff rows, and added a red debuff border so harmful effects are easier to distinguish from buffs.
- Fixed top-right aura timer bars so they begin draining immediately, while timeless buffs no longer blink like expiring auras.
- Fixed dragonriding and arena/mounted transition handling so secondary action bars hide only visually during dragonriding and restore more reliably after dismounting, including combat transitions.
- Made overlapping action-bar keybinds deterministic: bar 1 now wins conflicts, which keeps dragonriding and primary action routing consistent.
Access
- No new settings required. Existing player aura options remain under
/az -> Unit Frames -> Player -> Display & Feedback. - Existing action bar behavior applies automatically after
/reload.
Internal
Components/Auras/Auras.lua: split top-right buff/debuff rows, debuff border coloring, timer visibility cleanup, and zero-duration aura handling.Components/UnitFrames/Units/Player.lua: detached player debuff visibility intent, reload bootstrap refresh, and safer combat-entry refresh behavior.Components/UnitFrames/Auras/AuraFilters.lua,Components/UnitFrames/Auras/AuraStyling.lua,Libs/oUF/elements/auras.lua: player aura/debuff filtering and stack display hardening for WoW 12 protected aura data.Core/Widgets/Cooldowns.lua: duration-object cooldown bars now use real duration ranges when safe fallback data is available.Components/ActionBars/Elements/ActionBars.lua,Components/ActionBars/Prototypes/ActionBar.lua: dragonriding secondary-bar visual recovery and deterministic primary-bar binding priority.
5.3.63-JuNNeZ (2026-04-16) — Action Bar Stability Follow-Up
Highlights
- Reverted the experimental per-bar post-combat hold-to-cast rebinding path that could cause intermittent action bar instability.
- Kept the core hold-to-cast and dragonriding slot-routing fixes from 5.3.62 intact.
Access
- No new settings required. Reload UI to apply this stability follow-up.
Known Limitation
- If you enter combat while mounted (dragonriding/vehicle-style state) and unmount during that same combat, hold-to-cast still cannot be restored mid-combat due to Blizzard secure restrictions. Hold-to-cast returns once combat ends.
Internal
Components/ActionBars/Prototypes/ActionBar.lua: rolled back deferred per-barPLAYER_REGEN_ENABLEDbinding refresh experiment and restored the prior combat guard path.
5.3.62-JuNNeZ (2026-04-16) — Hold-To-Cast + Dragonriding Routing
Highlights
- Restored press-and-hold casting support for Single-Button Assistant flows on AzeriteUI action bars by preferring Blizzard command-binding routing in normal bar states.
- Fixed dragonriding/vehicle transition routing so action keys use temporary mounted action slots instead of stale base-bar actions.
- Fixed a WoW 12
ADDON_ACTION_FORBIDDENregression tied to BlizzardForceUpdateAction()by disabling the taint-prone assisted-rotation template path on AzeriteUI custom action buttons while keeping assisted highlight support.
Access
- Action bar hold-cast route toggle:
/az -> Action Bar Settings -> Use Command Bindings for Hold Cast
Known Limitation
- If you enter combat while mounted (dragonriding/vehicle-style state) and unmount during that same combat, hold-to-cast cannot be restored mid-combat due to Blizzard secure restrictions. AzeriteUI now restores hold-to-cast automatically as soon as combat ends.
Internal
Components/ActionBars/Prototypes/ActionBar.lua: state-aware command/click routing, dynamic bar-state handling for dragon/vehicle/override paths, and deferred per-bar post-combat binding refresh.Libs/LibActionButton-1.0-GE/LibActionButton-1.0-GE.lua: removed assisted-rotation template usage on AzeriteUI custom action buttons to avoid protectedForceUpdateAction()taint.
5.3.61-JuNNeZ (2026-04-15) — Prediction Stability + Party Frame Hardening
Highlights
- Fixed a target-frame timeout path where absorb prediction could trigger
script ran too longduring rapid health-prediction updates. - Fixed a WoW 12.0.1 crash path on party and raid pet aura full refresh by adding a safe fallback when slot enumeration rejects compound unit tokens.
- Hardened party-frame quarantine timing so rare group-join races no longer show Blizzard party frames alongside AzeriteUI party frames.
Access
- No new settings required. Reload UI to apply all fixes.
Internal
Components/UnitFrames/Units/Target.lua: target absorb prediction now avoidsGetPredictedValues()in the hot path and relies on safer absorb sources.Libs/oUF/elements/auras.lua: full aura rebuild now uses guarded slot reads with bounded index fallback for unsupported compound tokens.Core/FixBlizzardBugs.lua: restored party-name quarantine during active party context and locked quarantine parent attachment for Blizzard party member frames.
5.3.60-JuNNeZ (2026-04-11) — Player Debuff Layer + Aura Controls
Highlights
- Added a new
Auras Shownslider for the main player aura row, with the default set to 16. - Added a new
Separate Player Debuff Rowoption that filters harmful auras out of the main player row and shows them in a separate movable debuff layer with its own cap. - The
Player Debuffs/lockmover now uses a stable holder surface, so the live debuffs can be repositioned visually and stay aligned inside the mover box. - Target aura layout refresh now reapplies correctly when unit-frame aura settings change.
- Fixed a WoW 12 secret-value safety edge case in the oUF health color path to avoid bad
GetRGB()payloads reaching health-bar updates.
Access
- Main player aura count:
/az -> Unit Frames -> Player -> Display & Feedback -> Auras Shown - Split player debuff layer:
/az -> Unit Frames -> Player -> Display & Feedback -> Separate Player Debuff Row - Separate debuff cap:
/az -> Unit Frames -> Player -> Display & Feedback -> Separate Debuffs Shown - Debuff mover:
/lock -> Player Debuffs
Internal
Components/UnitFrames/Units/Player.lua: added split player debuff holder/mover flow, independent player aura caps, and cleanup of abandoned split-buff leftovers.Components/UnitFrames/Auras/AuraFilters.lua: added a dedicated player debuff-row filter wrapper.Components/UnitFrames/UnitFrame.lua: sort-mode refresh now updatesAuras,Buffs, andDebuffs.Components/UnitFrames/Units/Target.lua: consolidated target aura container layout refresh path.Core/Common/Constants.lua: addon version now prefers live TOC metadata instead of a stale hardcoded constant.Libs/oUF/elements/health.lua: added secret-value guards around color extraction.
5.3.59-JuNNeZ (2026-04-07) — Lock & Load: Combat-Proof Action Bar Bindings
Highlights
- Action bar bindings no longer attempt to update during combat lockdown. Updates that arrive mid-combat are now queued and applied cleanly when you leave combat.
- Bindings now refresh correctly when entering or leaving vehicles, override bars, and bonus action bars — no more stale keybinds after a mount or vehicle transition.
- Added WoW interface build 120005 to the supported compatibility list.
Access
- No new settings. The fixes apply automatically on load and after every combat/vehicle transition.
Internal
Components/ActionBars/Elements/ActionBars.lua:UpdateBindingsnow guards withInCombatLockdown(), defers viaPLAYER_REGEN_ENABLED, and registersUPDATE_BONUS_ACTIONBAR,UPDATE_OVERRIDE_ACTIONBAR, andUPDATE_VEHICLE_ACTIONBARevents.AzeriteUI5_JuNNeZ_Edition.toc: added interface version120005.
5.3.58-JuNNeZ (2026-04-06) — Player Alternate Aura Toggle + Access
Highlights
- Fixed Player Alternate aura placement so turning off
Auras below framenow places the aura row above the frame instead of staying underneath. - Player Alternate settings are now available in normal mode; they are no longer locked behind development mode.
Access
/az -> Unit Frames -> Player Alternateis now visible without/devmodewhen the main Player frame is disabled.
Internal
Layouts/Data/PlayerUnitFrameAlternate.lua: correctedAurasPositionAlternateto a true above-frame anchor.Options/OptionsPages/UnitFrames.lua: removed devmode-only hide gate for Player Alternate options and kept mutually-exclusive visibility with the main Player frame.
5.3.57-JuNNeZ (2026-04-05) — Tooltip Authority & UI Compatibility
Highlights
- Compare-item tooltips no longer jump between positions while Shift-hovering items. AzeriteUI now delegates compare-tooltip placement fully to Blizzard's built-in comparison manager.
- Fixed chat compatibility with BigInputBox by automatically disabling AzeriteUI chat-frame modifications when BigInputBox is enabled, reducing protected chat-send conflicts.
- Blizzard player castbar is now hidden immediately on reload if already visible, removing the brief post-reload exposure.
- Party frame health percentage text is now centered inside the health bar and styled consistently with the health value text.
Access
- No new settings required. Reload UI to apply all changes.
Internal
Components/Misc/Tooltips.lua: removed addon-side compare-tooltip re-anchoring/layout pipeline and retained only modifier gating, suppression, and frame-level handling.Components/Misc/ChatFrames.lua: addedBigInputBoxto chat-conflict disable guards.Components/UnitFrames/Units/PlayerCastBar.lua: added immediateHide()during Blizzard castbar suppression when frame is currently shown.Layouts/Data/PartyUnitFrames.lua: added explicit health-percentage position/typography/color config for centered in-bar display.
5.3.56-JuNNeZ (2026-04-05) — Tooltip Stability & Party Frame Fixes
Highlights
- Compare tooltips for rings, trinkets, and dual-wield weapons no longer oscillate, jitter between wrap widths, or grow/shrink infinitely while hovered.
- Toy box buttons can be clicked directly again while their tooltip is shown.
- Fixed a WoW 12 secret-value taint crash that fired when Blizzard passed secret numeric dimensions into the compare tooltip size-change callback.
- Party frame health text now correctly shows current health value or percent for follower-dungeon AI party members, switching dynamically based on injury state.
- Party unit frames no longer generate
ADDON_ACTION_BLOCKEDerrors forSetSizeduring party roster and header updates. - Target aura refresh in battlegrounds no longer causes excessive per-frame work during rapid target swaps.
Access
- No new settings required. Reload UI to pick up all changes.
Internal
Components/Misc/Tooltips.lua: compare relayout cadence guard, size-snapshot guard, suppression window extension, sticky wrap-width hysteresis to stop near-threshold width oscillation, secret-number-safeOnSizeChangedsize tracking, dedup for repeated tooltip post-hook lines, mouse disabled on managed-tooltip backdrop.Components/Auras/Auras.lua: aura hover-tooltip dedup via deterministic cache key to reduce repeatSetUnitAura*churn.Components/UnitFrames/Auras/AuraStyling.lua: cached visual-state guards for target aura styling to skip redundant backdrop/icon updates on rapid target swaps.Components/UnitFrames/Units/Party.lua: removed insecureSetSizefrom secure-header style path; health display now uses dedicatedHealthCurrent/HealthPercenttexts with injury-state visibility toggle.
5.3.55-JuNNeZ (2026-04-03) — Compare Tooltip Deferred Hook
Highlights
- Fixed a race condition where compare tooltips that appeared after the initial item-hover pass would not have AzeriteUI relayout hooks attached, causing them to overlap the main tooltip.
- All four compare tooltip frames (
ShoppingTooltip1/2,ItemRefShoppingTooltip1/2) now receive relayout hooks at module startup and on every subsequent compare-show event, regardless of whether they are visible at that moment. - Added Wago Addons tracking ID to the addon metadata so the addon can be followed directly on Wago.
Access
- No new settings required. Hover equippable items in bags and item-links repeatedly to verify compare tooltips no longer collapse onto the same anchor.
Internal
Components/Misc/Tooltips.lua: splitOnCompareItemShowinto a hook-registration pass (all frames) followed by the frame-level adjustment pass (visible frames); added upfrontHookCompareTooltipLayoutUpdatescalls inSetHooks..github/workflows/release.yml: added optional WowInterface upload step (enabled byWOW_INTERFACE_TOKEN+WOW_INTERFACE_ADDON_IDsecrets).AzeriteUI5_JuNNeZ_Edition.toc: addedX-Wago-IDmetadata field.
5.3.54-JuNNeZ (2026-04-03) — Combined Fix
Highlights
- Fixed compare-item tooltip relayout edge cases by hardening compare stack anchoring and adding deferred relayout handling after size/show updates.
- Added stronger managed-tooltip filtering so dropdown/menu backdrops are excluded from AzeriteUI managed tooltip treatment.
- Hardened
LibActionButtoncooldown payload handling by sanitizing secret/unsafe cooldown, charge, and loss-of-control fields beforeActionButton_ApplyCooldown.
Access
- No new settings required. Tooltip compare behavior and action-button cooldown overlays update automatically.
Internal
Components/Misc/Tooltips.lua: compare-tooltip wrap-width + relayout queue improvements and safer managed-tooltip detection.Libs/LibActionButton-1.0-GE/LibActionButton-1.0-GE.lua: cooldown/charge/loss-of-control sanitization before Blizzard cooldown application path.
5.3.53-JuNNeZ (2026-04-03) — The Decursive Compability Anomaly
Highlights
- Fixed the WoW 12 compatibility path for Decursive so in-combat dispellable detection no longer degrades into false-positive non-dispellable classifications.
- Reworked legacy
UnitDebuffcombat sourcing to prefer Blizzard filtered aura query paths first, with guarded fallback behavior only when those APIs are unavailable. - Removed addon-side dispel-type coercion experiments from the final runtime path and kept a strict pass-through tuple contract with WoW 12 safety guards.
Access
- No new settings required. Reload UI and test Decursive dispel detection in combat (
/reload).
Internal
Core/Compatibility.lua: finalized WoW 12 Decursive compatibility flow aroundUnitDebuffsourcing, slot-11auraInstanceIDtuple compatibility, and guarded fallback behavior.FixLog.md+Docs/Decursive Aura Compatibility Research.md: recorded full anomaly timeline, failed branches, and final resolved path.
5.3.52-JuNNeZ (2026-04-02) — Obsidian Tooltip Spacing
Highlights
- Fixed compare-item tooltip overlap in item hovers where multiple comparison tooltips could collide with the main tooltip.
- Improved tooltip comparison placement so compare tooltips now keep stable spacing even when tooltip content expands after initial show.
- Reduced tooltip skin side effects by limiting AzeriteUI skinning to known managed tooltip frames only.
Access
- No new settings required. Hover equippable items (especially rings/trinkets) to see the compare-tooltip spacing fix.
Internal
Components/Misc/Tooltips.lua: added deterministic compare-tooltip stacking with theme-aware gap and post-show/resize relayout hooks.Components/Misc/Tooltips.lua: added managed-tooltip guard forSharedTooltip_SetBackdropStylepath to avoid skinning unrelated tooltip-like frames.
5.3.51-JuNNeZ (2026-04-02) — Midnight Stocklight
Highlights
- Stabilized WoW 12 player-row aura behavior around combat secret-value windows while keeping AzeriteUI stock intent: helpful auras fail open during combat secrecy to avoid flicker/dropouts, then return to mixed bright/dim classification out of combat.
- Improved aura diagnostics for live verification by expanding
/azdebug aurasnapshotoutput with best-effort spell ID/name resolution fromauraInstanceID, making post-combat classification checks far easier to audit. - Added a new player-row aura option, Always Show Full Brightness, for users who prefer no dimmed icons.
- Completed localization coverage for the new/updated player-row aura menu text across all shipped locales.
Access
- Player-row stock behavior:
/az-> Unit Frame Settings -> Player Frame -> Auras -> Use AzeriteUI Stock Behavior. - Force full-bright icons (optional):
/az-> Unit Frame Settings -> Player Frame -> Auras -> Always Show Full Brightness. - Snapshot debug command:
/azdebug aurasnapshot player.
Internal
Components/UnitFrames/Auras/AuraFilters.lua: added stable per-aura helper state and secret-window fallback signals for stock-mode player aura filtering.Components/UnitFrames/Auras/AuraStyling.lua: hardened bright/dim decision path to use stable filter-provided signals and keep stock-intended mixed post-combat behavior.Core/Debugging.lua: expanded aura snapshot payload with by-instance spell/name resolution and richer visual/timing diagnostics.Components/Auras/Auras.luaandLibs/oUF/elements/auras.lua: additional WoW 12 aura payload guards and refresh hardening on high-churn paths.Locale/*.luaandOptions/OptionsPages/UnitFrames.lua: localized and exposed the new player-row brightness controls.
5.3.50-JuNNeZ (2026-04-02) — Obsidian Aura Shield
Highlights
- Hardened WoW 12 aura processing to prevent edge-case script breaks under heavy aura churn. Multiple
C_UnitAurascalls in the oUF aura element are now fail-closed with guarded fallbacks, so a single bad payload no longer interrupts the entire update pass. - Improved aura button data reliability by removing deprecated
UnitAuratuple dependency in the aura component and using a single modernC_UnitAurasdata source path per slot. - Restored Decursive in-combat dispel detection behavior while keeping the WoW 12 crash guard: only secret
auraInstanceIDis sanitized in theUnitDebuffcompatibility wrapper, preserving required tuple semantics for third-party scanners. - Fixed tooltip anchor hijack on nil-named world map pins by adding a MapCanvas ownership guard (
owningMap) before custom anchor handling.
Access
- Aura stability verification:
/buggrabber reset->/reload-> apply/remove buffs and debuffs rapidly (solo + combat) and confirm no new aura-element stack errors. - World map tooltip verification: enable tooltip anchoring in
/azsettings, hover world quest/AreaPOI map pins, and verify anchor behavior remains Blizzard-normal.
Internal
Libs/oUF/elements/auras.lua: wrapped high-riskC_UnitAurascalls with guarded fallbacks and added nil-safe dispel color handling.Components/Auras/Auras.lua: simplifiedGetAuraButtonDatato modernGetAuraDataByIndexSafe-first flow; removed deprecated tuple path and redundant lookup.Core/Compatibility.lua: narrowedUnitDebuffsanitizer to secretauraInstanceIDslot only.Components/Misc/Tooltips.lua: addedparent.owningMapearly-return guard inSetDefaultAnchor.
5.3.49-JuNNeZ (2026-04-02)
Highlights
- Fixed a WoW 12 error from Decursive's aura scan (
GetUnitDebuffAll) where secret boolean values returned byUnitDebuffcaused hard Lua errors. A narrow sanitizer in the compatibility layer now converts secret tuple slots tonilbefore they reach third-party code. - Fixed a WoW 12 error in LibActionButton's target-aura cooldown overlay where secret aura timing values were forwarded directly to Blizzard's
Cooldown:SetCooldown. The overlay now prefers the duration-object API when available and skips the update entirely when timing data is unreadable.
Internal
Core/Compatibility.lua: addedUnitDebuffsecret-tuple sanitizer wrapper for WoW 12 (wraps once, fails closed, leavesC_UnitAurasAPIs untouched).Libs/LibActionButton-1.0-GE/LibActionButton-1.0-GE.lua: hardened target-aura cooldown helper to preferC_UnitAuras.GetAuraDuration+SetCooldownFromDurationObjectwhen available; plain numeric fallback only when values are confirmed non-secret; skips overlay update when timing is secret.
5.3.48-JuNNeZ (2026-04-01)
Highlights
- Fixed recurring WoW 12 Edit Mode taint on repeated open/close loops while solo. Compact party/arena preview frames are no longer touched by AzeriteUI quarantine paths unless the relevant live group context is active.
- Fixed Blizzard castbar forbidden-table errors during Edit Mode arena refresh by removing AzeriteUI castbar method/mixin mutation guards and keeping castbar handling non-invasive.
- Fixed Edit Mode exit protected-call attribution (
ClearTarget()) by rolling back EditMode manager registration-table mutation in the guard layer. - Fixed follower/story raid 25-man frame compaction where layout could collapse into one column when profile fallback state was incomplete; Raid25 now uses a safe multi-column fallback.
Access
- Reproduce Edit Mode fix: open
/azsettings as usual, then open/close Blizzard Edit Mode repeatedly while solo. - Raid frame behavior: verify in follower/story raid encounters that 25-man layout keeps expected multi-column spacing.
Internal
Core/FixBlizzardBugs.lua: context-aware quarantine gating for party/raid/arena preview safety in solo Edit Mode.Core/FixBlizzardBugs.lua: castbar guard layer converted to no-op to avoid taint-prone Blizzard castbar mutation.Core/FixBlizzardBugs.lua: EditMode manager registration-table bypass logic disabled after protected-call attribution regression.Components/UnitFrames/Units/Raid25.lua: hardenedmaxColumnsfallback in both header size and child layout calculations.
Older releases
Entries before 5.3.47-JuNNeZ live in CHANGELOG_ARCHIVE.md.
This file is published verbatim as the release description on GitHub, CurseForge, Wago and WowInterface, and GitHub rejects a body over 125000 characters, so older entries are rotated out rather than kept here forever.
This mod has no additional files

