VST Parameters & Best Practice


I’m currently building VST2/3, AAX, and AU plugins for Windows/OSX. I’ve seen a bunch of old threads that cite a variety of methods of handing parameter options. From what I can see, there are no related API tutorials on the subject.

I’ve looked at the plugin example…and it is rather…dirty. Wondering if I’m missing something, or if there is a clean way to handle parameter persistence/usage/automation, etc that is usable on most all platforms.

Is persistence separate from parameter usage? (I’m assuming it is, and in some cases, persistence of selected paths and other non-automatable values will be necessary)

Can anybody here shed a bit of light on the subject?

Many thanks,


The classes are deliberately designed to give you a lot of flexibility over how you deal with these things. But if you want a more pre-built solution, try the AudioProcessorValueTreeState class. That’s what we use in e.g. ROLI Equator to handle the parameters


Thanks jules! I’m really loving Juce for exactly that reason. It doesn’t enforce design paradigms, so clean pattern implementations are a breeze.

I’ll take a look at that class - it’s likely the direction I’ll go, since equator is commercially deployed. Also - I’ve added another thread for this, but what OSX target are you currently building equator for? OSX SDK 10.5 doesn’t seem to be supported, which is fine - I’d just like to establish a baseline for support purposes.

Many thanks,


Yeah, I’d recommend forgetting about 10.5. A few people still support 10.6 but TBH 10.7 is probably a reasonable lower limit nowadays.


There is some data online (although it’s not much).

This suggests that in December 2014, 12% of Mac users were on OS X 10.6 or below:

This suggests that in September 2015, the number has fallen to under 5%:

So these days it might be something like 1-2% of Mac users perhaps? Although music people tend to be more conservative with their updates so hard to say exactly :wink:

I would not worry about 10.6, especially since killing it off allows you to enjoy C++11!


Sorry for dredging this up, but quick question.

If I want to support 10.7 all I need to do is switch the deployment target field in the Projucer to 10.7


(Thanks in advance, John)