Understanding how JUCE handles JACK on Linux

Dear all,

I recently compiled the AudioPluginHost demo app without JACK support - I explicitly disabled it in the Projucer. However, when exploring the audio devices settings, I noticed that JACK is still listed as an available input/output device, alongside others like ALSA and Pulseaudio.

Surprisingly, selecting JACK works: two clients (one for input and one for output) appear in the JACK graph window, and audio routing functions as expected.

I’m not very experienced with JACK and Linux audio, but I suspect PipeWire might play a role here since I use it on my system. Could someone explain why JACK is showing up and functioning, even though I compiled the app without explicit JACK support? Is PipeWire acting as a bridge or something similar?

Any insights would be greatly appreciated!

In a lot of pipewire systems the jack library is enabled by default. This effectively makes pipewire a jack server to which jack clients can connect.

There is no bridging going on here, pipewire implements all the different audio APIs at the same time and will route between its apps. However each of these APIs have their own features depending on which the application is using.

The jack implementation in JUCE is extremely limited and not how a typical jack application works. You can read more about it in this ticket: JACK connection management · Issue #333 · juce-framework/JUCE · GitHub

1 Like