Description

Whitecap gives the ocean a rolling swell and sends surf into the shoreline. Bands form well offshore, steepen as the water shallows under them and break into foam on the way in. Out in open water the tops of the biggest swells tear white. It's still Minecraft's water, it just moves.
What you'll see
- Rolling swell - four summed directional waves with wavelengths up to 44 blocks, so the sea heaves in long lines instead of ripples. It animates on the GPU, so it costs the same at 200 blocks as at 20.
- Surf that reaches the shore - bands are born about 28 blocks out and travel inward through a geodesic distance-to-shore field, which makes them run parallel to the coastline on their own however the coast bends. Nothing is hand-placed.
- Breaking foam - the foam is pixel art in Minecraft's own idiom: a small flat palette, block-aligned shapes, nearest filtering. No airbrushed smears.
- Two looks - Cinematic (the default) mirrors the sky off the wave faces and adds a sun glint. Vanilla samples Minecraft's own animated water texture and shades it flat, so it reads as the game's water that happens to move.


How it behaves
- Rivers, lakes and ponds stay flat. Surf only runs on water with real open sea behind it, measured by depth rather than by biome, so modded and custom-generated oceans work too.
- Waves shoal - a swell can't be taller than the water it's standing in, so it dies off as the floor comes up. Shallow seas get waves scaled to the water they have.
- Water goes opaque at grazing angles and over the deeps, and stays clear looking straight down into the shallows, so you can still see sand and kelp.
- Underwater is untouched - vanilla fog, vanilla everything.
- The surface mesh is built once per chunk and reused, so walking and flying never rebuild it.
Compatibility
Client-side. Whitecap draws its own sea surface in its own render pass with its own core shader and inherits no terrain state, which is why it still works under Sodium - Sodium replaces the fluid renderer and core shaders that most other approaches to this hook into. With an Iris shaderpack active it stands down completely and hands the water back, since the pack is already doing that job.
Configuration
Sodium's video settings has a Whitecap page - style, wave height, surf strength, foam, reflections, range and quality - and everything is in config/whitecap.json. Every slider except range retunes the sea live. /whitecap status prints every gate if the water ever looks wrong.
Known limitations
- Boats and mobs float at Minecraft's flat water line, so they can clip through a deep-ocean crest. Set wave height to 0 if that bothers you more than it bothers me.
- The sea only draws as far as your render distance actually loads chunks, and no further.
Client-side, NeoForge 1.21.1, JDK 21. No server install needed. MIT licensed. Free to use in modpacks.

