Solidity v0.4-v0.7

The standard ABI coder does not allow arrays of dynamic types, structs or nested variables between the Solidity contract and the dApp.

The ABI v2 coder; which allows structs, nested and dynamic variables to be passed into functions, returned from functions and emitted by events.

NoteDo not use experimental features on live deployments.

Solidity v0.8 and above

As per the list of v0.8 breaking changes, the ABIEncoderV2 is not experimental anymore - it is actually enabled by default by the compiler.

https://ethereum.stackexchange.com/questions/64562/about-abi-encoder-v2