Description
ElvUI Bag Categories
Splits ElvUI's bag and bank windows into labeled, collapsible categories — Quest Items, Currency, Soulbound gear, Trade Goods, and a dozen more — instead of one long grid of icons, with a drag-to-reorder sort, per-category on/off switches, and an optional running gold total.
| Version | 1.0.0 |
| Author | ludvigaf |
| Requires | ElvUI |
| Optional | ItemRack, Auctionator |
| Slash command | /bagcategories |
| Repository | https://github.com/ludvigaf/ElvUI_BagCategories |
Overview
By default, ElvUI's bag window is a single grid: every item from every bag, in whatever order the game hands them to you, cut off by a fixed number of columns. Bag Categories reads the same slot data ElvUI already has and re-lays it out as a stack of labeled sections instead — each with its own header, its own item count, and its own show/hide toggle. The same grouping applies to the bank window, controlled by a separate switch.
Every item is placed by a single classification pass per slot: item class, subclass, bind state, and (for a few categories) whether it's tied to a quest currently in your log, is marked as junk, or is a bag key versus a keyring key. Trade Goods and Recipes go one step further and split themselves live by the item's real in-game subtype text — the same string the tooltip and auction house show — so a material or profession list never drifts out of sync with the game's own data.

A grouped bag window. Soulbound gear is further split into per-set panels — Feral Tank and Restoration — picked up automatically from ItemRack.
![]() |
![]() |
At extra width, sibling categories share a row — here Equipment/Miscellaneous, and Feral Tank/Restoration nested underneath. |
A newly-created ItemRack set (Feral DPS) and a live Trade Goods subtype (Cloth) both appear without any manual setup. |
Configuration
Configuration lives inside ElvUI's own settings tree, under a Bag Categories entry in the left-hand list — no separate config addon required. The same panel also opens as a small standalone window via /bagcategories config, for tweaking things without ElvUI's full settings frame open.

