/ ... / VST 3 Locations / Format

Plug-in Format Structure

On this page:

Related pages:


For the macOS platform

On the macOS platform, VST 3 plug-in is a standard macOS bundle, its file extension is ".vst3" and has the following folder structure:

FolderDescription
MyPlugin.vst3/Contents/Resources/folder contains all additional resource files useful for the plug-in
MyPlugin.vst3/Contents/Resources/moduleinfo.jsonthe plug-in’s module info
MyPlugin.vst3/Contents/MacOS/folder contains the plug-in’s macOS universal binary (Mach-O)
MyPlugin.vst3/Contents/Info.plistthe plug-in’s property list
MyPlugin.vst3/Contents/PkgInfospecifies the type and creator codes of the bundle (optional)

For the Windows platform

On the Windows platform, a VST 3 plug-in is organized as a bundle-like package (simple folder), its file extension is ".vst3" and has the following folder structure:

FolderDescription
MyPlugin.vst3/Contents/Resources/folder contains all additional resource files useful for the plug-in
MyPlugin.vst3/Contents/Resources/moduleinfo.jsonthe plug-in’s module info
MyPlugin.vst3/Contents/x86-win/MyPlugin.vst3folder contains the plug-in binary (32 bit dll for i386 architecture)
MyPlugin.vst3/Contents/x86_64-win/MyPlugin.vst3folder contains the plug-in binary (64 bit dll for x86_64 architecture)
MyPlugin.vst3/Contents/arm64ec-win/MyPlugin.vst3folder contains the plug-in binary (64 bit dll for Arm64EC architecture).
Recommended archi for Windows on Arm64!
MyPlugin.vst3/Contents/arm-win/MyPlugin.vst3folder contains the plug-in binary (32 bit dll for Arm classic architecture)
MyPlugin.vst3/Contents/arm64-win/MyPlugin.vst3folder contains the plug-in binary (64 bit dll for Arm64 classic architecture)
MyPlugin.vst3/Contents/arm64x-win/MyPlugin.vst3folder contains the plug-in binary for both Arm64 code and Arm64EC code together
(64 bit dll for Arm64 classic architecture)
MyPlugin.vst3/desktop.iniused to set custom icon in Windows Explorer
MyPlugin.vst3/Plugin.icocustomized plug-in icon

Note
In previous SDKs, the VST 3 plug-in was defined as a single dll file with the .vst3 extension. This has been deprecated since VST 3.6.10.

The file desktop.ini should contain:

desktop.ini

[.ShellClassInfo]
IconResource=Plugin.ico,0

and you should then change their attributes with this command line (s for system to make sure that Windows will use it for the folder/bundle, r for read-only and h for hidden (optional)):

attrib +s +r +h desktop.ini
attrib +r +h Plugin.ico

Limitation for loading Plug-in DLL in a Host (inside the same process)

See Microsoft Blogs about this:

OSPC ArchitectureHost Process AppCompatible Plug-in Architectures
Windows 10Intel x86Intel x86Intel x86
Windows 10/11Intel x64Intel x64Intel x64*
Windows 10/11Intel x64Intel x86Intel x86
Windows 11Arm64Arm64 ClassicArm64 Classic, Arm64X
Windows 11Arm64Arm64ECArm64X, Arm64EC, Intel x64
Windows 11Arm64Intel x64Arm64EC, Intel x64, Arm64X

"TLDR: Please offer both Arm64EC and x64 versions of your DAWs and plug-ins, and please stay up to date with the latest developer tooling and SDKs." (Pete Brown - Microsoft)

Note
With out-of-process/inter-process communication a host can overriden these limitations, by allowing, for example, an Arm64 Classic host to handle an Arm64EC plug-in.

Note
To learn more about Arm64X (new type of binary that can contain both the classic Arm64 code and Arm64EC code together), click here.

For the Linux platform

On Linux, a VST 3 plug-in is organized as a bundle-like package, its file extension is ".vst3", and it has the following folder structure:

FolderDescription
MyPlugin.vst3/Contents/Resources/folder contains all additional resource files useful for the plug-in
MyPlugin.vst3/Contents/Resources/moduleinfo.jsonthe plug-in’s module info
MyPlugin.vst3/Contents/i386-linuxfolder contains the plug-in binary (32 bit shared library .so for Kernel Architecture i386)
MyPlugin.vst3/Contents/x86_64-linuxfolder contains the plug-in binary (64 bit shared library .so for Kernel Architecture x86_64)
MyPlugin.vst3/Contents/XXX-linuxwith XXX the architecture name based on the output of command-line "uname -m" (machine hardware) + "-linux" for example: • armv3l-linux
• armv4b-linux
• armv4l-linux
• armv5tel-linux
• armv5tejl-linux
• armv6l-linux
• armv7l-linux
• armv8l-linux

Merged Bundle

Note that all the bundles can be merged to one, which allows to have a cross-platform bundle/folder.

For example:

./MyPlugin.vst3
    ├── Contents
    │   ├── Resources
    │   │   ├── Documentation
    │   │   │   ├── Manual.pdf
    │   │   │   └── WhatsNew.pdf
    │   │   ├── Help
    │   │   │   └── helpdoc.xml
    │   │   ├── Snapshots
    │   │   │   ├── 84E8DE5F92554F5396FAE4133C935A18_snapshot.png
    │   │   │   └── 84E8DE5F92554F5396FAE4133C935A18_snapshot_2.0x.png
    │   │   ├── VST XMLs
    │   │   │   └── AGain
    │   │   │       └── 84E8DE5F92554F5396FAE4133C935A18
    │   │   │           ├── Generic 8 Cells.xml
    │   │   │           └── WK-Audio ID 8 Cells.xml
    │   │   ├── moduleinfo.json
    │   │   └── MyPlugin.srf
    │   │
    │   ├── armv7l-linux
    │   │   └── MyPlugin.so
    │   │
    │   ├── i686-linux
    │   │   └── MyPlugin.so
    │   │
    │   ├── i386-linux
    │   │   └── MyPlugin.so
    │   │
    │   ├── x86_64-linux
    │   │   └── MyPlugin.so
    │   │
    │   ├── MacOS
    │   │   └── MyPlugin
    │   │
    │   ├── x86_64-win
    │   │   └── MyPlugin.vst3
    │   │
    │   ├── arm64ec-win
    │   │   └── MyPlugin.vst3
    │   │
    │   ├── Info.plist  (macOS Only)
    │   └── PkgInfo     (macOS Only)
    │
    ├── desktop.ini    (Windows only)
    └── Plugin.ico     (Windows only)