Some time ago AudioProcessorValueTreeState and AudioProcessorParameter(WithID) did not exist.
So I’m curious what you used in the last plugin you coded :
AudioProcessorValueTreeState
Classes inheriting AudioProcessorParameterWithID
Classes inheriting AudioProcessorParameter
Your own classes (not inheriting AudioProcessorParameter)
I’m a huge fan of ValueTreeState, mostly because you basically get parameter save/restore and undo/redo for free. But like @chkn said, it definitely has some flaws that have to be worked around.
You can try this for undo/redo - https://gist.github.com/yairchu/0a70e553af6176b2f6af
It provides a class AudioProcessorUndoAttachment which listens to an AudioProcessor and adds all the parameter changes to an UndoManager.