The options panel, docked inside ElvUI's own settings tree.
Top-level options
| Option | Default | Does |
|---|---|---|
| Enable | on | Groups items into categories in the bag window. Can also be flipped quickly with the bare /bagcategories command. |
| Enable for Bank | on | The same grouping, applied to the bank window. Kept as its own switch since bag and bank are opened independently — and can both be open at once. |
| Show Bag/Bank Space Count | on | A used/total slot count (e.g. 74/89) in the top-left corner of the window. The Keyring is excluded from the count. |
| Use ItemRack Categories | on | If ItemRack is installed, adds one Soulbound → Equipment subcategory per saved ItemRack set — see ItemRack equipment sets. |
| Show Bag/Bank Value | on | Totals the value of everything in view, next to the slot count — see Bag & bank value. |
Categories & sort order
Below the top-level options sits the full category list, in whatever order it's currently sorted. Three things happen here:
- Enable/disable — every category is a checkbox; unchecking one applies the fallback rule described above.
- Reorder — drag one category onto another to swap their positions. This works at every level: the root list, and again inside each category that has its own sub-panel (Soulbound, Trade Goods, Recipes). Order is shared between bag and bank.
- Drill into sub-panels — Soulbound, Trade Goods, and Recipes each expand into their own nested settings group (with their own Enable toggle at the top and their own drag list below) rather than showing every subcategory flattened into one long list.
Collapsing a section for the current session is done in the bag/bank window itself, not in the options panel: click the [-] in any category header to fold it shut (it becomes [+]); click again to reopen it. This state is remembered per category.
ItemRack equipment sets
If ItemRack is installed, every saved ItemRack set becomes its own subcategory under Soulbound → Equipment — a "Feral Tank" set built in ItemRack shows up as a matching Feral Tank panel in the bag, grouping exactly that gear together, wherever it's currently sorted under Soulbound.
- Read-only: this addon only reads ItemRack's saved sets, never writes to them.
- Internal ItemRack sets (prefixed
~, like its own "Unequip" set) are skipped. - Matching is by the item's base ID, ignoring enchant/gem/suffix variations, so an enchanted or socketed copy of a set piece still lands in its set.
- A gear piece assigned to a set is filed under its set regardless of actual bind state — it's realistically soulbound either way.
- Refreshed on every layout pass, so a set added, renamed, or edited in ItemRack mid-session appears immediately, no reload needed.
Turn this off with Use ItemRack Categories in the options panel if you'd rather keep all equipment in one flat Equipment section.
Bag & bank value
When enabled, a running total (e.g. 51g 54s 97c) appears next to the slot count, added up from whichever pricing addon is selected as the Price Source. Every source is read-only against that addon's own data — nothing is fetched, scanned, or written on its behalf.
| Source | Addon | Reliability |
|---|---|---|
| AtrValue (default) | Auctionator | Confirmed against Auctionator's public API. |
| AHDB Min Bid | AHDB | Best-effort, from long-standing community convention. |
| AHDB Min Buyout | AHDB | Best-effort, from long-standing community convention. |
| AucMarket | Auc-Advanced (Auctioneer) | Best-effort, from long-standing community convention. |
Only a source from an addon you actually have installed produces a value. Pick a source that isn't installed and the panel shows a warning inline instead of a silently blank total.
Slash commands
| Command | Does |
|---|---|
/bagcategories |
Quick-toggles grouping in the bag window on/off. The bank has its own separate checkbox in the options panel, so this doesn't touch it. |
/bagcategories config |
Opens the standalone settings window (same content as the ElvUI-docked panel, just without ElvUI's full settings frame around it). |
/bagcategories options |
Alias for config. |
Bag Categories doesn't replace ElvUI's bag frame — it hooks Bags:Layout and Bags:UpdateSlot and re-lays out the same slot buttons ElvUI already created, every time ElvUI itself updates them. That re-layout runs synchronously, in the same frame, specifically so there's no visible flash back to the native ungrouped grid before the grouped one catches up.
Everything the addon needs to make a layout decision — the category tree, ItemRack's live set data, the classification rules, the saved sort order — is re-derived fresh on each pass, which is also why a brand-new ItemRack set or an unfamiliar trade-good subtype just appears correctly the next time the bag redraws, with nothing to reload.
Category model
Every category is a node on a tree, and every node's position in that tree is also its identity: a dot-joined path like soulbound.mounts.flying. That one string is simultaneously the saved-variables key for whether the category is enabled, whether it's currently collapsed, and its bucket key while items are being sorted into columns.
Default top-level order
| # | Category | Default | What lands here |
|---|---|---|---|
| 1 | Quest Items | On | Any item — of any item class — currently tied to a quest in your log. |
| 2 | Currency | On | Quest-class items not tied to an active quest — reputation/faction tokens like Mark of Thrallmar, used like a stackable currency. |
| 3 | BoE | On | Unbound items whose bind type is Bind on Equip. |
| 4 | Soulbound (parent) | On | Bound gear and other bound items. Expands into three children — see below. |
| 5 | Potions & Consumables | On | Consumable-class items other than food/drink. |
| 6 | Food & Water | On | The Food & Drink consumable subclass specifically. |
| 7 | Reagents | On | Reagent-class items. |
| 8 | Gems | On | Gem-class items. |
| 9 | Trade Goods (parent) | On | Split live by real material subtype — see below. |
| 10 | Recipes (parent) | On | Split live by real profession subtype — see below. |
| 11 | Ammo & Quivers | On | Projectiles (arrows/bullets) and the quiver/ammo pouch containers that hold them. |
| 12 | Bags | On | Spare, unequipped bags sitting in your inventory. |
| 13 | Keys | On | Key-class items in your bags only — Keyring keys are left out. |
| 14 | Pets | On | Caged companion pets, regardless of bind state. |
| 15 | Toys | On | Anything registered in the Toy Box, even uncollected. |
| 16 | Trash | On | Items flagged as junk (grey-sell items). |
| — | Miscellaneous | Always on | The permanent catch-all. Everything unmatched lands here, as does any category folded shut all the way to the root. |
Soulbound's children
Soulbound is the one top-level category with permanent sub-structure:
- Equipment — bound gear and relics. This is also where ItemRack equipment-set subcategories attach — see ItemRack equipment sets.
- Mounts — split into Flying and Ground. Off by default: mount bags fill up fast, and most players park them somewhere else, so this whole branch starts collapsed into plain Soulbound until you opt in.
- Other — the Soulbound catch-all: bound items that don't fit anywhere more specific land here instead of generic Miscellaneous, since "can't be traded" is the more useful fact about them.
Trade Goods & Recipes: live subtypes
These two read the item's actual subtype text at classification time — the same string the tooltip shows — rather than a hardcoded ID table, so they can't drift out of sync with the game:
Trade Goods splits by material (materials are shared across professions — Ore feeds Mining, Blacksmithing, Engineering, and Jewelcrafting alike):
Cloth Leather Metal & Stone Herb Meat Elemental Enchanting Jewelcrafting Miscellaneous
Recipes splits cleanly by profession, since each recipe subtype text is a profession name:
Alchemy Blacksmithing Cooking Enchanting Engineering First Aid Leatherworking Tailoring Fishing Jewelcrafting Poisons Miscellaneous
Anything reported under a subtype that isn't in these lists still gets grouped — under that parent's own Miscellaneous child — instead of being lost.
Unchecking a category never hides items
Turning a category off just collapses it into the nearest enabled ancestor. Unchecking a subcategory folds its items up one level; unchecking an entire top-level category (or an entire chain, all the way up) folds all the way down to Miscellaneous:
Flying (off) ← Mounts (off) ← Soulbound (on) → items land in Soulbound
Flying (off) ← Mounts (off) ← Soulbound (off) → items land in Miscellaneous
Example: with Flying and Mounts both unchecked but Soulbound itself checked, a flying mount lands in the plain Soulbound bucket. If Soulbound were unchecked too, it would fall all the way to Miscellaneous instead.
ElvUI Bag Categories · v1.0.0 · by ludvigaf · github.com/ludvigaf/ElvUI_BagCategories





