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
OnUpdatepolling; use events (Layer 2) - Defensive API: Always check for
niland usepcallfor uncertain APIs - Combat Aware: Never modify protected frames in combat