Developing WoW Addons
Expert guidance for building World of Warcraft addons with a focus on testability and maintenance.
Related Commands
- c-develop - Build or extend addon features workflow
CLI Commands (Use These First)
MANDATORY: Always use CLI commands before manual exploration.
Task Command
Create Addon mech call addon.create -i '{"name": "MyAddon"}'
Sync Junctions mech call addon.sync -i '{"addon": "MyAddon"}'
Validate TOC mech call addon.validate -i '{"addon": "MyAddon"}'
Check Libraries mech call libs.check -i '{"addon": "MyAddon"}'
Sync Libraries mech call libs.sync -i '{"addon": "MyAddon"}'
Capabilities
-
Event-Driven Design — Register events, handle callbacks, bucket patterns
-
Frame Architecture — Three-layer design (Core/Bridge/View), layouts, templates
-
SavedVariables — Database design, AceDB, versioning, defaults
-
Combat Lockdown — Protected functions, taint avoidance, secure handlers
-
API Resilience — Defensive programming, C_ namespaces, secret values
Routing Logic
Request type Load reference
Addon architecture, layers ../../docs/addon-architecture.md
Event registration, callbacks references/event-patterns.md
Frame creation, UI engineering references/frame-engineering.md
SavedVariables, AceDB references/saved-variables.md
Combat lockdown, secure code references/combat-lockdown.md
Blizzard API, C_ namespaces references/api-patterns.md
MechanicLib integration ../../docs/integration/mechaniclib.md
Performance profiling ../../docs/integration/performance.md
Quick Reference
Create New Addon
mech call addon.create -i '{"name": "MyAddon", "author": "Name"}' mech call addon.sync -i '{"addon": "MyAddon"}'
Core Principles
-
Headless Core: Keep logic in pure Lua functions (Layer 1)
-
Event-Driven: Avoid OnUpdate polling; use events (Layer 2)
-
Defensive API: Always check for nil and use pcall for uncertain APIs
-
Combat Aware: Never modify protected frames in combat