This guide explains the Ship phase of the APC (Audio Plugin Coder) system, which handles packaging and distribution of plugins.
The Ship phase creates professional, cross-platform plugin installers ready for distribution to end users.
- Detects your current platform (Windows/macOS/Linux)
- Checks for local builds (already compiled plugins)
- Asks which platforms to include (interactive selection)
- Creates local installers (for current platform)
- Triggers GitHub Actions builds (for other platforms)
- Downloads build artifacts (from GitHub)
- Creates platform-specific installers (with license agreements)
- Packages final distribution (ZIP with all installers)
| Platform | VST3 | AU | Standalone | LV2 | Local Build | GitHub Actions |
|---|---|---|---|---|---|---|
| Windows | ✓ | - | ✓ | - | ✓ (native) | ✓ |
| macOS | ✓ | ✓ | ✓ | - | ✗ | ✓ |
| Linux | ✓ | - | ✓ | ✓ | ✗ | ✓ |
Before running Ship:
- Phase 4 (CODE) complete - Plugin implementation finished
- All tests passing - Audio engine validated
- Local build successful (for current platform)
# Using the skill trigger
/ship CloudWash
# Or run directly
powershell -ExecutionPolicy Bypass -File .\scripts\ship-local.ps1 -PluginName CloudWashThe workflow detects:
- Your current operating system
- Whether you have a local build available
Example output:
Current Platform: Windows
Local Build Status: Found
CRITICAL: The workflow always asks which platforms to include.
Menu displayed:
Select platforms to include:
[1] Current Platform - USE LOCAL BUILD
[2] Current Platform - BUILD WITH GITHUB ACTIONS
[3] Windows (VST3, Standalone) - GITHUB ACTIONS
[4] macOS (VST3, AU, Standalone) - GITHUB ACTIONS
[5] Linux (VST3, LV2, Standalone) - GITHUB ACTIONS
[6] ALL PLATFORMS - Use local for current, GitHub for others
Enter numbers (comma-separated) or 'all':
Scenario 1: Windows developer with local build, want macOS + Linux
Enter: 1,4,5
Result:
- Windows: Use local build
- macOS: Build on GitHub
- Linux: Build on GitHub
Scenario 2: Want to rebuild everything on GitHub
Enter: 3,4,5
Result:
- All platforms built on GitHub
- Consistent builds across platforms
Scenario 3: Just need one missing platform
Enter: 4
Result:
- Only macOS built on GitHub
- Fastest option for single platform
Scenario 4: Let the system decide
Enter: all
Result:
- Current platform uses local build
- Other platforms use GitHub Actions
If you selected to use local build:
Windows:
- Validates build artifacts exist
- Checks for Inno Setup (installer compiler)
- Generates
.issscript from template - Compiles installer executable
- Includes license agreement
- Supports custom installation path
Output:
dist/{PluginName}-{version}-Windows-Setup.exe
For platforms selected to build on GitHub:
- Verifies workflow file exists
- Checks git status (commits if needed)
- Creates and pushes tag
- Triggers
build-release.ymlworkflow
Tag format: v{version}-{PluginName}
Example: v1.0.0-CloudWash
After GitHub Actions completes:
# Using GitHub CLI
gh run download --dir dist/github-artifacts --pattern "*-$PluginName"Or manually from GitHub Actions page.
Windows (already done in Step 3):
- Professional
.exeinstaller - License agreement page
- Custom installation path
- Start Menu shortcuts
- Uninstaller
macOS (prepare on Windows, finalize on Mac):
- Creates installer scripts
- Prepares PKG/DMG structure
- Must run final packaging on macOS for signing
Linux (prepare on Windows, finalize on Linux):
- Creates AppImage structure
- Prepares DEB package
- Must run final packaging on Linux
Creates unified distribution package:
dist/{PluginName}-v{version}/
├── {PluginName}-{version}-Windows-Setup.exe (Windows installer)
├── {PluginName}-{version}-macOS.zip (macOS bundles)
├── {PluginName}-{version}-Linux.zip (Linux binaries)
├── README.md (Plugin documentation)
├── CHANGELOG.md (Version history)
├── LICENSE.txt (EULA)
└── INSTALL.md (Installation guide)
Final ZIP:
dist/{PluginName}-v{version}.zip
Features:
- ✓ License agreement display
- ✓ Custom installation path selection
- ✓ VST3 path auto-detection
- ✓ Component selection (VST3, Standalone, Presets)
- ✓ Start Menu shortcuts
- ✓ Uninstaller integration
- ✓ Silent install option (
/SILENT)
Installation Paths:
VST3: C:\Program Files\Common Files\VST3\
Standalone: C:\Program Files\{PluginName}\
Presets: C:\ProgramData\{PluginName}\Presets\
Formats:
- DMG: Drag-and-drop install
- PKG: System installer with component selection
Installation Paths:
VST3: /Library/Audio/Plug-Ins/VST3/
AU: /Library/Audio/Plug-Ins/Components/
Standalone: /Applications/
Note: macOS installers require code signing. The workflow prepares the structure; you must finalize on a Mac with a developer certificate.
Formats:
- AppImage: Portable, no installation required
- DEB: Debian/Ubuntu package
Installation Paths:
VST3: /usr/lib/vst3/
LV2: /usr/lib/lv2/
Standalone: /usr/bin/
Note: Linux packages should be built on Linux for proper dependency resolution.
All installers include a license agreement (EULA).
Default License: MIT License (from repository root)
Custom License: Place LICENSE.txt in your plugin folder:
plugins/{PluginName}/LICENSE.txt
License includes:
- Grant of license
- Permitted use
- Restrictions
- Disclaimer of warranty
- Limitation of liability
After shipping, the plugin state is updated:
{
"current_phase": "ship_complete",
"version": "v1.0.0",
"validation": {
"ship_ready": true
},
"distribution": {
"platforms": ["Windows", "macOS", "Linux"],
"local_build": ["Windows"],
"github_build": ["macOS", "Linux"]
}
}Cause: No build artifacts in build/ directory
Solution:
# Build first
powershell -ExecutionPolicy Bypass -File .\scripts\build-and-install.ps1 -PluginName CloudWash
# Then ship
/ship CloudWashCause: Inno Setup not installed
Solution:
- Download from https://jrsoftware.org/isdl.php
- Install with default settings
- Restart terminal
Or use ZIP distribution instead of installer.
Cause: Workflow file not committed
Solution:
git add .github/workflows/
git commit -m "Add GitHub Actions workflows"
git pushCause: GitHub Actions still running or failed
Solution:
- Check workflow status on GitHub
- Wait for completion
- Retry download
Cause: These platforms require native tools for final packaging
Solution:
- Copy prepared files to target platform
- Run final packaging scripts
- Or use the ZIP distributions directly
Always ensure your local build works before shipping:
.\scripts\build-and-install.ps1 -PluginName CloudWash- Save CI minutes: Use local build for current platform
- Consistent builds: Use GitHub for all platforms
- Quick fix: Build only the missing platform
Follow semantic versioning:
v1.0.0- Major releasev1.1.0- Feature additionv1.1.1- Bug fix
Before distributing:
- Test on clean systems
- Verify uninstall works
- Check all formats load in DAWs
Always update:
CHANGELOG.md- What changedREADME.md- User-facing documentationINSTALL.md- Installation instructions
# 1. Build locally first
.\scripts\build-and-install.ps1 -PluginName CloudWash
# 2. Start ship workflow
/ship CloudWash
# 3. Select platforms: 1,4,5 (Use local Windows, GitHub for macOS/Linux)
# 4. Wait for GitHub Actions
# - Go to GitHub → Actions
# - Monitor build progress
# 5. Download artifacts
gh run download --dir dist/github-artifacts
# 6. Create final distribution
# - Windows installer created locally
# - macOS/Linux prepared from GitHub artifacts# Already have Windows and Linux, just need macOS
/ship CloudWash
# Select: 4 (macOS only)
# Workflow triggers GitHub Actions for macOS only
# Fast and saves CI minutes# Want consistent builds across all platforms
/ship CloudWash
# Select: 3,4,5 (Build all on GitHub)
# Or select: all (uses local for current, GitHub for rest)- Test installers on target platforms
- Create GitHub Release (if not auto-created)
- Distribute to users
- Collect feedback
- Plan next version
- GitHub Actions CI/CD - Detailed workflow documentation
- Main README - Project overview
.agent/skills/skill_packaging/SKILL.md- Implementation details