iPlug2 supports all major plugin formats through a unified API abstraction. Write your code once, compile to multiple formats.
VST3 Steinberg’s modern standard
VST2 is also supported but deprecated due to licensing. Not recommended for new projects.
Feature VST3 AUv2 AUv3 AAX CLAP WAM Windows ✅ ❌ ❌ ✅ ✅ ✅ macOS ✅ ✅ ✅ ✅ ✅ ❌ iOS ❌ ❌ ✅ ❌ ❌ ❌ Linux ✅ ❌ ❌ ❌ ✅ ❌ Web ❌ ❌ ❌ ❌ ❌ ✅ Sidechain ✅ ✅ ✅ ✅ ✅ ✅ MIDI I/O ✅ ✅ ✅ ✅ ✅ ✅ Multi-bus ✅ ✅ ✅ ✅ ✅ ✅ Sample Accurate ✅ ⚠️ ✅ ⚠️ ✅ ✅ Open Standard ❌ ❌ ❌ ❌ ✅ ✅
VST3
Steinberg’s VST3 is the most widely supported plugin format across DAWs.
Architecture
VST3 uses a separated processor/controller architecture:
class IPlugVST3 : public IPlugAPIBase ,
public IPlugVST3ProcessorBase , // Audio processing
public IPlugVST3ControllerBase , // UI/parameters
public Steinberg :: Vst :: SingleComponentEffect
Features
Platform Support
Configuration
VST3 Capabilities
Sample-accurate automation
Multiple input/output buses
Sidechain support
Context menus in host
Channel context information
Preset management
MIDI mapping
// VST3-specific: MIDI CC mapping
Steinberg :: tresult getMidiControllerAssignment (
Steinberg :: int32 busIndex ,
Steinberg :: int16 channel ,
Steinberg :: Vst :: CtrlNumber midiCCNumber ,
Steinberg :: Vst :: ParamID & tag
);
Platforms
✅ Windows (64-bit)
✅ macOS (Intel & Apple Silicon)
✅ Linux
File Extensions
.vst3 - VST3 bundle (all platforms)
Installation Paths
Windows: C:\Program Files\Common Files\VST3\
macOS: /Library/Audio/Plug-Ins/VST3/
Linux: ~/.vst3/
#define VST3_SUBCATEGORY "Fx"
// Options: "Fx", "Instrument", "Analyzer", etc.
#define PLUG_CHANNEL_IO "1-1 2-2"
// Mono-to-mono and stereo-to-stereo
#define PLUG_LATENCY 0
// Report latency in samples
See VST3 categories: Fx, Instrument, Spatial, Analyzer, Delay, Distortion, Dynamics, EQ, Filter, Mastering, Modulation, Restoration, Reverb, Surround, Tools
VST3 Specifics
VST3 has a separated state model. Use SerializeVST3CtrlrState() and UnserializeVST3CtrlrState() for UI-only state if needed (rare).
// Usually you only need this
virtual bool SerializeState ( IByteChunk & chunk ) const {
return SerializeParams (chunk);
}
// VST3-specific controller state (rare)
virtual bool SerializeVST3CtrlrState ( IByteChunk & chunk ) const {
return true ; // Usually not needed
}
Audio Unit v2 (AUv2)
Apple’s legacy Audio Unit format for macOS. Still widely used but being replaced by AUv3.
Architecture
class IPlugAU : public IPlugAPIBase ,
public IPlugProcessor
Features
Platform Support
Configuration
AUv2 Capabilities
macOS native format
Parameter units (dB, Hz, etc.)
Preset management
Factory preset support
Multi-bus I/O
Sidechain inputs
// AUv2 parameter units affect host display
GetParam (kFreq)-> InitFrequency ( "Frequency" , 1000. , 20. , 20000. );
// Automatically sets EParamUnit::kUnitFrequency
Parameter Units enum EParamUnit {
kUnitPercentage , kUnitSeconds , kUnitMilliseconds ,
kUnitDB , kUnitFrequency , kUnitCents , kUnitMIDINote ,
kUnitBPM , kUnitPan , kUnitPhase , kUnitDegrees ,
kUnitLinearGain , kUnitOctaves , kUnitRate ,
kUnitCustom // Use custom label
};
Platforms
✅ macOS only (Intel & Apple Silicon)
❌ iOS (use AUv3)
File Extensions Installation Paths
macOS: /Library/Audio/Plug-Ins/Components/
User: ~/Library/Audio/Plug-Ins/Components/
AUv2 plugins must be signed and notarized for macOS 10.15+ (Catalina and later).
#define PLUG_TYPE 0
// 0 = Effect, 1 = Instrument, 2 = MIDI Effect
#define AUV2_ENTRY IPlugEffect_Entry
#define AUV2_ENTRY_STR "IPlugEffect_Entry"
#define AUV2_FACTORY IPlugEffect_Factory
#define AUV2_VIEW_CLASS IPlugEffect_View
#define AUV2_VIEW_CLASS_STR "IPlugEffect_View"
AUv2 Types (derived from PLUG_TYPE):
'aufx' - Audio effect
'aumu' - Music device (instrument)
'aumf' - MIDI effect
'augn' - Generator (no input)
AUv2 Specifics
// Get track name (AUv2 & AAX support this)
void GetTrackName ( WDL_String & str ) override ;
// AUv2 uses component manager on older macOS
static OSStatus IPlugAUEntry ( ComponentParameters * pParams , void* pPlug );
Audio Unit v3 (AUv3)
Apple’s modern Audio Unit format for macOS and iOS with app extensions.
Architecture
class IPlugAUv3 : public IPlugAPIBase ,
public IPlugProcessor
Features
Platform Support
Configuration
AUv3 Capabilities
App extension architecture (sandbox)
iOS support (iPad/iPhone)
Sample-accurate parameter events
Inter-app audio
State saving/restoration
SwiftUI integration possible
// AUv3 uses event-based processing
void ProcessWithEvents (
AudioTimeStamp const* timestamp ,
uint32_t frameCount ,
AURenderEvent const* events ,
ITimeInfo & timeInfo
);
Platforms
✅ macOS 10.11+ (Intel & Apple Silicon)
✅ iOS 9+
❌ Windows, Linux
Distribution
Requires host app (container)
Distributed via App Store or direct
Can include iOS app with AUv3
Example: AUv3 on iPad MyPlugin.app/
PlugIns/
MyPluginAU.appex ← AUv3 extension
#define APP_COPY_AUV3 1
// Copy AUv3 to app bundle
#define BUNDLE_NAME "IPlugEffect"
#define BUNDLE_MFR "AcmeInc"
#define BUNDLE_DOMAIN "com"
// Bundle ID: com.AcmeInc.IPlugEffect
AUv3 requires:
App entitlements
Audio component description in Info.plist
Code signing
Sandboxing (on iOS)
AUv3 Specifics
AUv3 uses parameter addresses instead of indices. iPlug2 handles the mapping automatically.
// Internal mapping between param indices and AU addresses
void AddParamAddress ( int paramIdx , uint64_t paramAddress );
uint64_t GetParamAddress ( int paramIdx );
int GetParamIdx ( uint64_t paramAddress );
AAX
Avid’s plugin format for Pro Tools. Requires AAX SDK (free registration required).
Architecture
class IPlugAAX : public IPlugAPIBase ,
public IPlugProcessor ,
public AAX_CIPlugParameters
Features
Platform Support
Configuration
AAX Capabilities
Native Pro Tools integration
AudioSuite (offline processing)
Stem formats (multi-channel)
Track naming
Pro Tools automation
Parameter highlighting
// AAX-specific: parameter highlighting in Pro Tools
AAX_Result SetControlHighlightInfo (
AAX_CParamID iParameterID ,
AAX_CBoolean iIsHighlighted ,
AAX_EHighlightColor iColor
);
Platforms
✅ Windows (64-bit)
✅ macOS (Intel & Apple Silicon)
❌ iOS, Linux
File Extensions Installation Paths
Windows: C:\Program Files\Common Files\Avid\Audio\Plug-Ins\
macOS: /Library/Application Support/Avid/Audio/Plug-Ins/
AAX plugins must be signed by Avid (PACE iLok). Development signing available for testing.
#define AAX_TYPE_IDS 'IEF1' , 'IEF2'
#define AAX_TYPE_IDS_AUDIOSUITE 'IEA1' , 'IEA2'
#define AAX_PLUG_MFR_STR "Acme"
#define AAX_PLUG_NAME_STR "IPlugEffect \n IPEF"
#define AAX_PLUG_CATEGORY_STR "Effect"
#define AAX_DOES_AUDIOSUITE 1
AAX Categories:
EQ, Dynamics, PitchShift, Reverb, Delay, Modulation, Harmonic, NoiseReduction, Dither, SoundField, Effect
AAX Specifics
// AAX parameter IDs are offset by 1
const int kAAXParamIdxOffset = 1 ;
// AAX processing is page-table based
// iPlug2 handles this automatically
// Get track name (works in Pro Tools)
void GetTrackName ( WDL_String & str ) override ;
CLAP
CLever Audio Plug-in - modern open-source plugin standard created by the u-he team.
Architecture
class IPlugCLAP : public IPlugAPIBase ,
public IPlugProcessor ,
public ClapPluginHelper
Features
Platform Support
Configuration
CLAP Capabilities
Sample-accurate parameter automation
Modern C++ design
Open standard (no licensing)
Note expressions (MPE-like)
Polyphonic modulation
Voice info/management
Extensible architecture
// CLAP uses event-based parameter changes
struct ParamToHost {
enum class Type { Begin , Value , End };
Type mType;
int mIdx;
double mValue;
};
CLAP has the most modern feature set: note expressions, polyphonic modulation, and flexible extension mechanism.
Platforms
✅ Windows (64-bit)
✅ macOS (Intel & Apple Silicon)
✅ Linux
❌ iOS, Web
File Extensions
.clap - CLAP bundle (all platforms)
Installation Paths
Windows: C:\Program Files\Common Files\CLAP\
macOS: /Library/Audio/Plug-Ins/CLAP/
Linux: ~/.clap/ or /usr/lib/clap/
Host Support
Bitwig Studio (full support)
Reaper (full support)
FL Studio (in development)
Many more adopting
#define CLAP_MANUAL_URL "https://example.com/manual.pdf"
#define CLAP_SUPPORT_URL "https://example.com/support"
#define CLAP_DESCRIPTION "A simple audio effect"
#define CLAP_FEATURES "audio-effect"
// Features: "audio-effect", "instrument", "synthesizer",
// "delay", "reverb", "distortion", etc.
See full feature list: CLAP features
CLAP Specifics
// CLAP uses parameter gestures (begin/change/end)
void BeginInformHostOfParamChange ( int idx ) override ;
void InformHostOfParamChange ( int idx , double normalizedValue ) override ;
void EndInformHostOfParamChange ( int idx ) override ;
// CLAP tail size is dynamic
void SetTailSize ( int tailSize ) override ;
WAM (Web Audio Modules)
Web Audio Modules run in browsers using WebAssembly. Perfect for demos and web-based DAWs.
Architecture
class IPlugWAM : public IPlugAPIBase ,
public IPlugProcessor ,
public WAM :: Processor // WebAssembly processor
Features
Platform Support
Configuration
WAM Capabilities
Runs in web browsers
WebAssembly (WASM) compilation
Web Audio API integration
Real-time audio in browser
MIDI support
SysEx support
Message passing (JS ↔ C++)
// WAM-specific message handling
void onMessage ( char* verb , char* res , double data ) override ;
void onMessage ( char* verb , char* res , char* data ) override ;
void onParam ( uint32_t idparam , double value ) override ;
Platforms
✅ Web browsers (Chrome, Firefox, Safari, Edge)
✅ All desktop platforms via browser
✅ Mobile browsers (iOS Safari, Chrome Mobile)
❌ Native (use other formats)
Deployment
Static web hosting
CDN distribution
Embedded in web apps
Web DAWs supporting WAM:
WebAudioModules.org hosts
AudioMass
Amped Studio (planned)
// Same config as other formats
#define PLUG_NAME "IPlugEffect"
#define PLUG_CHANNEL_IO "2-2"
// WAM compiles to WebAssembly
// Build with Emscripten:
// emcc -O3 -s WASM=1 ...
UI Options for WAM:
IGraphics (compiled to WebGL)
Web UI (HTML/CSS/JavaScript)
Canvas-based custom UI
WAM Specifics
WAM runs in AudioWorkletGlobalScope (sandboxed). Limited access to system resources.
// WAM lifecycle
const char* init ( uint32_t bufsize , uint32_t sr , void* pDesc ) override ;
void terminate () override ;
void resize ( uint32_t bufsize ) override ;
// WAM uses different message system (no direct MIDI send)
void SetLatency ( int samples ) override {} // Not supported
bool SendMidiMsg ( const IMidiMsg & msg ) override { return false ; }
Maximum Compatibility VST3 + AUv2 Covers Windows, macOS, and most DAWs.
Pro Tools AAX + VST3 + AUv2 Adds Pro Tools support (requires AAX SDK and signing).
Modern/Future CLAP + VST3 CLAP has best features, VST3 for compatibility.
iOS/Mobile AUv3 Only option for iOS. Can include in app.
Web/Demos WAM Share plugins via URL, no installation.
Everything All Formats iPlug2 can compile to all formats from same code!
iPlug2 uses duplicate projects for each format:
MyPlugin/
MyPlugin.cpp
MyPlugin.h
config.h
projects/
MyPlugin-app.vcxproj (Standalone)
MyPlugin-vst3.vcxproj (VST3)
MyPlugin-au.xcodeproj (AUv2)
MyPlugin-auv3.xcodeproj (AUv3)
MyPlugin-aax.vcxproj (AAX)
MyPlugin-clap.vcxproj (CLAP)
MyPlugin-wam.vcxproj (WAM)
The duplicate.py script creates these projects automatically from templates. Run it once, then build any format.
Available Formats:
VST3
AAX
CLAP
Standalone App
Visual Studio Required:
VS 2019 or later
Windows 10 SDK
Code Signing:
Recommended for distribution
Not required for development
Available Formats:
VST3
AUv2
AUv3
AAX
CLAP
Standalone App
Xcode Required:
Xcode 12+ (for Apple Silicon)
Command Line Tools
Code Signing:
Required for distribution (App Store or notarization)
Developer ID or App Store signing
macOS 10.15+ requires notarization for plugins.
Available Formats: Requirements:
Xcode 12+
iOS Deployment Target: iOS 9+
App wrapper (AUv3 is extension)
Distribution:
App Store (requires Apple Developer account)
TestFlight for beta testing
Available Formats: Build Tools:
GCC 9+ or Clang 10+
CMake or Make
Dependencies:
X11, ALSA, or JACK
GTK3 (for file dialogs)
Next Steps
Architecture Understand the plugin architecture and lifecycle
Parameters Learn parameter types and automation
Audio Processing Master ProcessBlock and real-time audio
Project Structure Explore config.h and project organization