Skip to content

Repository files navigation

StatPanel

LicenseInterfaceLua

A movable panel for World of Warcraft showing your secondary stats in your specialization's priority order, alongside item level, movement speed and framerate — with essentially every pixel of it configurable.

Colors, textures, transparency, borders, fonts, sizes, layout, which stats appear and how their numbers are written are all options. If you would rather not configure anything, pick one of the 22 presets and you are done.

StatPanel

The default Modern Bars preset: secondaries in Beast Mastery's priority order, item level in the title, session speed peak, and framerate with both latencies.


Features

Appearance

  • Two row styles: status bars, or a text-only readout (Mastery: 285 - 10.65%)
  • Per-stat colors, or class color / single color / value gradient
  • Panel and bar textures, borders and transparency
  • Font face, size, outline, shadow and color, per text element
  • Auto-sizing width, or a fixed width you choose

Stats

  • Crit, Haste, Mastery, Versatility ordered by your spec's priority — from a built-in baseline, or paste a Pawn / sim weight string for your exact order
  • Armor damage reduction, Dodge, Parry, Block
  • Leech, Avoidance, Movement speed with a session peak
  • Strength / Agility / Intellect / Stamina, plus a "Primary" row that resolves to whichever attribute your character actually scales with
  • Attack power, spell power, health, mana, and Brewmaster stagger
  • Sections can be renamed, reordered, and any stat moved between them

Quality of life

  • Per-character profiles, with import/export strings for sharing
  • Automatic profile switching by specialization or content type
  • Live preview docked beside the options window while you configure
  • Right-click menu on the panel for quick toggles, presets and profiles
  • Minimap button and a LibDataBroker feed
  • Gear audit: per-slot item level and upgrade track, tier set count, missing enchants, empty sockets and below-Epic gems
  • Key bindings for the panel, profiles and the gear audit
  • Ten languages, each complete (see Locales/README.md); nothing embedded
  • Chat announce for your gear summary

Installation

Copy the StatPanel folder into:

World of Warcraft/_retail_/Interface/AddOns/

Then restart the game (or /reload if the addon was already installed with the same file list). Type /sp to open the options.

Optional: if any addon you run provides LibSharedMedia-3.0 — ElvUI, WeakAuras, Details!, Plater and many others do — every texture and font registered with it appears in StatPanel's dropdowns automatically. Nothing is embedded and nothing is required.


Quick start

WantDo
Open the options/sp
Try a different lookOptions → Presets
Move the panelDrag it (untick Lock position first)
Quick togglesRight-click the panel
Match a sim's stat priorityOptions → Priority, paste a Pawn string
Check your enchants/sp gear

Presets

PresetLooks like
Modern BarsThe default: flat dark panel with colored bars
Classic TextNo bars — one colored line per stat, with ratings
Compact BarsThin headerless bars, small footprint
BlizzardBlizzard textures and a tooltip border
TransparentNo background or border at all
Minimal MonoTiny monochrome text in a corner
NeonHigh-contrast glow bars with a spark
ParchmentWarm parchment and gold
Frostbound / EmberCool blue / warm red themes
Class ColoredEvery bar in your class color
Colorblind SafeOkabe-Ito palette, readable with red-green colour blindness
Big & BoldLarge high-contrast text, readable at a distance
Ultra CompactFour secondaries, nothing else
TerminalGreen-on-black console readout
ElvUI / ElvUI TransparentMatches your ElvUI theme (see below)
Tank / Healer / PvPRole-appropriate stat selections
SpeedrunnerBig live speed with your session record
Raid ReadySecondaries, item level and both latencies

The two ElvUI presets read your live ElvUI configuration — border color, backdrop color, texture, font and font size — so StatPanel matches whatever you have themed it to. Without ElvUI installed they fall back to a static approximation and still work.


Slash commands

