home / skills / falkicon / mechanic / s-develop
This skill helps you design World of Warcraft addons with event-driven patterns, SavedVariables, and resilient APIs using Ace3.
npx playbooks add skill falkicon/mechanic --skill s-developReview the files below or copy the command above to add this skill to your agents.
---
name: s-develop
description: >
Core WoW addon development patterns using Ace3 framework and Blizzard UI APIs.
Covers event-driven design, SavedVariables, frame architecture, and API resilience.
Use when building addons, designing systems, or integrating libraries.
Triggers: addon, WoW, Lua, Ace3, frame, event, SavedVariables, architecture.
---
# Developing WoW Addons
Expert guidance for building World of Warcraft addons with a focus on testability and maintenance.
## Related Commands
- [c-develop](../../commands/c-develop.md) - 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
1. **Event-Driven Design** — Register events, handle callbacks, bucket patterns
2. **Frame Architecture** — Three-layer design (Core/Bridge/View), layouts, templates
3. **SavedVariables** — Database design, AceDB, versioning, defaults
4. **Combat Lockdown** — Protected functions, taint avoidance, secure handlers
5. **API Resilience** — Defensive programming, C_ namespaces, secret values
## Routing Logic
| Request type | Load reference |
|--------------|----------------|
| Addon architecture, layers | [../../docs/addon-architecture.md](../../docs/addon-architecture.md) |
| Event registration, callbacks | [references/event-patterns.md](references/event-patterns.md) |
| Frame creation, UI engineering | [references/frame-engineering.md](references/frame-engineering.md) |
| SavedVariables, AceDB | [references/saved-variables.md](references/saved-variables.md) |
| Combat lockdown, secure code | [references/combat-lockdown.md](references/combat-lockdown.md) |
| Blizzard API, C_ namespaces | [references/api-patterns.md](references/api-patterns.md) |
| MechanicLib integration | [../../docs/integration/mechaniclib.md](../../docs/integration/mechaniclib.md) |
| Performance profiling | [../../docs/integration/performance.md](../../docs/integration/performance.md) |
## Quick Reference
### Create New Addon
```bash
mech call addon.create -i '{"name": "MyAddon", "author": "Name"}'
mech call addon.sync -i '{"addon": "MyAddon"}'
```
### Core Principles
1. **Headless Core**: Keep logic in pure Lua functions (Layer 1)
2. **Event-Driven**: Avoid `OnUpdate` polling; use events (Layer 2)
3. **Defensive API**: Always check for `nil` and use `pcall` for uncertain APIs
4. **Combat Aware**: Never modify protected frames in combat
This skill teaches core World of Warcraft addon development patterns using Ace3 and Blizzard UI APIs. It focuses on maintainable, testable architecture, event-driven design, SavedVariables management, and resilient API usage. Use it to build robust addons that behave safely in combat and under changing game APIs.
I guide you through a three-layer frame architecture (Core/Bridge/View), event registration patterns, and AceDB-backed SavedVariables. The skill shows defensive techniques for calling Blizzard C_ namespaces, avoiding taint, and designing secure handlers for combat lockdown. It also centralizes debugging, error capture, and performance monitoring practices for in-game testing.
How do I structure SavedVariables to support upgrades?
Use AceDB with a clearly versioned defaults table, run a migration step on load that checks db.version and applies transformations before use.
When should I use pcall versus explicit nil checks?
Use explicit checks for expected nils and structural validation; reserve pcall for calls to APIs that may throw or for optional libraries where failures are acceptable.