The control room
This page runs the actual World3 model behind Limits to Growth: The 30-Year Update (2004) — the same equations, ported line-for-line into JavaScript. Pick one of the four classic runs below, or set your own policy levers, and watch two centuries unfold. (Curious how it works or where these equations come from? The background is further down the page.)
The four runs use the model's own built-in policy switches — the same constants the original scenarios changed — not external approximations of them.
Runs
Or set your own policy levers
These are the actual named constants in World3's equations — not stand-ins for them.
What the runs are telling us
Toggle between runs above and watch the same five outputs respond to the same starting point. These numbers come straight out of the run above — nothing here is rounded for effect.
| Run | Peak population | 2100 population | 2100 output/person | 2100 food/person |
|---|
BAU — Business as Usual
Nothing changes about how the world uses resources, controls pollution, or plans its families. Population peaks near 7.6 billion around 2028, and industrial output per person peaks a little earlier and then falls hard as nonrenewable resources become scarce and expensive to extract. Food and services per person follow it down with a lag, because population's age structure takes decades to respond to worsening conditions — the model's signature overshoot.
BAU2 — Business as Usual, with double the resources
The most common objection to BAU is "we'll just find more." So the model tries it: double the initial nonrenewable resource stock. Population climbs further, to about 8.2 billion by the late 2030s, and industrial output climbs dramatically higher too — but pollution, generated in proportion to that larger output, spikes to roughly nine times its 1970 level, and the resulting crash is sharper and, in some respects, worse than BAU's. The wall moved. It didn't disappear — it changed shape into a "Seneca cliff": a slower rise followed by a much faster fall.
CT — Comprehensive Technology
Rather than assuming more raw resources, this run activates technology development directly: from 1975, resource-extraction efficiency, pollution abatement, and land-yield technology are all allowed to improve endogenously, each responding to how much pressure it's under. The results are dramatic — population keeps rising until the late 2050s, reaching nearly 8.8 billion, and by 2100 is still around 7.4 billion, far above BAU or BAU2. But it comes at a cost the chart makes visible: nonrenewable resources are almost completely exhausted by 2100 (3.6% remaining) and industrial output per person, after climbing very high, is well into its own decline by then. Technology bought time and altitude. It didn't buy a landing.
SW — Stabilized World
The final run changes something categorically different: not a technology, but a decision. On top of every technology fix in CT, this run has society commit to two-child families, effective fertility control, and a deliberate ceiling on industrial growth once material needs are comfortably met — all from 1975. Population rises gently to a plateau around 5.8 billion in the 2060s and essentially stays there; industrial output per person holds close to its own plateau for decades; food per person ends the century nearly three times BAU's. It is not stagnation. It's a system finding a plateau instead of an overshoot.
Why a team built a model of the world
If you've already run a few scenarios above, this is the story behind them — and where those equations actually came from.
In 1970, a team at MIT was asked a deceptively simple question: if population, industry, and pollution keep growing the way they have been, what happens next? The human mind is bad at this kind of question. We reason in straight lines, but growth compounds — and a finite planet does not compound forever.
So instead of arguing from intuition, the team built a computer model of the whole world economy — one simulation containing population, industrial capital, food, pollution, and finite resources, all pushing and pulling on each other at once — and let it run forward in time. That model was World3, first written in DYNAMO, a language built specifically for system dynamics by Phyllis Fox and Alexander Pugh at MIT, and published in 1972 as The Limits to Growth.
No official machine‑readable copy of the original 1972 DYNAMO source was ever generally released; its equations were published in the companion technical volume Dynamics of Growth in a Finite World (1974). The 2004 STELLA source has circulated more widely, including on the CD-ROM packaged with the 30-Year Update book. The control room above runs a line-for-line transcription of the 2004 equations — all five sectors, the same nonlinear lookup tables, the same delay functions, the same Euler integration at a half-year step. The route was: the 2004 book's model → PyWorld3-03, an open-source Python implementation by researcher Tim Schell (CeCILL‑2.1 license), → ported here into JavaScript and checked, at every timestep, against the Python original.
One of the scenario runs exposed a genuine subtlety worth naming: the source data file used by the Python package lists one of its ~40 lookup tables twice, under the same name but with different numbers, and the loading code silently lets the second entry overwrite the first. Reproducing that quirk exactly — rather than "fixing" it — turned out to be necessary to match the reference implementation.
Five sectors, one system
World3 does not treat population, the economy, and the environment as separate stories. It treats them as one story with five interlocking sectors, each built from stocks — quantities that accumulate over time — connected by flows that add to or drain from them.
Population
Four age cohorts (0–14, 15–44, 45–64, 65+), each with its own birth, ageing, and death dynamics driven by food, health services, crowding, and pollution.
Capital
Industrial and service capital, plus a jobs subsector tracking labor demand against the workforce. Output is reinvested — the engine of growth — but capital also depreciates.
Agriculture
Arable land, land fertility, and land development, all interacting to set food output per person — degraded by pollution, boosted by capital and technology.
Persistent pollution
Pollution generated by industry and agriculture, absorbed over time — but absorption itself slows down as pollution accumulates.
Nonrenewable resources
A single fixed stock, depleting with use. As it depletes, more capital is diverted just to keep extracting it.
What's new in the 2004 revision: technology that responds to pressure
In the original 1972 model, a policy like "improve pollution-control technology" simply set a constant to a new, better value the moment the policy year arrived — an instant, exogenous jump. The 2004 revision replaces this in three places (resource efficiency, pollution abatement, land-yield technology) with something more realistic: each becomes its own small stock that grows over time once activated, and grows faster the more pressure it's under — resource technology develops fastest when actual resource use is running well ahead of a "desired" rate, for instance. This is itself a reinforcing loop nested inside the larger model: scarcity drives investment in efficiency, which (up to a point) relieves the scarcity. It's a more optimistic assumption than the 1972 model made, and — as the CT run above shows — even this more generous assumption about technology isn't enough on its own to avoid an eventual decline.
How they push on each other
The diagram is a causal loop diagram, the classic tool of system dynamics. An arrow marked + means "more of the first thing leads to more of the second"; − means the opposite. R marks a reinforcing loop that accelerates change in one direction; B marks a balancing loop that resists it. Growth is what happens while the reinforcing loop dominates. Limits are what happen when the balancing loops take over — which, in this model, they eventually do.
How the model actually computes a future
DYNAMO and STELLA (the language World3-03 was later reimplemented in) share the same core vocabulary: levels (stocks, written .K for "now") and rates (flows, written .JK for "over the interval from J, the last moment, to K, this one"). Every level equation has the same shape:
That's plain Euler integration — nothing more exotic than "new value = old value + rate × time step" — done at a half-year step (DT = 0.5) from 1900 to 2100.
Real equations from this page's engine
These aren't illustrative simplifications — they're copied directly out of the code running above, which is itself a transcription of the constants and formulas in the 2004 model.
Reading these: total population is just the four cohorts summed. Industrial output depends on capital, minus whatever fraction is tied up extracting resources (FCAOR), times a capital-utilization fraction, divided by a capital-output ratio. Resources only ever go down. Pollution rises with generation and falls with absorption — both delayed by several years, since real pollution doesn't appear or disappear instantly. And land yield multiplies four separate effects together: a technology factor, soil fertility, capital invested per hectare, and a penalty from air pollution.
The new part: technology that develops itself
Here is the resource-efficiency loop in full, since it's the clearest example of what's genuinely new in the 2004 model:
Nothing forces this technology to arrive fast enough. If resource use overshoots the "desired" rate only mildly, RTCM stays small and RT grows slowly — the efficiency gains simply lose the race against demand. Pollution abatement and land-yield technology follow the identical pattern, each with its own trigger year and its own pressure signal.
Nonlinear responses, not straight lines
Around forty hand-calibrated lookup tables (DYNAMO/STELLA's "table functions") connect these variables — each a set of points from historical data or expert judgment, joined by straight-line interpolation. A society at 90% of adequate food behaves quite differently from one at 40%; a lookup table can capture that, a single coefficient can't.
Provenance and credit
The equations and constants running above come from World3-03, the recalibrated model built for Donella H. Meadows, Jørgen Randers & Dennis L. Meadows, Limits to Growth: The 30-Year Update (Chelsea Green, 2004) — itself a revision of the original World3 from Meadows, Meadows, Randers & Behrens, The Limits to Growth (1972) and its technical companion Dynamics of Growth in a Finite World (1974). This page's JavaScript is a direct transcription of PyWorld3-03 by Tim Schell, an open-source Python implementation released under the CeCILL‑2.1 license (a GPL-like French free-software license). Its output was checked against this page's JavaScript at every timestep before publishing.
The specific "BAU / BAU2 / CT / SW" framing used above follows Graham Turner, A Comparison of the Limits to Growth with Thirty Years of Reality (CSIRO, 2008) and Gaya Herrington, Update to Limits to Growth: Comparing the World3 Model with Empirical Data (Journal of Industrial Ecology, 2021), both of which used World3-03 to compare the model's projections against real-world data through the early 2000s and 2010s respectively. For the definitive account of what the model means, the primary sources are worth reading directly.