CommandDoes
/spOpen the options
/sp toggleShow or hide the panel
/sp lockLock or unlock dragging
/sp resetMove the panel back to the center
/sp preset <name>Apply a preset
/sp profile <name>Switch profiles (no name lists them)
/sp gearAudit enchants, sockets and item level
/sp announce [channel]Report your gear to chat
/sp peakClear the session speed record
/sp minimapShow or hide the minimap button
/sp debugCollect diagnostics to paste into a bug report

/statpanel works as a longer alias for all of the above.


Value formats

Each stat's text is a small template. Write whatever you like:

TokenGives
$valueThe headline number, to your chosen decimals
$ratingThe raw combat rating behind it
$valuec / $ratingcThe same, with thousands separators
$labelThe stat's display name
$maxThe configured bar maximum
$peakSession peak (movement speed)
$yardsYards per second (movement speed)
$perCombat rating this stat costs per 1%

So $rating - $value% renders as 285 - 10.65%.

The title has its own tokens: $equipped, $overall, $name, $spec, $class, $level. iLvl: $equipped / $overall gives iLvl: 226.06 / 228.19.


A note on patch 12.0 "secret values"

Midnight introduced secret values: most combat statistics are handed to addons in a form that can be displayed but not read. An addon may not do arithmetic on them, compare them, or send them anywhere.

StatPanel is built for this, and shows your stats normally. A few features cannot work on a protected value and degrade quietly rather than failing:

  • Bar smoothing jumps straight to the value instead of easing
  • Auto-scaling bar maximums stop growing
  • The value-gradient color mode parks at its low end
  • Auto-width cannot measure that row
  • $per renders as -, since it is a division
  • Chat announce omits those stats — no addon is permitted to send them

Item level, movement speed, spec and all gear data are not protected, so those work fully everywhere, including announce.

If a future patch changes what is protected, StatPanel picks that up on its own with no update needed.


Profiles

Each character remembers which profile it uses, so alts can share one look or each have their own. Profiles can be copied, and exported to a string you can paste to someone else.

Automation (in the options) can switch profiles for you — by specialization, or by where you are (raid, dungeon, arena, battleground, open world). A content rule beats a spec rule, so "Tank profile for Protection, but always Raid Ready inside a raid" works as you would expect. Rules are per character, and nothing switches unless you set a rule.


Development

The addon is plain Lua with no build step. Files load in the order listed in StatPanel.toc, and each depends on the ones before it.

FileHolds
Media.luaTexture / font / border registry, LibSharedMedia bridge
Config.luaDefaults schema, profiles, import/export
Presets.luaThe 22 one-click looks
Widgets.luaOption controls, built from raw frames
StatPanel.luaThe panel: stat sources, layout, rendering
Gear.luaEquipped item audit
Announce.luaChat reporting
AutoProfile.luaProfile switching rules
Menu.luaRight-click context menu
Diagnostics.lua/sp debug and the what's-new notice
Bindings.luaKey binding names and handlers
Broker.luaLibDataBroker feed and minimap button
Options.luaThe options window
SPMain.luaInitialization and slash commands

tools/deploy.ps1 mirrors the addon into your live AddOns folder:

pwsh -File tools/deploy.ps1 # deploy once
pwsh -File tools/deploy.ps1 -Watch # redeploy on every save

Tests

lua tests/run.lua # everything
lua tests/run.lua profiles # one spec file

tests/ loads the addon under a stubbed client (tests/wow_stub.lua) and calls the pure logic directly — priority parsing, the $token templates, the profile schema and migration, import/export, and every preset. No dependencies: tests/harness.lua is the framework. It does not, and cannot, replace loading the addon in game; it covers the parts that never needed a game to be wrong.

pwsh -File tools/locale-lint.ps1 checks the translations, and -Export <locale> prints a ready-to-fill stub for a new one.

See CONTRIBUTING.md for coding conventions and the pitfalls worth knowing about (secret values, deprecated Blizzard templates, taint), and docs/PUBLISHING.md for cutting a release and getting onto CurseForge.

Releases are automated: push a v* tag and CI builds the zip, attaches it to a GitHub release, and uploads it anywhere a token is configured.


License

MIT.

About

No description, website, or topics provided.

Resources

Contributing

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages