/ ... / 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:
Folder | Description |
---|---|
MyPlugin.vst3/Contents/Resources/ | folder contains all additional resource files useful for the plug-in |
MyPlugin.vst3/Contents/Resources/moduleinfo.json | the plug-in’s module info |
MyPlugin.vst3/Contents/MacOS/ | folder contains the plug-in’s macOS universal binary (Mach-O) |
MyPlugin.vst3/Contents/Info.plist | the plug-in’s property list |
MyPlugin.vst3/Contents/PkgInfo | specifies 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:
Folder | Description |
---|---|
MyPlugin.vst3/Contents/Resources/ | folder contains all additional resource files useful for the plug-in |
MyPlugin.vst3/Contents/Resources/moduleinfo.json | the plug-in’s module info |
MyPlugin.vst3/Contents/x86-win/MyPlugin.vst3 | folder contains the plug-in binary (32 bit dll for i386 architecture) |
MyPlugin.vst3/Contents/x86_64-win/MyPlugin.vst3 | folder contains the plug-in binary (64 bit dll for x86_64 architecture) |
MyPlugin.vst3/Contents/arm64ec-win/MyPlugin.vst3 | folder contains the plug-in binary (64 bit dll for Arm64EC architecture). On Windows on Arm, an Arm64EC or x64 application can load this architecture. |
MyPlugin.vst3/Contents/arm-win/MyPlugin.vst3 | folder contains the plug-in binary (32 bit dll for Arm classic architecture) (deprecated) |
MyPlugin.vst3/Contents/arm64-win/MyPlugin.vst3 | folder contains the plug-in binary (64 bit dll for Arm64 classic architecture). On Windows on Arm, only an Arm64 application can load this architecture. |
MyPlugin.vst3/Contents/arm64x-win/MyPlugin.vst3 | folder contains the plug-in binary for both Arm64 code and Arm64EC code together (64 bit dll for Arm64 classic architecture). On Windows on Arm, an Arm64EC or an Arm64 or x64 application can load this architecture. Recommended architecture for Windows on Arm! |
MyPlugin.vst3/desktop.ini | used to set custom icon in Windows Explorer |
MyPlugin.vst3/Plugin.ico | customized 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 folder (bundle) and the DLL (.vst3) file must have the same name!
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:
OS | PC Architecture | Host Process App | Compatible Plug-in Architectures |
---|---|---|---|
Windows 10 | Intel x86 | Intel x86 | Intel x86 |
Windows 10/11 | Intel x64 | Intel x64 | Intel x64* |
Windows 10/11 | Intel x64 | Intel x86 | Intel x86 |
Windows 11 | Arm64 | Arm64 Classic | Arm64 Classic, Arm64X |
Windows 11 | Arm64 | Arm64EC | Arm64X, Arm64EC, Intel x64 |
Windows 11 | Arm64 | Intel x64 | Arm64EC, 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:
Folder | Description |
---|---|
MyPlugin.vst3/Contents/Resources/ | folder contains all additional resource files useful for the plug-in |
MyPlugin.vst3/Contents/Resources/moduleinfo.json | the plug-in’s module info |
MyPlugin.vst3/Contents/i386-linux | folder contains the plug-in binary (32 bit shared library .so for Kernel Architecture i386) |
MyPlugin.vst3/Contents/x86_64-linux | folder contains the plug-in binary (64 bit shared library .so for Kernel Architecture x86_64) |
MyPlugin.vst3/Contents/XXX-linux | with 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 |
ⓘ Note
The folder (bundle) and the shared library (.so) file must have the same name!
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)