Back

Raising the sea over Singapore, a quarter-metre at a time

MapLibre GL · three.js · Cloudflare Workers Summer 2026 risingshores.agentxr.app

Marina Bay, Singapore, on the 3D map with the sea 2 m above today's level, flooded buildings in red

Rising Shores is a 3D map of Singapore with one control that matters: a gauge that raises the sea. Drag it up and the water follows the real terrain into the island, buildings turn red where it reaches them, and the numbers underneath say how much land, how many buildings and roughly how many residents are affected.

Water has to be able to get there

Filling every cell below a given height, the bathtub approach, floods inland hollows that the sea could never reach. Instead the elevation model, Copernicus GLO-30 at 30 m, goes through a priority flood when the data is baked: each cell gets the lowest sea level at which water can actually flow in from the open sea. In the browser, the gauge is compared against that one number per cell, and a water shader draws the result over the satellite imagery.

123,000 buildings, each with its own threshold

Every footprint comes from OpenStreetMap, with heights from OSM tags and the 3D-GloBFP dataset. Each one takes the lowest flood threshold found under its outline, so a building turns red as soon as the water touches any part of its base. Detailed rooftops are drawn by a separate three.js layer, and MRT stations, schools and places of worship are tracked the same way.

Marina Bay on the map at today's sea level, every building dry The same view with the sea 2 m higher, waterfront buildings in red and violet
The same camera over Marina Bay: today, then +2 m with no sea walls modelled.

Floodwater is not the sea

Drowned land gets its own water: shallower, murkier and see-through near the edge, so the streets and the beach still show underneath, with a thin bright line where the flood meets dry ground. The open sea keeps its whitecaps, the reservoirs and Marina Bay stay calm, and the reflections follow the real camera angle and the scene's sun.

East Coast Park at street level on the map with the sea 1.15 m higher: shallow floodwater over the beach and park
East Coast Park at +1.15 m, the top of the official 2100 range.

Drawing what the data cannot say

A 30 m satellite surface model has a vertical error of around a metre, so the map draws that margin instead of leaving it to a footnote. Ground within 0.75 m of the waterline is hatched, the buildings standing on it turn violet before they turn red, and the address check quotes the same margin.

It models no sea walls, barrages or drains. It shows what Singapore's coastal-protection programme exists to prevent, not a forecast of what will happen.

Years, not just metres

Nobody has an intuition for "+1.3 m", so a scenario picker turns the gauge into years: three emissions pathways to 2150 from Singapore's Third National Climate Change Study, Ng et al. (2025) and the IPCC's Sixth Assessment Report, with an optional storm surge on top. Play runs a pathway from 2025 to 2150 while the camera flies over the waterfront, and Compare lays today's view over the risen one with a divider you drag. The projections, what floods first and how Singapore is preparing are written up in a companion page, Rising sea levels in Singapore.

What it runs on

Rendering
MapLibre GL v5, three.js, custom GLSL water
Data
~15 MB baked ahead of time from open sources
Serving
one Cloudflare Worker, static assets
Analytics
D1, cookie-less, a salted hash instead of an IP

Everything the map draws is prepared offline and shipped as static files, so there is no tile server and no database between a visitor and the flood.

Open the 3D map See Singapore at +2 m