My library
DeBroglie can do it. Set up WFC generation, then add a Path constraint to enforce connctivity.
Example (using paths rather than land/water, but same principle):
It's not a good algorithm for large maps though.
I read some algorithms that remove floating islands after the generation has taken place, but those don't look computationally cheap or simple to implement.
On the contrary, it's extremely cheap and easy! The algorithm you want is "flood fill". You can identify an island by starting with a land point, and repeatedly coloring all adjacent points until you run out of land points - everthing you colored is a single island. Do that for every uncolored land point, and you'll identify each island on the map one at a time. Then just pick the largest and erase the others (or draw bridges between them).