It all depends on what you want to achieve. When you connect external inputs, you make a trade-off: You can have extremely high update rates when connecting directly to the seeds pins OR you can have lots of connected inputs when you use intermediary chips like multiplexers, led drivers or port expanders.
Fortunately, for the vast majority of applications, the update rates you can achieve with intermediary chips are still plenty enough.
So for the most part, it’s a matter of picking the right intermediary chip to connect your peripheral devices to.
- For pots you can use multiplexers like the 405x series to connect multiple pots to the same analog pin. Update rates are not too problematic, you’re not be turning a pot at audio rates anyway.
- for CV you can also use multiplexers but if audio rate modulation is required, better connect directly to an analog Input of the seed, if possible
- for buttons and switches, you can use port expanders chips or shift registers like the 74HC(T)165 or similar, most of them can be daisy-chained the get theoretically infinite inputs
- for trigger inputs, it’s the same as for the buttons but timing accuracy can be improved by connecting to the seed directly (remember to use a transistor between the jack and the chips as a safety measure)
- For LEDs there are specialized led drivers like the PCA you mentioned already. You can also use shift registers like the 74HC(T)595.
All of the above solutions are already supported by libDaisy, AFAIK