Repository navigation
Releases: krebs3r/umbra-unit-frames
Release list
0.7
0.7 — 2 October 2026
A first login that asks. A new install opens on a small window that walks
through what /uuf sets, one question to a page, each with a drawing of what
the answer does.
- Five pages: the layout over a miniature of the screen, the health bar's
color and the level's place over a drawing of your own player frame,
whether Blizzard's buffs and group manager stay, and a last page with the
commands worth knowing and a button to unlock the frames - Every answer takes effect as it is clicked, through the same call the
options window and/uufuse; Skip, the close button and Escape keep
whatever is set, and none of them ask again /uuf setupbrings the questions back at any time- An install that already has settings is not asked
- On the Classic clients the last page also carries the minimap button switch
- German on a German client, like the options window
- Built on oUF 14.1.1, checked on Retail and Mists. On Forever it prints a
name with its surname, where the character has one
0.6.1
0.6.1 — 27 September 2026
The level, on the frames where it is read. A plate across the foot of the
portrait carries it, so the name keeps its whole width.
- The player and the party column show the level muted; on the target it reads
in the client's difficulty color, gray to red, for anything you can attack - An elite carries a
+, a unit too far above you to be told reads?? - On a scaled unit it is the level you fight it at; the Classic clients, which
do not scale, show the plain level - The options window has a Show level section: on the portrait, in front of the
name, or off./uuf level portrait,nameandoffdo the same - The target's health bar turns gray when the kill would be for nothing:
somebody else struck first, or the unit is too far below you to give
experience. The edge and the name keep its color
0.6
0.6 — 26 September 2026
An options window. Everything /uuf sets can now be clicked: the layout, the
health bar's color, whether Blizzard's buffs and group manager stay up, and the
mover. It is a small window in Umbra's own colors, shaped like Soundstone's
options, and every switch takes effect where you stand, as the commands
always have.
/uufon its own opens the window; the command list is/uuf help- On Retail and Forever it is in the addon compartment under the minimap; on
Mists, the Anniversary realms and Classic Era, which have no compartment, a
minimap button opens it instead, and the window can switch that button on
and off - The minimap button exists from login even while it is switched off, so
addons that gather minimap buttons into one, such as MinimapButtonButton,
find it like any other - Every client lists Umbra under Options › AddOns, with a button that opens
the window - In combat the unlock button is refused, as
/uuf unlockis; a layout picked
in a fight is kept and applied when it ends. On Forever, where the party
column stands down, the switch for Blizzard's group manager is struck through - The window and the commands change a setting through the same call, so a
word typed in chat shows up in an open window at once - The window speaks German on a German client and English on every other;
what/uufprints in chat stays English, like the words it takes
0.5.1
0.5.1 — 26 September 2026
Names in other scripts. A party member called 车神 or Ашесть showed up as a
row of empty boxes: the frames were set in a single font file, and on a
German or English client that file only knows the Latin alphabet.
- Every label is now set in a font family the way Blizzard's own are, one
file per alphabet, so Cyrillic, Korean and both Chinese scripts draw in
the frames, the aura timers, the mover labels and the report window
0.5
0.5 — 26 September 2026
The Classic clients: Mists of Pandaria, the Anniversary realms (Burning
Crusade) and Classic Era, on the same code and the same oUF as Retail. Each
calls itself Classic and carries almost all of the Midnight API anyway. Each
was checked against Blizzard's own interface code for its build first, then
played with: the frames, the aura rows and the portraits draw on all three,
and on Mists the party header builds and configures its children. Not yet
seen in a real party, and combo points have not been looked at.
- A
_MistsTOC, and.\tools\install.ps1 -Flavor mistsfor_classic_ - A
_TBCTOC for the Anniversary realms, and-Flavor anniversaryfor
_anniversary_, and a_VanillaTOC for Classic Era with-Flavor era:
both clients lack exactly what Mists lacks, so all three share
Compat/Classic.lua - Where the client has no aura container, and Mists has none, Umbra builds
the aura rows itself: the same buttons, the same packing, the dispel color
on the underline, a countdown, and right-click to cancel a buff out of
combat Compat/Classic.luaanswers the one function oUF reads combo points through
and Mists does not have, andSetRolesets, the widget method oUF tags every
frame with — missing there, and fatal to the whole layout on the first login.
Where oUF uses it to put Blizzard's own frames away, it hides them- An event Mists does not know is left unregistered instead of being reported
on every login: oUF's class power asks forUNIT_POWER_POINT_CHARGE /uuf dev checknames the client —Mists,TBC Anniversary,Classic Era— and says whether the aura rows are the client's or Umbra's- Not there yet on Mists: Eclipse, Shadow Orbs, Burning Embers and Demonic
Fury, and Chi for monks other than Windwalker
0.4.1
0.4.1 — 22 September 2026
One number more on the party column, and it is the one a group frame is read
for: whether the healer can still heal.
- Each party member shows their power percentage in the header, in the color
of their own resource, the way the player and target frames do
0.4
Changelog
0.4 — 22 September 2026
The first one that does not call itself a pre-release, and nothing was added
to earn that. What changed is the promise rather than the addon: there is no
options window, Clique is not supported, and raid frames are Blizzard's. Those
are decisions, and they now read as decisions instead of as things this has
not got round to.
What the CurseForge page did not say, it says now. Two things on the Forever
beta belong to the client and not to Umbra — the party column cannot be built
there, and saved variables are written on exit and never read back, so every
login and every reload starts from the defaults. Someone installing this on
that client should meet both before they install it rather than afterwards.
- Two printed lines sent the reader to an address that answers nothing.
/uuf dev testended with/uuf testto stop, and the party report's
unbuilt-header line pointed at/uuf debug. Both names moved behinddev
when the measurements did, and the bare form only replies with where it
went — the right answer to a typo and the wrong one to follow. They name
the command that works - The comments that name a command moved with them. They are read by the
person deciding what to type next X-Curse-Project-IDis in both TOC files, so a tag uploads itself to
CurseForge instead of stopping at GitHub
0.3
Pre-release. No configuration beyond the slash commands, and no Clique support yet.
The party column does not work on the WoW: Forever beta
That client compiles every secure snippet with loadstring_untainted, the function is missing there, and the client's own group-header code uses it to configure each child it creates. So the header makes buttons it cannot finish — no unit, no style — by oUF or by anyone else. Nothing a layout can work around.
Umbra steps back there instead: two seconds after the column would first appear it checks whether any child was given a unit, and if none was, it hides, stops asking the client, and hands Blizzard's group panel back whatever /uuf group says. Every other frame is unaffected, and Retail is untouched by all of this.
No party column out of fixed frames is planned for Forever — no sorting, no changes during a fight, a second implementation to maintain, and a client that may simply have the function by the time it launches on 4 November or in a later beta. Umbra waits for the client. /uuf dev header answers where any given client stands.
Raid frames are parked for a related reason, and it is a decision rather than a delay: Blizzard's own do the job, class coloring included. The header carries them whenever they are wanted.
Also in this one
/uuf dev portraitopens a box with four attempts at each portrait side by side: the square as the column draws it, the whole model from its own camera, the file alone with no unit behind it, and the client's 2D portrait. The target is the question, the player and the pet are the controls/uuf dev checkno longer saysshowing 3D model. That line only measured which of the two layers was uncovered, so it says that now/uuf dev headerretires its probe once it has answered, counts children that were finished rather than made, and both group reports name the build and client they were taken on/uuf resetand/uuf layoutin combat no longer reach for a protected frame; the move waits for the fight to end and both commands say so- Two things the client does, now measured:
SetUniton a unit whose identity is secret leaves your own model in the square rather than an empty one, andSetPortraitTextureis not declined for that same unit — so the 2D stand-in is the unit's real face, and it is what keeps yours off the enemy frame
The changelog has the full list.
0.2
The group frames. 0.1 said "no group or raid frames, and no range fading, which
belongs with them" — the party half of that is what this release is.
The party column
Built on the client's own SecureGroupHeaderTemplate, not on four fixed
frames: the client creates the children, assigns their units and re-sorts them,
in combat as well as out of it. That the header still works without
loadstring_untainted was measured before anything was built on it — the flag
is about compiling a snippet yourself, which nothing here does.
Each member carries what every other frame in this addon carries, sized for a
row 33 pixels tall:
- The portrait column and class color at the edge, the same two principles
the single frames follow. - A debuff row under the frame. Icons at 14 pixels rather than the 26 a
single frame uses, each on the slim line the client colors by dispel type —
what is dispellable is the information, and that line already carries it. How
many icons is asked rather than chosen: fourteen of them with their spacing
are exactly as wide as the frame, so the row ends where the frame ends. No
duration label, because at that size it covers the icon it belongs to. - A cast bar, full width, spell name at the left and the time at the right.
- The role each member signed up as, left of the name, drawn with the
client's own icon — tank, healer and damage alike. The space is reserved in
every row whether or not there is an icon in it, so the names stay in one
column when somebody re-queues. - Range fading, the sixth design principle, seen working inside an
instance. oUF gates its own element on party membership, which is why it
waited for the header rather than being half-built on the single frames.
Dragged by a mover of its own rather than by the header, because what a secure
header does with a child that is not one of its unit buttons is not something
this addon has measured. Unlocking shows four stand-ins in its place — real
frames on party1..party4, not boxes of the same size, so what you place is
the thing itself.
/uuf group umbra puts the client's own group panel away and /uuf group both
brings it back. Default is both: the panel carries the raid markers and the
way out of a group, and the column is placed to clear it rather than to replace
it.
Elsewhere
/uuf health classcolors the health bar by the unit — class for a
player, reaction for everything else — and/uuf health plainputs it back
to the one neutral green. The bar is muted to 60% so that the numbers on it
stay legible: the text is near-white, and so are priest white, rogue yellow
and monk green. The fade is the fill's alpha rather than the color, because
dimming a class color means arithmetic on three numbers that are secret
inside an instance. The 3-pixel edge stays at full strength.- A portrait no longer waits four seconds for a model the client refused.
Since 12.0.5Model:SetUnittakes no unit token for a unit with a secret
identity, so that is the question asked now. Measured both directions on the
same character minutes apart: the target and the target-of-target in the
clear with models outside an instance, secret with none inside, and a party
member inside the same instance in the clear and loading — so the instance
was never the condition, only a place that meets it. - The target-of-target frame no longer throws on every model change in the
world. oUF asks the client for permission to compare two unit tokens and
treats a yes as a guarantee; inside a delve the permission comes back in the
clear and the comparison comes back hidden anyway, which cost 716 errors in
one run. - The measurements moved behind
/uuf dev. The list someone reaches for
when they have forgotten a command should be about the frames. The old names
answer with their new address rather than with the whole list.
Slash commands
/uuf layout classic · modern |
the whole arrangement |
/uuf auras umbra · both |
who shows your buffs and debuffs |
/uuf health class · plain |
what colors the health bars |
/uuf group umbra · both |
who shows your party |
/uuf unlock · lock · reset |
move the frames, per layout set |
/uuf dev … |
the measurements: check, party, header, test, debug |
What is not in it
- No configuration interface. The layout set, the dragged positions and the
four switches above are the only saved state. - No raid frames. The header can do them; what is new there is the
arrangement — forty people with subgroups and sorting. - No Clique support beyond the
OptionalDepsline in the TOC. - No pets of group members, and no interrupt marking on cast bars.
- Written and not yet seen in the client: a real damage absorb, which
needs a shielded unit to point at.
Clients
Verified on Retail 12.1.5, including the party column, its debuffs, the cast
bars and the role icons inside a five-man dungeon.
One package covers both clients. The attached zip carries both TOC files
and release.json declares every interface they answer for — 120100 and 120105
for Retail, 16001 for the WoW: Forever beta — so an addon manager picks the
right one by itself.
The group header has not been run on Forever. Everything else in 0.1 loaded
and drew there; this release's headline feature is unmeasured on that client,
and /uuf dev header is the one command that would settle it.
Forever writes its saved variables and never reads them back, so settings
do not survive a reload there. That is the beta, not the addon.
The full list of changes is in CHANGELOG.md, and the reasoning behind each of
them is in docs/development.md.
0.1
First build to be tagged, and a pre-release on purpose: it works and is in
daily use, but there is no configuration yet beyond the slash commands.
What is in it
- Every single frame: player, target, pet, target-of-target and a boss
column, built as an oUF layout. - Five of the six design principles: class color at the edge, the portrait
in its own column, power as a hairline, auras on a line the client colors by
dispel type, and hatched absorbs with ghosted incoming healing. - Two whole arrangements,
/uuf layout classicand/uuf layout modern,
switched without a reload and each remembering its own dragged positions. - Frames that know about each other: dragging snaps to matching edges and
refuses to drop a frame on top of what another one draws — its castbar and
aura rows included, not just its box. /uuf check, a report window naming what this client hides from addons,
in plain text you can copy out.
What is not in it
- No configuration interface. The layout set and dragged positions are the
only saved state. - No group or raid frames, and no range fading, which belongs with them.
- Only one thing on the list is written but unconfirmed in the client: a real
damage absorb, which needs a shielded unit to point at.
Clients
Verified on Retail 12.1, and loading and drawing on the WoW: Forever beta
(interface 16001).
One package covers both. The attached zip carries both TOC files, and the
release.json beside it declares every interface they answer for — 120100 and
120105 for Retail, 16001 for Forever — so an addon manager picks the right one
by itself.
Forever writes its saved variables and never reads them back, so settings
do not survive a reload on that client. That is the beta, not the addon, and
the notes say why nothing here tries to work around it.
The full list of changes is in CHANGELOG.md.