What are the limits on what a plugin can do?

Where would I find out, or what are the avenues/subject areas I need to explore, to get a better idea on what is actually possible when it comes what a plugin can do/what information a plugin has to play with, when used in a DAW? For example, if I wanted to a plugin to change the colour of all the clips in Ableton to polka dot, where is the documentation I need to read which will lead me to realise I can’t do that?

Seems like one of those questions that is too general to find on a forum/discord so thanks in advance for any answers.

well, first of all, this isn’t a color option in Ableton that I know of, and secondly, to my knowledge a plugin can’t alter the state of the DAW session other than outputting audio/MIDI when asked to do so by the host. There are facilities for getting info about the track - name, color, etc - from within a plugin, but that’s about it.

Some hosts have extra SDKs and extensions to allow you to integrate more closely and do some special things, but those usually aren’t a part of Juce because Juce is designed to be the lowest common denominator of functionality between all hosts.

Within a Juce plugin, you can output audio and MIDI to the host within processBlock(), and you do have access to the user’s file system and to the internet, but that’s about it I’m afraid.

Hope this helps!

Thanks Ben. Where would I find this information written down? Really keen to know exactly what is possible and what is not, and also how this kind of information is presented to developers.

Honestly, for me it’s kind of been a bit of a learn-as-you-go experience, picking up information from others, here on the forums and the Discord, and reading through the Juce documentation.

The Juce AudioProcessor class really does do a pretty good job of encapsulating into one class most of the functionality common to all hosts across all OSes – if you want a basic rundown on what kind of API interface pretty much all plugins are built around (even Serum, Autotune, etc), I’d suggest to spend some time looking through its header file: JUCE/juce_AudioProcessor.h at master · juce-framework/JUCE · GitHub

Most of it is pretty self-explanatory…

Other than that, there’s not really one central unified source that I know of.