The Build
Salt Marsh Ledger is a tidal wetland simulation built with Vite and Three.js. It treats the marsh as a living balance sheet where water, salt, nutrients, and vegetation keep rewriting the same patch of ground.
What The Marsh Tracks
The scene is organized around a gridded marsh surface rather than a decorative landscape. Each cell carries environmental state, and the visible structure comes from those fields interacting over time.
1. Vegetation and biomass reaction-diffusion
The vegetation layer behaves like an ecological reaction-diffusion system. Biomass spreads into viable regions, retreats under stress, and forms uneven patches instead of a uniform green carpet. The result is a marsh that gradually organizes itself into channels, flats, and denser stands.
2. Tidal salinity pressure
Tide amplitude changes more than the waterline. As the tide moves through the grid, salinity pressure pushes against plant growth and shifts the color and height of the surface. High-salt regions become harder for vegetation to hold, while lower-pressure regions can recover and thicken.
3. Nutrient deposition and decay
Nutrients arrive with the water and then decay back out of the system. That deposition loop gives the marsh a second timescale: short pulses can feed growth, but persistent imbalance changes the whole field. Biomass is always negotiating between nourishment and stress.
Controls As Ecological Levers
The interface exposes the wetland directly:
- Salinity pressure controls how aggressively salt suppresses vegetation.
- Tide amplitude changes the strength and reach of the tidal cycle.
- Restoration seeding gives the system a managed recovery impulse.
- Storm pulse shocks the field with a temporary disturbance.
- Pause and reset make it possible to inspect a pattern before sending it back into motion.
Those controls make the piece feel less like a terrain viewer and more like a small ecological instrument. Each intervention leaves a different signature in the marsh structure.
Surface Language
The rendering keeps the system readable. Water level, color, height, and biomass metrics all respond to the same underlying state instead of living in separate UI layers. The marsh rises, fades, floods, and recovers as the simulation changes.
The strongest moments come from watching ordinary environmental pressure produce spatial form. A storm pulse does not just flash the scene; it changes the next recovery pattern. A salinity increase does not just recolor the water; it shifts which vegetation patches can survive.
Technical Notes
- Stack: Vite + Three.js r164
- Model: Gray-Scott-style vegetation and biomass reaction-diffusion on an instanced marsh grid
- Feedback loop: tidal salinity, nutrient deposition, nutrient decay, water level, color, height, and biomass metrics
- Interaction: reactive controls for salinity, tides, restoration, storms, pause, and reset
- Deployment: static build published at GitHub Pages
Why This One Holds Up
Salt Marsh Ledger works because the marsh is not treated as scenery. It is a set of coupled pressures made visible. Salinity, nutrients, tide, and biomass are all simple signals on their own, but together they produce a field that feels negotiated rather than drawn.