THE LIMITS TO GROWTH (1972) · WORLD3 MODEL AN INTERACTIVE, EQUATION‑EXACT REIMPLEMENTATION

World3

The actual system-dynamics equations behind The Limits to Growth, ported line‑for‑line and run live in your browser.

I

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.

Custom runs appear in the charts below as an extra line, in graphite, until you run another.

II

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.

Peak population and year-2100 snapshot, computed live above
RunPeak population2100 population2100 output/person2100 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.

A known limitation of this run In the published BAU2 chart, pollution keeps climbing right to the edge of the chart in 2100 rather than turning over. This run's version peaks around 2069 and then declines. The mechanism is real and correctly implemented — pollution absorption gets slower the worse pollution gets, an intentional feedback representing a damaged ecosystem's shrinking capacity to heal itself — but this run's peak doesn't climb as high as the published one seems to, so it lands in a faster-recovery part of that same curve instead of the near-permanent one. The equations match the source code exactly; the discrepancy most likely traces back either to a constant this open-source reimplementation doesn't reproduce with full precision, or to the industrial and population trajectories not pushing pollution generation quite as far before the model throttles it. The official CD-ROM data needed to pin down the difference exactly isn't publicly available in machine-readable form, so BAU, CT, and SW — which all show a peak-and-decline consistent with the published figure — should be trusted more than BAU2's long-run pollution tail specifically.

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.

A lever worth trying yourself Set every custom slider except the population and growth-ceiling ones and run it — you'll get something close to CT: higher, later, but still ultimately declining. Add those last two levers and the shape changes qualitatively, not just quantitatively. That's the model's central argument: technology postpones the reckoning, but only a deliberate limit on throughput avoids it.
What this simulation can and can't tell you It can tell you the true shape of the coupled dynamics the study's authors described, since the equations are the same ones they published and validated. It cannot tell you the exact year, exact population, or exact resource figure the real world will hit — the constants were calibrated to data available in the early 2000s and have not been updated to current estimates of reserves, technology, or demographics. Treat this as the argument's structure, not a forecast.
III

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.

Two models share this name World3 was substantially revised once. The original 1972 equations were refined and recalibrated for the 30th-anniversary book, Limits to Growth: The 30-Year Update (Meadows, Randers & Meadows, 2004), which runs on a newer STELLA-based implementation usually called World3-03. The two versions agree on the big picture but differ in detail — World3-03 added, among other things, sectors where resource efficiency, pollution abatement, and agricultural yield can each improve endogenously over time in response to scarcity, rather than jumping to a fixed new value the moment a policy switches on. The runs on this page use World3-03 — the version behind the widely-reproduced "BAU / BAU2 / CT / SW" comparison chart from Graham Turner's 2008 30-year retrospective and Gaya Herrington's 2020/2021 updates, which is likely the version you've seen reproduced elsewhere. An earlier version of this page used the original 1972/1974 equations instead; if you're comparing against that, the scenario names and some curve shapes will look different — that's a real difference between the two model versions, not an error in either one.

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.

Verified, not assumed — but only one step of the chain Population, industrial output per person, food per person, pollution, and remaining resources from this page's JavaScript were compared against the Python original at every half-year timestep from 1900 to 2100, across all four scenarios below. The largest disagreement found was of the same order as ordinary floating-point rounding — around one part in 1014. That confirms this page faithfully reproduces PyWorld3-03. It does not, on its own, confirm that PyWorld3-03 perfectly reproduces the official 2004 CD-ROM in every regime — see the note on BAU2's pollution tail further up, which is the one place a real gap showed up.

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.

IV

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.

POPULATION CAPITAL RESOURCES POLLUTION AGRICULTURE + + + − + − + − − Rgrowth engine Bresource limit Bpollution limit Bland / food limit
Fig. 1 — The five sectors and their causal links. One reinforcing loop (R) drives growth; three balancing loops (B) push back as resources deplete, pollution accumulates, and land degrades. The 2004 revision adds a smaller reinforcing loop inside each balancing one: scarcity now spurs its own countervailing technology.
V

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:

LEVEL.K = LEVEL.J + DT * (INFLOW.JK - OUTFLOW.JK)

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.

POP.K = P1.K + P2.K + P3.K + P4.K IO.K = IC.K * (1 - FCAOR.K) * CUF.K / ICOR.K NR.K = NR.J - DT * NRUR.JK PP.K = PP.J + DT * (PPAR.JK - PPASR.JK) LY.K = LYF.K * LFERT.K * LYMC.K * LYMAP.K

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:

RTC.K = 1 - (NRUR.K / DRUR) { how far actual use exceeds a "desired" rate } RTCM.K = f(RTC.K) { a lookup table: more overshoot → faster tech growth } RTCR.KL = RTCM.K * RT.K { only after the policy year; zero before it } RT.K = RT.J + DT * RTCR.JK { the technology stock itself, starts at 1.0 } NRUF2.K = DLINF3(RT.K, TDT) { smoothed through a ~20-year adoption delay }

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.

VI

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.