The Library
Where every number came from.
And, more usefully, which ones we made up.
A game that teaches with numbers has one obligation above the others: to be clear about which figures are recorded history and which are ours. Mixing them is how a teaching game quietly becomes a confident-sounding lie.
Every figure in The Library belongs to exactly one of three classes:
- [A] RECORDED — a published series. Somebody else collected it, we link to them, and you can check it without taking our word for anything. The S&P 500 total return in every era is the only series in this game that carries this letter.
- [R] REPRESENTATIVE — typical of the period, or derived from something that is, but not a single recorded quote. There is no one canonical annual bond or cash return for 1973–2024 the way there is for the S&P 500; these figures are honest about the shape of the era without pretending to be a receipt.
- [B] AUTHORED — invented by us, to be plausible. The four households, their bills, their instincts. Nobody here is a real person and no number is a forecast.
The rule we hold ourselves to: a number is never promoted to a class it has not earned. tools/check.ts asserts it directly — every series below is required to declare a class, a source, and a URL if it claims to be [A], and nothing describing itself as “shaped” or “representative” in its own note is allowed to carry the [A] letter.
Rendered from allSeries() in src/lib/returns.ts — the same function tools/check.ts walks, so this page cannot drift out of date with the numbers the simulation actually runs.
The lost decade — 2000–2014
S&P 500 annual total return, dividends reinvested · S&P 500 annual total returns, standard published series
Transcribed to two decimals. This is the one series in the game that is a record rather than an assumption, which is why it is the only one carrying [A].
Investment-grade bond index, period-representative annual return · Representative of US aggregate bond returns over 2000–2014, a period of falling yields in which bonds did their job twice
Shaped, not transcribed. The two facts it has to carry are that bonds made money through both equity crashes and averaged around five percent over the window. Both are true of the period; the individual years are ours.
Cash / savings, period-representative annual return · Representative of US short-term rates over 2000–2014
Six percent at the start, zero after 2008. The shape is the point.
CPI inflation, period-representative · Representative of US CPI over 2000–2014
The long run — 2010–2024
S&P 500 annual total return, dividends reinvested · S&P 500 annual total returns, standard published series
Transcribed to two decimals. This is the one series in the game that is a record rather than an assumption, which is why it is the only one carrying [A].
Investment-grade bond index, period-representative annual return · Representative of US aggregate bond returns over 2010–2024
Shaped, not transcribed. Must carry the fact that 2022 was the worst bond year in modern record and that bonds paid almost nothing for a decade before it — the two things that made the 60/40 argument feel broken.
Cash / savings, period-representative annual return · Representative of US short-term rates over 2010–2024
A decade of nothing, then five percent arriving all at once in 2023.
CPI inflation, period-representative · Representative of US CPI over 2010–2024
The one nobody plans for — 1973–1987
S&P 500 annual total return, dividends reinvested · S&P 500 annual total returns, standard published series
Transcribed to two decimals. This is the one series in the game that is a record rather than an assumption, which is why it is the only one carrying [A].
Long Treasury / investment-grade, period-representative annual return · Representative of US bond returns over 1973–1987
Shaped, not transcribed, and the least certain series in the game — which is why it says so here rather than in a footnote. It has to carry two true things: bonds lost money in nominal terms in several of these years, and the 1982–86 rally was one of the great bond markets of the century.
Cash / savings, period-representative annual return · Representative of US short-term rates over 1973–1987
The one era where cash paid double digits — and still lost to the shopping bill in 1974 and 1979. See Kitchen Table's Regulation Q note for why a household could not reach most of it.
CPI inflation, period-representative · Representative of US CPI over 1973–1987
Fees, turnover and income-yield assumptions per sleeve are [R] — representative of what each kind of fund actually charges and churns, not a quote from a named product. No sleeve is ever given a worse gross market return than another: everything separating a total-market index fund from an actively managed one below is a cost or a tax, which is Bogle’s actual argument and the reason it has to be modelled as one.
| Sleeve | Fee, a year | Turnover | Income yield |
|---|---|---|---|
| Cash / high-yield savings | 0.00% | 0% | 100.0% |
| Bond index | 0.05% | 0% | 100.0% |
| Total market index fund | 0.04% | 3% | 1.8% |
| Active / “smart” funds | 1.10% | 65% | 1.8% |
| Individual names / concentrated bets | 0.20% | 40% | 1.2% |
Individual names also carry a deterministic spread and a median drag — MEDIAN_DRAG in src/lib/sim.ts — because concentrated stock returns are right-skewed (Bessembinder): a lower median, not a lower expectation. [R]
[B] AUTHORED — every one. That matters more in this game than in Kitchen Table: a player with $7,500 a month spare may recognise themselves, and the disclaimer that nobody here is a real person is not decoration, it is the reason the game is legal.
- The Quiet Ones — Dual income, no kids yet, the 401(k) already maxed. Nothing is wrong, which is the problem.
- The High Earners Who Still Feel Behind — Two good salaries, one child, a house, and a nagging sense that everyone else is doing better.
- The Late Starters — Finally stable at fifty-one, and painfully aware of the fifteen years that went elsewhere.
- The Variable — Self-employed. Two months of the year pay for the other ten, and you never know which two.
The five bands — Blown, Held, Grown, The Index Purist, The Steward — are not authored content at all. Each is a policy: a rule for deciding, run through the same sim.run the player’s own allocation runs through, over the same market, the same household and the same bills. Nothing about a band is hand-tuned to make a lesson land — see the header of src/lib/bands.ts.
The shaded range on the chart is not a percentile or a confidence interval — it is order statistics over fifteen overlapping rotations of the same transcribed window (rotate in src/lib/sim.ts), which is how a range is shown without a random number generator anywhere in the engine.