If you find this useful, consider supporting development via PayPal or Buy Me a Coffee.
Other addons:
- LazyProf - Profession leveling optimizer
- VendorSniper - Vendor restock sniper
- Silencer - Whisper gatekeeper
- PickMe - LFG listing browser
- EyesOnMe - PvP targeting awareness
Comprehensive crafting recipe database and API for World of Warcraft addon developers.
- Complete recipe data with skill levels, reagents, and difficulty thresholds
- Source information for every recipe (trainers, vendors, quests, drops, reputation, discovery)
- Fast lookups by spell ID or crafted item ID
- Skill-based filtering and difficulty calculation
- Per-expansion data: one install serves Classic Era / Vanilla, Season of Discovery, The Burning Crusade, and Wrath of the Lich King - it detects the running client and loads the matching recipe set automatically
CraftLib bundles a separate, cumulative recipe set for each Classic-family client and registers the correct one automatically (no configuration):
| Client | Professions | Skill cap |
|---|---|---|
| Classic Era / Vanilla | 9 | 300 |
| Season of Discovery | 9 | 300 |
| The Burning Crusade Classic | 10 (+ Jewelcrafting) | 375 |
| Wrath of the Lich King Classic | 11 (+ Inscription) | 450 |
Professions: Alchemy, Blacksmithing, Enchanting, Engineering, Leatherworking, Tailoring, Cooking, First Aid, Mining - plus Jewelcrafting (TBC and later) and Inscription (WotLK). Every recipe carries Wowhead-verified difficulty thresholds and a real acquisition source.
Add CraftLib as a dependency in your .toc file:
## Dependencies: CraftLib
-- Check if database is ready
if CraftLib:IsReady() then
-- Get all recipes for a profession
local recipes = CraftLib:GetRecipes("cooking")
-- Filter by skill level
local available = CraftLib:GetAvailableRecipes("cooking", 225)
-- Look up by spell ID
local recipe = CraftLib:GetRecipeBySpellId("cooking", 33359)
-- Look up by crafted item ID
local recipe = CraftLib:GetRecipeByItemId(27667)
-- Find all recipes that produce an item (reverse lookup)
local producers = CraftLib:GetRecipeByProduct(27667)
-- Get difficulty color (orange/yellow/green/gray)
local difficulty = CraftLib:GetRecipeDifficulty(recipe, 300)
end| Function | Description |
|---|---|
IsReady() |
Check if database has loaded |
GetProfessions() |
Get all registered professions |
GetProfession(key) |
Get a specific profession |
GetRecipes(key) |
Get all recipes for a profession |
GetAvailableRecipes(key, skillLevel) |
Filter recipes by skill level |
GetRecipeBySpellId(key, spellId) |
Look up recipe by spell ID |
GetRecipeByItemId(itemId) |
Look up recipe by crafted item ID |
GetRecipeByProduct(itemId) |
Find all recipes that produce an item |
GetRecipeDifficulty(recipe, skillLevel) |
Get difficulty color |
GetVendorBuyPrice(itemId) |
Per-unit vendor buy price (copper) for confirmed vendor-stocked reagents, or nil |
GetActiveProfile() |
Active client profile: "VANILLA", "TBC", "WOTLK", or "SOD" |
Each recipe contains:
| Field | Description |
|---|---|
id |
Spell ID |
name |
Recipe name |
itemId |
Crafted item ID |
skillRequired |
Minimum skill to learn and craft |
skillRange |
Difficulty thresholds {orange, yellow, green, gray} |
reagents |
List of {itemId, name, count} |
source |
How to obtain (trainer, vendor, quest, drop, reputation) |
expansion |
Which expansion the recipe belongs to |
CraftLib recipe data uses a three-phase pipeline for verified source accuracy:
# Extract certain sources (TRAINER, REPUTATION, QUEST) from DB2
python scripts/extract_db2_sources.py --version 2.5.5.65463 --profession FirstAid# Single-pass: fetches difficulty + source + trainer status from Wowhead
python scripts/fetch_wowhead_sources.py --profession FirstAid# Generate Lua from verified sources (fails if any PENDING)
python scripts/generate_recipes.py --version 2.5.5.65463 --profession FirstAidVerified sources are tracked under Data/Sources/<Bucket>/*.json for reproducibility. 55 removed/never-implemented recipes are filtered from the output (tracked in Data/Sources/removed_recipes.json). The pipeline is driven per client by the Makefile - make vanilla-all, make wotlk-all, and make sod-all regenerate each bucket from its own pinned game build.
- DB2 Tables: Spell, SpellName, SpellEffect, SpellReagents, Item, ItemSparse, SkillLine, SkillLineAbility, ItemEffect, Faction
- Wowhead: Source verification (VENDOR vs DROP) and difficulty thresholds
- Fetcher: db2-parser submodule
- LazyProf - Profession leveling optimizer
One install serves every live Classic-family client - CraftLib detects which one you are on and registers the matching recipe data:
- Classic Era / Anniversary (Vanilla)
- Season of Discovery
- The Burning Crusade Classic
- Wrath of the Lich King Classic - including the Titan (3.80) seasonal WotLK client
Hardcore runs on the Classic Era client and is covered by the Vanilla data.
All Rights Reserved - See LICENSE for details.