AU ignores isBusesLayoutSupported() - only shows stereo despite VST3 working correctly

Problem

My compressor plugin correctly shows mono/stereo configurations in VST3, but AU only shows stereo despite identical code.

Environment

  • JUCE version: [8.0.12]
  • macOS version: [Sequoia 15.7.3]
  • Projucer settings:
    • No Plugin Channel Configuration (only inside the code)
    • Plugin Formats: VST3, AU (both enabled)

Code

Constructor:

CompAudioProcessor::CompAudioProcessor()
    : AudioProcessor(BusesProperties()
        .withInput("Input", juce::AudioChannelSet::stereo(), true)
        .withOutput("Output", juce::AudioChannelSet::stereo(), true)
        .withInput("SideChain", juce::AudioChannelSet::stereo(), false)),
    parameters(*this, nullptr, "KrystalParams", Parameters::createParameterLayout()),
    compressor(/* ... */)
{
    Parameters::addListenerToAllParameters(parameters, this);
}

isBusesLayoutSupported:

bool CompAudioProcessor::isBusesLayoutSupported(const BusesLayout& layouts) const
{
    auto mainIn = layouts.getMainInputChannelSet();
    auto mainOut = layouts.getMainOutputChannelSet();
    
    if (mainIn != AudioChannelSet::mono() && mainIn != AudioChannelSet::stereo())
        return false;
    
    if (mainIn != mainOut)
        return false;
    
    if (layouts.inputBuses.size() > 1)
    {
        auto scSet = layouts.getChannelSet(true, 1);
        if (scSet != AudioChannelSet::disabled() && scSet != mainIn)
            return false;
    }
    
    return layouts.inputBuses.size() <= 2 && layouts.outputBuses.size() == 1;
}

Screenshots

VST3 vs AU I/O config comparison:

What I’ve tried

  • Set Plugin Channel Configurations to {1, 1}, {2, 2} (these works but I can’t have the sidechain this way)
  • Cleared AU cache multiple times
  • Rebuilt project from scratch
  • VST3 works perfectly, AU ignores the configuration

Is there something specific AU requires beyond isBusesLayoutSupported()?