A fast World of Warcraft addon builder and deployer for local development. This iteration was mostly vibe coded, but works OK for my purposes.
- Parses
.pkgmetafiles - Caches external dependencies for fast rebuilds
- Supports Git and SVN externals
- Deploys to multiple WoW clients (retail, classic, anniversary, forever, PTR, beta)
- Watch mode - automatically rebuilds on file changes
- Colored terminal output with progress indicators
git clone https://github.com/Tuller/wowp.git
cd wowp
pipx install .python3 -m venv .venv
source .venv/bin/activate # On Windows: .venv\Scripts\activate
pip install -e ".[dev]"- Python 3.11+
- Git (for Git externals)
- SVN (for SVN externals)
WOW_HOMEenvironment variable set to your WoW installation directory
Run from your addon's directory (where .pkgmeta is located):
# Build and deploy to all flavors (retail + classic), live channel
wowp
# Watch mode - rebuild on file changes
wowp --watch # or -w
# Deploy to specific flavors/channels
wowp --retail # Retail only
wowp --classic # Classic only
wowp --retail --ptr # Retail PTR
wowp --classic --beta # Classic Beta
# Combine watch with flavor/channel selection
wowp --watch --retail # Watch and deploy to retail only
# Cache management
wowp --cache-info # Show cache statistics
wowp --refresh-externals # Force re-download all externals
wowp --clear-cache # Clear the cacheFlavors, channels, and the client directories they deploy to are defined in
src/wowp/targets.yaml. Each name maps to
$WOW_HOME/_<name>_/Interface/AddOns; directories that don't exist are skipped.
classic:
live: [classic, classic_era, anniversary, forever]
ptr: [classic_ptr, classic_era_ptr, anniversary_ptr, forever_ptr]To customize, copy that file to ~/.config/wowp/targets.yaml (or
$XDG_CONFIG_HOME/wowp/targets.yaml). If present, it replaces the bundled defaults
entirely (so later additions to the bundled file won't reach you). The --flavor/--channel
choices and the --<flavor>/--<channel> shorthand flags are generated from it; the default
channel is the first one listed.
package-as- Package nameexternals- Git/SVN dependencies (simple and expanded format)move-folders- Directory restructuring for multi-addon packagesignore- File patterns to exclude@project-version@keyword replacement in TOC files
External dependencies are cached at ~/.cache/wowp/externals/:
- Tagged or commit-pinned externals are cached forever
- Trunk/branch externals expire after 24 hours
- SVN repositories from the same base URL are fetched once and shared