diff --git a/.github/workflows/example-plugins.yml b/.github/workflows/example-plugins.yml
index 295953e2..48975cc2 100644
--- a/.github/workflows/example-plugins.yml
+++ b/.github/workflows/example-plugins.yml
@@ -172,6 +172,7 @@ jobs:
!bin/*-dssi.dylib
!bin/lv2
!bin/vst2
+ !bin/vst3
win32:
runs-on: ubuntu-20.04
@@ -321,3 +322,14 @@ jobs:
--suppressions=./utils/valgrind-dpf.supp \
/usr/lib/carla/carla-bridge-native vst2 ./bin/${p} "" 1>/dev/null; \
done
+ - name: Test VST3 plugins
+ run: |
+ for p in $(ls bin/ | grep vst3); do \
+ env CARLA_BRIDGE_DUMMY=1 CARLA_BRIDGE_TESTING=native \
+ valgrind \
+ --error-exitcode=255 \
+ --leak-check=full \
+ --track-origins=yes \
+ --suppressions=./utils/valgrind-dpf.supp \
+ /usr/lib/carla/carla-bridge-native vst3 ./bin/${p} "" 1>/dev/null; \
+ done
diff --git a/utils/package-osx-bundles.sh b/utils/package-osx-bundles.sh
index 57a74844..32a52c9d 100755
--- a/utils/package-osx-bundles.sh
+++ b/utils/package-osx-bundles.sh
@@ -14,10 +14,12 @@ SNAME="$(echo ${NAME} | tr -d ' ' | tr '/' '-')"
rm -rf lv2
rm -rf vst2
+rm -rf vst3
-mkdir lv2 vst2
+mkdir lv2 vst2 vst3
mv *.lv2 lv2/
mv *.vst vst2/
+mv *.vst3 vst3/
pkgbuild \
--identifier "studio.kx.distrho.plugins.${SNAME}.lv2bundles" \
@@ -31,6 +33,12 @@ pkgbuild \
--root "${PWD}/vst2/" \
../dpf-${SNAME}-vst2bundles.pkg
+pkgbuild \
+ --identifier "studio.kx.distrho.plugins.${SNAME}.vst3bundles" \
+ --install-location "/Library/Audio/Plug-Ins/VST3/" \
+ --root "${PWD}/vst3/" \
+ ../dpf-${SNAME}-vst3bundles.pkg
+
cd ..
DPF_UTILS_DIR=$(dirname ${0})
diff --git a/utils/plugin.pkg/package.xml.in b/utils/plugin.pkg/package.xml.in
index 8959283b..dc8e24f2 100644
--- a/utils/plugin.pkg/package.xml.in
+++ b/utils/plugin.pkg/package.xml.in
@@ -11,8 +11,12 @@
@vst2bundleref@
+
+ @vst3bundleref@
+
+