/ ... / 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). Recommended archi for Windows on Arm64! |
MyPlugin.vst3/Contents/arm-win/MyPlugin.vst3 | folder contains the plug-in binary (32 bit dll for Arm classic architecture) |
MyPlugin.vst3/Contents/arm64-win/MyPlugin.vst3 | folder contains the plug-in binary (64 bit dll for Arm64 classic 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) |
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 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 |
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)