Headless plugin clients

Hi all,
I’m working on an embedded Linux project where a headless system can host VsT plugins.

The host doesn’t use JUCE, but we had to support a plugin written with it. At the moment, it’s possible to build headless standalone Linux apps in JUCE, but X11 & friends are still a dependency for audio plugin clients.

I experimented a little and it turned out that hacking the codebase to remove that dependency was much easier than I thought. Disclaimer: I’m not a JUCE expert at all, so any feedback is welcome!

You can try it out here:

This is still WIP, tested with few plugins and, especially, not integrated with the Projucer. You need to define JUCE_HEADLESS_PLUGIN_CLIENT=1 to activate the option.

Basically, I just mocked up the relevant methods in juce_gui_basics/native/, so this is similar to having a separate architecture target. From the plugin POV, it should be equivalent to the situation where the host never shows your UI, so you can instantiate graphic components etc.



Hello JUCErs,
I’m reviving this thread to signal that I have updated my fork for headless audio plugins under Linux to the latest 5.4.1 release:

There seems to be an issue with recent versions of JUCE when exporting Legacy VST plugins, for which I’ll submit an issue on Github (the SDK header path is not included properly in the generated Makefile). Quick workaround at the moment is to modify the generated Makefiles in the JUCE_CPP_FLAGS variable, either manually or with e.g. a sed script.

The main purpose of this is currently to generate plugins for the ELK Music OS, but there is nothing specific to ELK in this fork and it could also be used in other contexts. Currently, we have several developers that are using this fork with success, even for complex plugins (modular FX units, physical modeling synthesizers, etc.).

I will be around at ADC these days if anyone is interested to discuss this in person.




is this fork updated to the latest version of JUCE? Do I need to set JUCE_HEADLESS_PLUGIN_CLIENT=1?

I’m preparing for the ELK tutorial next week in ADC and I’m trying to build by plugin with the headless option and VST legacy. I ask if I need to set JUCE_HEADLESS_PLUGIN_CLIENT because in the ELK docs it does not say so. I’m using tracktion engine inside my plugin and I’m afraid tracktion requires the latest version of JUCE…

Also would be good to know which modules are changed in the fork. I guess graphics/gui/gui_extra only?

the updated instructions are on our docs for building plugins for Elk, including the details for using the JUCE fork with the SDK:

where it is mentioned how to pass the JUCE_HEADLESS_PLUGIN_CLIENT flag.

There is a branch “mind/headless_plugin_next” that is up-to-date to the latest 5.4.5 JUCE release that you can use.

1 Like

Thanks for the answer!
I read the docs but missed that bit in the command where the flag is set. sorry!