Water in voxel worlds is a challenge. It lags things out fast particularly if its flowing with lots of little fractional voxels or sprites.
One solution that has not been tried is to add a solid block, silt or something, that is distributed first in world but then morphs to water in contact with it. I.E. water erodes it but may not erode it all particularly uphill of the water. Because the silt is painted into the soil and rock you get less hanging water and random flows. You're then just switching texture and collision functions. I would then set 'silt' to turn to stone if there is air under it so It does not flood caves and other peoples buildings unintentionally. Set it to turn to dirt if there is air beside it [dykes] or a waterfall. In some cases a waterfall could then be added if more than one silt voxel is vertically beside air. Set only some trees to grow/spawn on silt and spawn low.
Water on normal soil, grass and stone can then be set to despawn if there are air voxels beside it; it soaks in. If its on or beside silt it fills replacing the silt. The waterfalls could be just sloping or rounded blocks with a water animation over rock or a clear water animation blending to white foam. Four to six block types.
Seas can be added ideally as a different water type to land water. Often game creators use the same water and have a lot of work later. Two water types would help with biomes, flora, fauna distribution and water resources. Salt versus fresh water.
It might be nice to add waves as big translucent mobs moving on a sea surface. This has not been done but if you can have a goat roaming about a wave moving in a straight line and uniform speed should be do able. Have it dieing with a boom on hitting shore with suitably wet spray sprites [optioned to turn off in case of lag. ] Have it push the player, boats, etc up and along on collision.
I'm trying to code some of these innovations in Unity but I'm just not good enough at programming yet. A designer not a coder.