LibProfessionDB — Offline Profession & Recipe Database for WoW
LibProfessionDB is a lightweight library that lets any addon read World of Warcraft crafting-recipe details offline — a recipe's name, reagents, skill-up difficulty tiers, required skill, produced item, and enriched effect text — without a trade-skill window being open and without the recipe being known by the character.
WoW only exposes recipe data while a profession window is open, and only for professions the player actually knows. LibProfessionDB solves that by shipping a pre-built database generated from the game's own client data, so players never wait for a scan and addon authors get instant lookups for any profession — guild crafters, alts, and recipes you haven't learned yet.
This is a developer library. Install it if another addon lists it as a dependency, or depend on it if you are an addon author.
What it can do
- Look up a recipe by profession + recipe id: name, reagents, produced item
- Read the skill-up difficulty tiers (orange / yellow / green / grey thresholds)
- Read the required skill to learn a recipe, and its recipe-scroll item id
- Read the specialization required to learn a recipe (Dragonscale/Elemental/Tribal Leatherworking, Armorsmith/Weaponsmith Blacksmithing, …)
- Read enriched, searchable effect text for enchants (e.g.
+5 Weapon Damage,+1 All Stats) - For enchants, read the target slot (hands/wrist/chest/weapon/…) and structured stats (
{ ITEM_MOD_AGILITY_SHORT = 7 }), plus the enchant id that maps an applied enchant back to its recipe — all from the game's own data - Ask “what enchants can go on this slot?” and get a unified list — craftable enchants and the item-applied ones no profession makes (Dire Maul arcanums, Zul'Gurub head/shoulder/leg enchants, armor kits, shield spikes)
- Search by name or effect substring, optionally scoped to one profession
- Iterate one profession or the entire database
For addon authors
local DB = LibStub("LibProfessionDB-1.0", true)
if DB and DB:IsReady() then
local r = DB:GetRecipe(333, 13626) -- Enchant Chest - Minor Stats
-- r.name, r.effect ("+1 All Stats"), r.difficulty {150,175,195,215}, r.reagents
for _, hit in ipairs(DB:Search({ query = "agility" })) do print(hit.name, hit.effect) end
end
Key methods: IsReady, Count, GetMeta, GetProfessions, GetRecipe, GetName, GetReagents, GetEffect, GetDifficulty, GetRequiredSkill, GetItemID, GetCraftedItemID, GetEnchantId, GetEnchantSlot, GetStats, GetEnchant, EnchantsForSlot, IterateEnchants, Search, Iterate.
Data coverage
Recipe data (difficulty, required skill, reagents, names, effect text) differs between game versions, so it is shipped point-in-time per game version — never merged. LibProfessionDB is available for every version except Retail.
- Game versions: Vanilla / Era, TBC, Wrath, Cataclysm, Mists — each shipped with its own point-in-time recipe set.
- Languages: English (US/GB), German, Spanish (EU & Latin America), French, Italian, Korean, Portuguese, Russian, and Simplified & Traditional Chinese — every official WoW locale.
Recipe names and enchant effect text are translated per locale; difficulty, reagents, and ids are identical across languages.
Requirements
- Ace3 and VersionCheck-1.0 — auto-installed by CurseForge (they back the optional guild version-check)
Recent Updates
v1.4.0 (2026-07-18) — Enchant catalog: item-applied enchants
- New enchant catalog covering the permanent gear enchants no profession crafts — Dire Maul arcanums, the Zul'Gurub / Zandalar head, shoulder and leg enchants, armor kits, shield spikes — applied by a consumable item, so they never appear in a recipe list.
EnchantsForSlot(slot)returns a unified list of every enchant for a slot (craftable and item-applied);GetEnchant(id)/IterateEnchants()round it out. - Authoritatively sourced and curated from DBC (every
ENCHANT_ITEMeffect not in a profession skill line, targeting an armor/shield slot, granted by a real obtainable item — placeholders and QA/dev items filtered out). 80–176 enchants per game version, every locale. Kept out of the recipe space, soGetProfessions/GetRecipesare unaffected. LibStub MINOR → 7.
v1.3.0 (2026-07-12) — Enchant enrichment: id, target slot & structured stats
- Enchant recipes (all Enchanting, plus Engineering scopes/belt tinkers and later-expansion leg armors, spellthreads and inscriptions) now ship three new fields, exposed via
GetEnchantSlot,GetStatsandGetEnchantId: the target slot (HANDS/WRIST/WEAPON2H/…), a structured stat table keyed by the game's ownGetItemStatskeys (so enchant stats sum straight into item totals), and theSpellItemEnchantmentid that maps a worn enchant back to its recipe. - All three are extracted authoritatively from the client data (
SpellEquippedItemsfor the slot; the enchant's DBC effects for the stats) — no recipe-name guessing, no effect-string parsing, so they hold up across every locale. Purely additive; LibStub MINOR → 6.
v1.2.2 (2026-07-04) — Complete the spec map for TBC/Wrath
- Fixed
requiredSpeccoverage: v1.2.1 read the spec gate off the recipe scroll (how Vanilla encodes it), but TBC/Wrath moved it onto the crafted item itself (e.g. Lionheart Blade → Master Swordsmith), so every post-Vanilla spec recipe shipped untagged. The generator now matches the produced item too — newly tagged: 65 TBC + 72 Wrath + 2 Vanilla recipes across Blacksmithing, Leatherworking and Engineering. Purely additive; LibStub MINOR → 5. - Fixed Mooncloth Tailoring: the spec map used
26802(“Detect Amore”, a holiday spell) instead of Mooncloth's real id26798, so Mooncloth recipes were never tagged. Corrected — 3 recipes per build, matching Spellfire and Shadoweave.
v1.2.1 (2026-07-02) — Specialization requirements
- Spec-gated recipes now carry a
requiredSpecfield — the specialization spell needed to learn them (Dragonscale/Elemental/Tribal Leatherworking, Armorsmith/Weaponsmith Blacksmithing, the Tailoring and Engineering specs) — so consumers can hide recipes a character's spec can't learn or attribute a crafter to a spec. Covers Vanilla/TBC/Wrath; LibStub MINOR → 4. - Data fixes: Basic Campfire dropped from Cooking (it produces no item), and Crystal Infused Bandage (a TBC bandage) removed from the Vanilla First Aid set.
v1.2.0 (2026-05-30) — Core/names data split
- De-duplicated the locale-independent data: structural fields (difficulty, reagents, ids, …) now load once per game from a
_corefile, and each language ships onlyname+effect— instead of every locale carrying a full self-contained copy. Smaller download and a much lighter once-per-login parse, with no change to the query API.
Support
Questions, bug reports, or coverage requests — reach out on Discord.

