s-develop
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 s
Files6
View on GitHubSKILL.md.claude/skills/s-develop/SKILL.md
GitHubDeveloping WoW Addons
Guidance for building World of Warcraft addons with a focus on testability and maintenance. Addon Lua is Lua 5.1 (WoW's runtime): no goto, no bit32, no integer division //, no <const>; use the bit library for bit operations.
Related Commands
- c-develop - Build or extend addon features workflow
MCP Tools
Call MCP tools directly (see using-mechanic); the generated command reference has every input.
| Task | MCP Tool |
|---|---|
| Create an addon from the template | addon.create(name="MyAddon") |
| Junction links into WoW clients | addon.sync(addon="MyAddon", dry_run=true) first, then for real after the user confirms |
| Validate the TOC | addon.validate(addon="MyAddon") |
| Library status / sync | libs.check(addon="MyAddon"), libs.sync(addon="MyAddon", dry_run=true) |
| Lint / format | addon.lint, addon.format (s-lint) |
| Verify in game | reload protocol in using-mechanic |
Capabilities
- Event-Driven Design — register events, handle callbacks, throttle
- Frame Architecture — Core/Bridge/View layering, layouts, templates (k-fenui)
- SavedVariables — AceDB, defaults, versioning
- Combat Lockdown — protected frames, taint avoidance, secure handlers
- API Resilience —
C_namespaces, feature detection, secret values (12.0+)
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, secret values | references/api-patterns.md |
| MechanicLib integration | ../../../docs/integration/mechaniclib.md |
| Performance profiling | ../../../docs/integration/performance.md |
| Long-form addon guide (secret values, packaging) | docs/addon-dev-guide/ |
Core Principles
- Headless Core: keep logic in pure Lua functions (Layer 1) so
sandbox.testand Busted can run it offline. - Event-Driven: avoid
OnUpdatepolling; use events andC_Timer(Layer 2). - Defensive API use: check for
nil, feature-detect new APIs,pcallonly where an API may genuinely error. - Combat aware: never move, hide or re-anchor protected frames in combat; queue it (references/combat-lockdown.md).
- Secret values: on 12.0+ some returns are opaque. Test with
issecretvalue(value)before arithmetic, comparison or concatenation. - Use the ecosystem:
MechanicLib:Logfor debug output, FenUI widgets for UI, FenCore for helpers (k-ecosystem). - Verify in game: after offline checks, follow the reload protocol; never claim in-game behaviour from a worktree edit alone.