carbon
this page measures its own environmental cost.
every number is calculated from first principles — no external API, no third-party service.
the model has limits. the limits are shown.
this page load
where the energy goes
your device consumes the most. 54% of the energy goes to rendering pixels on a screen and amortizing the carbon it took to manufacture that screen. the server is 22%. the network between them is 24%.
what that energy could do instead
these are small numbers. that is the point. one page view is almost nothing. multiply by ten thousand and the LED runs for minutes. multiply by a million — the scale of a modest site — and the question changes.
same bytes, different grids
the CO2 depends on where the electricity comes from. same page, same bytes. the grid decides the rest. we use 473 gCO2/kWh (world average, Ember 2024) as default.
a 31x difference between iceland and south africa. same page. same user. the infrastructure decides.
at scale
the paradox
but this section is part of this page. every character you are reading was transferred, parsed, rendered, and displayed. the act of informing you about the cost added to the cost.
build first to see the recursive calculation.
the measurement cannot be separated from the measured. the most honest page about carbon is the one that doesn't exist. the second most honest is this one.
what this page cannot measure
— your grid's actual carbon intensity (we used the world average)
— your device's actual power draw (the model uses statistical averages)
— whether your CDN served from cache (cached = less server work)
— the energy your screen uses to display these pixels (varies 100x between OLED dark and LCD bright)
— the embodied carbon of the submarine cables that carried these bytes
— the router, the cell tower, the ISP switch
— the LLM inference that wrote this page (that cost more than you reading it)
— how long you keep this tab open (idle tabs still consume power)
the real uncertainty is +/- 50% at minimum. possibly +/- 200%. the numbers above are estimates from a model, not measurements from a meter. treating them as precise would be dishonest. showing ranges is the least we can do.
methodology
published by the Sustainable Web Design community group.
formula:
CO2e = data_transferred_GB * energy_intensity_kWh_per_GB * grid_intensity_gCO2_per_kWh
energy intensity (kWh/GB):
data centers: 0.055 operational + 0.012 embodied = 0.067networks: 0.059 operational + 0.013 embodied = 0.072user devices: 0.080 operational + 0.081 embodied = 0.161total: 0.194 operational + 0.106 embodied = 0.300grid intensity:
world average 473 gCO2/kWh (Ember Global Electricity Review 2025, reporting 2024 data). down from 484 in 2023. the trend is good. the absolute number is not.
data source:
build-time: this page reads its own dist/ output file sizes. the numbers are always one build behind — the page cannot predict its own output.
runtime: if JavaScript is available, the Performance API's
transferSize
property provides the actual compressed bytes sent over the wire.what the model does not include:
— server-side compute (CPU time to generate the response)
— DNS resolution energy
— TLS handshake energy
— user device screen energy (dominant in practice, impossible to measure from JavaScript)
— return visitor caching (second visit ≈ 0 transfer for static assets)
sources:
sustainablewebdesign.org — estimating digital emissions
ember — global electricity review 2025
wholegrain digital — updating to SWD v4
verdict
bun run build twice. the first build creates this page. the second lets it read itself. measured from dist/ at build time. javascript below provides live measurement if available. if not, the static numbers above are the truth.