A World of Warcraft addon that displays compact upgrade-track badges (Hero, Myth, etc.) on item icons.
- Shows upgrade-track badges on Blizzard default bags (including separate bag windows).
- Shows upgrade-track badges on the character panel equipped slots.
- Registers a Baganator icon-corner widget ("ItemTier: Track") selectable in
Baganator → Icon Settings / Icon Corners. - Adds a vanilla Options → AddOns panel for in-game configuration, including an adjustable item-text size slider.
- Detects the item upgrade track (Explorer → Myth) and PvP tracks, using multiple
detection strategies in priority order:C_ItemUpgrade.GetItemUpgradeInfo()— most accurate for live bag items- Tooltip text scan (
Upgrade Level: ...) — authoritative fallback - Bonus-ID lookup table — fast fallback when tooltip data is unavailable
- Three display modes: short (
V), abbrev (Vet), full (Veteran) - Color-coded labels per track.
- Lightweight: item links are cached; cache is cleared on
BAG_UPDATE. - Works standalone; Baganator integration is optional.
Use Curseforge! You can find the project here: https://www.curseforge.com/wow/addons/itemtier.
- Copy the
ItemTierfolder into
World of Warcraft/_retail_/Interface/AddOns/ - Enable ItemTier in the WoW AddOns list.
- Optional (Baganator): Open Icon Settings → Icon Corners and assign
ItemTier: Track to your preferred corner.
/itemtier Open ItemTier options (or show help if unavailable)
/itemtier enable|disable Toggle the addon on or off
/itemtier mode short|abbrev|full Change display mode
/itemtier colors on|off Toggle color-coded labels
/itemtier debug on|off Print resolved tracks to chat
/itemtier cache clear Wipe the item-tier cache
/itemtier cache size Show current cache entry count
/itemtier status Print current settings
ItemTier uses the public Baganator.API.RegisterCornerWidget API.
The widget is registered either on Baganator's ADDON_LOADED event or
immediately if Baganator is already loaded (including C_AddOns.IsAddOnLoaded
compat handling).
The onUpdate callback receives Baganator's details table for each item button:
| Field | Used for |
|---|---|
details.itemLink |
cache key, bonus-ID parsing |
details.itemLocation |
C_ItemUpgrade.GetItemUpgradeInfo() call |
details.tooltipInfo / details.tooltipGetter |
tooltip fallback (Upgrade Level: ...) |
Upgrade-track bonus IDs change each WoW season. The table in
Util/Constants.lua includes best-effort mappings for current supported data,
plus previously confirmed Dragonflight IDs for cached items.
Action item:
- Re-validate
ItemTier.Constants.BonusIDToTrackat each seasonal reset and update mappings when Blizzard introduces new track bonus IDs.
C_ItemUpgrade.GetItemUpgradeInfo() returns different struct layouts
depending on the patch. The scanner attempts multiple field names
(bandTitle, trackDescription, trackName) to remain resilient. Items
that Blizzard does not mark as upgradeable (crafted legendaries, PvP
vendor items) will not be detected by this method; tooltip scanning and
bonus-ID lookup act as fallbacks.
Raid difficulty (Normal / Heroic / Mythic / LFR) and Mythic+ level detection
are not yet implemented. The instanceDifficultyID field in the item link
and M+ keystone bonus IDs are the intended data sources for a future
"ItemTier: Difficulty" widget.
Action item:
- Add an optional second widget for source/difficulty once mapping coverage is validated for raid and Mythic+ loot sources.
ItemTier registers a category under Options → AddOns → ItemTier.
Available toggles/options:
- Enable ItemTier
- Color-coded Labels
- Debug Output
- Display Mode (short / abbrev / full)
- Item Text Size (0.5x – 2.0x)
All settings live in the ItemTierDB SavedVariables table:
| Key | Type | Default | Description |
|---|---|---|---|
enabled |
boolean | true |
Master on/off switch |
displayMode |
string | "short" |
"short" | "abbrev" | "full" |
useColors |
boolean | true |
Color-code the badge text |
fontSize |
number | 1.0 |
ItemTier text scale multiplier; also applied on top of Baganator's configured font size |
debug |
boolean | false |
Print resolved tracks to chat |
For local development, you can create a zip with the same top-level addon
folder layout used for CurseForge releases (ItemTier/...).
Run from the repository root:
powershell -ExecutionPolicy Bypass -File .\scripts\package-addon.ps1
Output:
- Zip file in
dist/(default name:ItemTier-<version>.zip) @project-version@inItemTier.tocis replaced in the packaged copy with a local version string (git describe --tags --always --dirty, orlocal-devfallback)
Useful options:
# Custom output folder and zip name powershell -ExecutionPolicy Bypass -File .\scripts\package-addon.ps1 -OutputDir release -ZipName ItemTier-dev.zip # Force-clean output folder before packaging powershell -ExecutionPolicy Bypass -File .\scripts\package-addon.ps1 -CleanOutput # Override version token replacement value powershell -ExecutionPolicy Bypass -File .\scripts\package-addon.ps1 -ProjectVersion 12.0.5-dev
The test suite uses wow-ui-sim and runs automatically on pushes, pull requests, and manual workflow dispatches.
Run it locally with Docker:
docker run --rm -v "${PWD}:/app/Interface/AddOns/ItemTier" ghcr.io/osso/wow-ui-sim:12.0.5 run-tests ItemTier
CurseForge publishing is handled by GitHub Actions in .github/workflows/release.yml.
The pipeline is triggered when you push a tag that matches:
release-*
Example release flow:
# 1) Create a release tag git --no-pager tag release-<YEAR>.<NUMBER> # 2) Push the tag to GitHub (this triggers the CurseForge pipeline) git --no-pager push origin release-<YEAR>.<NUMBER>
Then check the workflow run in GitHub Actions (CurseForge Release).
Prerequisite: repository secret CF_API_KEY must be configured for publishing.