Skip to main content
iPlug2 supports building Windows audio plugins using Visual Studio 2019 or 2022, targeting both x64 and ARM64EC architectures.

Prerequisites

1

Install Visual Studio 2019 or 2022

Download from visualstudio.microsoft.comRequired workload:
  • Desktop development with C++
2

Install ARM64EC build tools (optional)

For ARM64 Windows support:
  1. Open Visual Studio Installer
  2. Click Modify on your installation
  3. Go to Individual Components
  4. Search for “ARM64EC” and install:
    • MSVC v143 - VS 2022 C++ ARM64EC build tools (Latest)
3

Download SDKs (optional)

If building VST3, AAX, or other formats:
cd iPlug2\Dependencies
download-iplug-sdks.sh  # Requires Git Bash or WSL

Supported Architectures

x64

Standard 64-bit Intel/AMD processorsDefault architecture for Windows plugins

ARM64EC

ARM64 with x64 emulation compatibilityNative ARM64 performance, compatible with x64 hosts
ARM64EC allows ARM64 plugins to run natively on ARM64 Windows devices while remaining compatible with x64 DAWs running under emulation.

Project Structure

Each plugin has a Visual Studio solution (.sln) containing multiple projects:
MyPlugin/
├── MyPlugin.sln                    # Main solution file
├── config/
│   └── MyPlugin-win.props         # Shared build properties
└── projects/
    ├── MyPlugin-app.vcxproj       # Standalone app
    ├── MyPlugin-vst3.vcxproj      # VST3 plugin
    ├── MyPlugin-vst2.vcxproj      # VST2 plugin (deprecated)
    ├── MyPlugin-clap.vcxproj      # CLAP plugin
    └── MyPlugin-aax.vcxproj       # AAX plugin (requires SDK)

Building with Visual Studio

Opening the Project

1

Open the solution

Double-click MyPlugin.sln or:
start MyPlugin.sln
2

Select configuration

Choose from the toolbar:
  • Debug - Development with full debug symbols
  • Release - Optimized for distribution
  • Tracer - Performance profiling
3

Select platform

Choose architecture:
  • x64 - Standard 64-bit
  • ARM64EC - ARM64 with x64 compatibility
4

Build

Build > Build Solution or press Ctrl+Shift+B

Building from Command Line

# Build entire solution (x64, Release)
msbuild MyPlugin.sln /p:Configuration=Release /p:Platform=x64

# Build specific project
msbuild MyPlugin.sln /t:MyPlugin-vst3 /p:Configuration=Release /p:Platform=x64

# Build ARM64EC
msbuild MyPlugin.sln /p:Configuration=Release /p:Platform=ARM64EC

# Parallel build (faster)
msbuild MyPlugin.sln /p:Configuration=Release /p:Platform=x64 /m

Build Output

Built plugins are placed in build-win/ with platform-specific naming:

x64 Output

MyPlugin/build-win/
├── MyPlugin_x64.exe               # Standalone app
├── MyPlugin_x64.dll               # VST2
├── MyPlugin.vst3/
│   └── Contents/
│       └── x86_64-win/
│           └── MyPlugin.vst3      # VST3
├── MyPlugin.clap                  # CLAP
└── MyPlugin.aaxplugin/
    └── Contents/
        └── x64/
            └── MyPlugin.aaxplugin # AAX

ARM64EC Output

MyPlugin/build-win/
├── MyPlugin_ARM64EC.exe
├── MyPlugin_ARM64EC.dll
├── MyPlugin.vst3/
│   └── Contents/
│       └── arm64ec-win/
│           └── MyPlugin.vst3
├── MyPlugin.clap
└── MyPlugin.aaxplugin/
    └── Contents/
        └── ARM64EC/
            └── MyPlugin.aaxplugin
VST3 bundles can contain both x64 and ARM64EC binaries in a single .vst3 folder.

Deployment Paths

Plugins are automatically copied to standard locations after building:
FormatDefault PathNotes
VST3%LOCALAPPDATA%\Programs\Common\VST3Per-user, no admin required
VST2%PROGRAMFILES%\VstPluginsSystem-wide
CLAP%LOCALAPPDATA%\Programs\Common\CLAPPer-user, no admin required
AAX%COMMONPROGRAMFILES%\Avid\Audio\Plug-InsSystem-wide
Per-user paths (%LOCALAPPDATA%) don’t require administrator privileges and are recommended for development.

Customizing Deployment

Edit common-win.props to change deployment paths:
<VST3_X64_PATH>C:\MyCustomPath\VST3</VST3_X64_PATH>
<VST3_ARM64EC_PATH>C:\MyCustomPath\VST3</VST3_ARM64EC_PATH>

Debugging

Setting Up Debugger

The debugger is automatically configured to launch a host application.
1

Configure debug host

