You have built a functional addon for World of Warcraft. It works, it solves a real problem, and you are proud of it. But is it reallyfinished if it does not have its own custom branding? A unique minimap button, a professional icon in the AddOns list, and custom in-game textures are what separate a "script someone threw together" from a polished, studio-quality addon. In this guide, we walk through the exact process we use at The Lav Forge to brand our addons.
1. File Format Requirements
The WoW engine is an old-school renderer with strict requirements for its graphics. If your image does not meet these criteria, it will either appear as a solid green box or not render at all.
Dimensions: Power of 2
Your image must have dimensions that are a power of 2. This is a hard requirement inherited from old-school GPU texture memory alignment.
16x16, 32x32, 64x64, 128x128, 256x256100x100, 50x50, 48x48, 200x200File Format Options
- .TGA (Truevision Graphics Adapter): The most common and reliable choice. Save it as 32-bit to include an alpha channel for transparency, and make sure it is uncompressed. Most image editing software (Photoshop, GIMP, Paint.NET) supports TGA export.
- .BLP (Blizzard Texture): This is WoW's proprietary texture format. It offers better compression and integration with the game engine, but you will need a conversion tool like BLPConverter to create them. BLP is what Blizzard uses internally for all game textures.
2. Folder Structure
Keeping your files organized is critical, especially once your addon grows past a single Lua file. We recommend creating a dedicated UI subfolder inside your addon directory for all custom textures:
Interface/
AddOns/
YourAddonName/
YourAddonName.toc
YourAddonName.lua
UI/
logo.tga -- Your addon icon (64x64)
minimap.tga -- Minimap button icon (32x32)
banner.tga -- Optional: settings panel header3. The TOC File: Addon List Icon
To make your custom icon appear in the Interface Options menu and the AddOns list at the character select screen, you need to add the ## IconTexture tag to your .toc manifest file.
## Before (generic Blizzard icon ID): ## IconTexture: 134400
## After (your custom texture): ## IconTexture: Interface\AddOns\YourAddonName\UI\logo
.toc file are only read when the game client first launches. You cannot simply /reload to see metadata changes. You must fully close and restart WoW.4. Lua Integration: Minimap Button Icons
Now for the exciting part: putting your custom logo on the actual in-game minimap button. In your UI Lua code, you reference the texture path using the SetTexture API method:
-- Create a texture on your minimap button framelocalicon =minimapButton:CreateTexture(nil, "ARTWORK")-- Point to your custom TGA/BLP file (omit the file extension!)icon:SetTexture("Interface\\\\AddOns\\\\YourAddonName\\\\UI\\\\logo")-- Size and position it relative to the buttonicon:SetSize(20, 20)icon:SetPoint("TOPLEFT", minimapButton, "TOPLEFT", 7, -6)
Notice the double backslashes (\\) in the Lua path. A single backslash is an escape character in Lua strings, so you must double it. Also notice that you omit the file extension (.tga or .blp). WoW resolves the correct file automatically.
5. Testing Your Changes
How you test depends on what you changed:
- Lua code only (e.g., changed the
SetTexturepath): Type/reloadin game chat. Your minimap button and in-game textures will update instantly. - Added new files or changed the .toc: You must close WoW completely and restart the game client. The .toc manifest is only parsed at launch.