Ultralightweight - only accept and store headers, ignore transactions completely. Use case is to connect to a ton of peers and determine the chain that they're on. This allows holistic network status view by seeing all current chains and what % of the network is on each one.
Lightweigt - store headers and UTXOs. All transactions will still need to be downloaded, but disk usage will be greatly minimized.
Really three different runmodes desired: