SOLVED | VST3 Plugin Category with CMake

Hi, I’m working on a CI/CD workflow to compile my JUCE plugins remotely on the GITHUB servers with the Pamplejuce canvas.

It works well, but I struggle to define the VST3 Plugin Category.

With Xcode and Projucer, locally It’s easy to do and can set them to Instrument|Tools .

But with cmake I tried many ways (overriding for VST3 from the format list etc) but I always get the plugin to be seen as FX (others) in a VST3 host.

What’s the right way to define the VST3 plugin category with CMake ? Same with a custom plugin name specifically for VST3 ?

Thanks

Damien

The first one is easy, you just need to set VST3_CATEGORIES at juce_add_plugin(), for example:

juce_add_plugin(
... // the following is for an EQ plugin
        AU_MAIN_TYPE kAudioUnitType_Effect
        VST3_CATEGORIES EQ
        AAX_CATEGORY AAX_ePlugInCategory_EQ
...
)

See

The second one is a bit hard. I would guess that you need to pass the plugin name as an argument and build the plugin multiple times to get different names for VST3, AU, AAX.

1 Like

Thank you so much @zsliu98 it really helped!

I updated my worflow so that the VST3 get the proper Category “Instrument|Tools” and also the custom VST3 Plugin Name and Manufacturer Name like this. I could not get it to work with :

juce_add_plugin(
...
        VST3_CATEGORIES Instrument Tools
...
)

Because the way the JUCE Cmake works automatically put “Tools” in “Fx” even if the VST3 SDK has “Tools” in “Instrument” and this is why I struggled in the first place.

For the VST3 name specifically I went with:

if ("VST3" IN_LIST FORMATS)
    set_target_properties(${PROJECT_NAME} PROPERTIES
        # Overwrite the name property for VST3 compilation
        JUCE_PLUGIN_NAME "CtrlrX"
        # Overwrite the manufacturer property for VST3 compilation
        JUCE_COMPANY_NAME "CtrlrX Project"
    )
endif()

So for the category I had to patch JUCEUtils.cmake with :

# --- START PATCH: Force VST3 Category, Name, and Manufacturer Overrides ---
if ("VST3" IN_LIST active_formats)
    # 1. Category: Explicitly overrides any default/incorrect category read by JUCE.
    set(vst3_category_string "Instrument|Tools")
endif()
# --- END PATCH ---

It’s placed just before the VST3 variables are called in function(_juce_configure_plugin_targets target) .

Hope it can also help others if needed.

Damien