Edit common-win.props:
<VST3_X64_HOST_PATH>C:\Program Files\REAPER (x64)\reaper.exe</VST3_X64_HOST_PATH>
<CLAP_X64_HOST_PATH>C:\Program Files\Bitwig Studio\Bitwig Studio.exe</CLAP_X64_HOST_PATH>
2

Start debugging

Press F5 or Debug > Start DebuggingVisual Studio will:
  1. Build the plugin
  2. Copy it to the deployment path
  3. Launch your DAW
  4. Attach the debugger
3

Load the plugin

In your DAW, load the plugin on a trackBreakpoints in Visual Studio will now trigger
Ensure your plugin is built with Debug configuration. Release builds have limited debug symbols.

Debug Host Variables

VariableDescriptionExample
VST3_X64_HOST_PATHVST3 debug host (x64)REAPER, Ableton Live
VST3_ARM64EC_HOST_PATHVST3 debug host (ARM64EC)REAPER (ARM64)
CLAP_X64_HOST_PATHCLAP debug host (x64)Bitwig Studio
CLAP_ARM64EC_HOST_PATHCLAP debug host (ARM64EC)Bitwig (ARM64)
If REAPER is installed at the default path, it’s automatically set as the debug host.

Common Build Configurations

Runtime Library

All iPlug2 projects use static runtime to avoid DLL dependencies:
  • Release: /MT (Multi-threaded)
  • Debug: /MTd (Multi-threaded Debug)
Static runtime means plugins don’t require redistributable packages (e.g., vcredist_x64.exe).

Preprocessor Defines

Common defines (from common-win.props):
WIN32                    // Windows platform
NOMINMAX                 // Disable min/max macros
_CRT_SECURE_NO_DEPRECATE // Disable secure CRT warnings

// Format-specific
VST3_API                 // VST3 plugin
CLAP_API                 // CLAP plugin
AAX_API                  // AAX plugin
APP_API                  // Standalone app

// IPlug defines
IPLUG_EDITOR=1           // Has UI
IPLUG_DSP=1              // Has DSP

Include Paths

Automatically configured from common-win.props:
$(WDL_PATH)                      # WDL library
$(IPLUG_PATH)                    # IPlug core
$(IGRAPHICS_PATH)                # IGraphics
$(VST3_SDK)                      # VST3 SDK
$(CLAP_SDK)\include              # CLAP SDK
$(AAX_SDK)\Interfaces            # AAX SDK

ARM64EC Support

What is ARM64EC?

ARM64EC (ARM64 Emulation Compatible) allows:
  • Native ARM64 performance on Windows ARM devices
  • Compatibility with x64 hosts running under emulation
  • Gradual migration from x64 to ARM64

Native Speed

ARM64EC code runs at full native speed on ARM64 processors

x64 Compatible

Can be loaded by x64 DAWs running under emulation

Building ARM64EC

1

Verify ARM64EC tools

& "${env:ProgramFiles(x86)}\Microsoft Visual Studio\Installer\vswhere.exe" `
  -latest -requires Microsoft.VisualStudio.Component.VC.Tools.ARM64EC `
  -property installationPath
2

Build with ARM64EC platform

msbuild MyPlugin.sln /p:Configuration=Release /p:Platform=ARM64EC
3

Deploy to ARM64 paths

Plugins are automatically copied to ARM64EC-specific paths

Limitations

  • Skia graphics: Not yet supported for ARM64EC (use NanoVG)
  • Testing: Requires ARM64 Windows hardware (cannot run on x64 machines)
  • AAX: ARM64EC support depends on Avid’s SDK

Troubleshooting

Cause: Architecture mismatch or missing dependenciesSolution:
  • Ensure DAW architecture matches plugin (x64 DAW needs x64 plugin)
  • Check plugin is copied to correct path
  • Use Dependency Walker to check for missing DLLs
Cause: Incorrect debug host path or permissionsSolution:
  • Verify VST3_X64_HOST_PATH points to valid executable
  • Run Visual Studio as Administrator if needed
  • Check Windows Defender isn’t blocking the debugger
Cause: ARM64EC build tools not installedSolution:
  • Install ARM64EC build tools via Visual Studio Installer
  • Verify installation with vswhere command above
  • Note: Skia graphics not supported for ARM64EC

Build Scripts

Example batch script for automated builds:
build.bat
@echo off
setlocal

set SOLUTION=MyPlugin.sln
set CONFIG=Release

echo Building x64...
msbuild %SOLUTION% /p:Configuration=%CONFIG% /p:Platform=x64 /m

echo Building ARM64EC...
msbuild %SOLUTION% /p:Configuration=%CONFIG% /p:Platform=ARM64EC /m

echo Build complete!
pause

Next Steps

Code Signing

Sign plugins for distribution

Installer Creation

Create Windows installers

CMake Build

Alternative build system

Debugging Guide

Advanced debugging techniques