FIREproof Help

Guides, references, and concepts

Browse topics

TIPS Bond Ladder

Hold a slice of your portfolio as a defined-maturity TIPS ladder. Coupons and matured principal arrive as cash, insulated from rebalancing: the 'improved equity glide path' pattern from Pfau / Kitces / the 2025 FAJ paper.

A TIPS bond ladder is a set of inflation-protected Treasury bonds bought at purchase and held to maturity. Each rung matures in a specific future year and promises a known inflation-adjusted principal payout that year. By stringing rungs across the early years of retirement, you immunize that span from sequence-of-returns risk: instead of selling equities during a bear opener, you fund spending from each year's maturing rung.

FIREproof models the ladder as a first-class engine surface: rungs are not rebalanced, the matured nominal principal arrives as cash on the rung's owning account before the year's spending plan runs, and the equity sleeve compounds untouched. This is the canonical setup from the "improved equity glide path" line of research.

Because the ladder is never rebalanced, it can't be tuned in the Glide Path (Asset Allocation over time) editor. It appears there as a locked dashed line showing its current share of your portfolio. That's a starting value, not a level the engine maintains (as rungs mature, the ladder spends down). You drag the other asset classes around it. To change the ladder, edit its rungs from the owning account's allocation instead.

Building a ladder

Ladders are configured per account. Open an account, click Edit Allocation, then Add Bond Ladder if the account has no ladder yet. Once a ladder exists it appears as a locked Bond Ladder sleeve in the allocation; use the gear icon on that row to reopen the editor. Cash-only Checking and Savings accounts can't hold a ladder, so the button only appears on multi-asset accounts (Brokerage, Roth IRA, Traditional IRA, 401k variants, HSA, etc.). The editor has two tabs: Ladder Setup (mode, yield source, proceeds policy and continuous-mode funding) and Rungs. On the Rungs tab, click + Add rung for each year you want to cover and fill in:

  • Maturity year: the calendar year the rung pays out, picked from a dropdown of simulation years. Retirement Year sits at the top of the list, and each year shows every person's age that year. Internally this is stored 0-indexed from today (year 0 = "matures this year"). In the account's allocation screen the whole ladder appears as a single locked Bond Ladder sleeve, summarized as "N rungs · matures <year>, <year>…".
  • Amount: what the rung pays out at maturity - its face value, in today's (real) dollars. Always enter the redemption amount, whichever pricing the ladder uses; what it is worth today is something the engine works out for you. The engine converts the amount to nominal at the rung's maturity year using the cycle's cumulative inflation path.
  • Real coupon rate (%) / Real yield (%): entered as a percent (enter 2 for 2%). Priced at par it is the coupon the rung pays out as cash each year; priced at present value the column is relabeled Real yield and it is the rate the rung is discounted and accreted at. Under Manual rates yield-source mode the rate is locked across every cycle. Under Historical TIPS mode the rate column is read-only and the engine resolves the rate per-cycle from the tips_real series at each cycle's start year.

Pricing: at par vs. at present value

A ladder picks one of two ways to price its rungs. This changes what the ladder is worth today and whether it pays you cash along the way. It never changes what the rungs pay out - each rung still redeems for its full Amount in today's dollars in both cases.

  • At par - pays a cash coupon every year. The rung is held at its face value for its whole life, and the rate is paid out as cash into the owning account each year, where your spending plan can draw on it. This is exactly right when a bond's coupon equals the market's real yield, i.e. when it trades at par - a newly issued TIPS bought at auction is close to this.
  • At present value - accretes to face value, no coupons. The rung is treated as a zero-coupon claim: it starts at what it would cost today, grows at its real yield every year (on top of inflation), and arrives at its full face value in its maturity year. No cash arrives until maturity - the yield is delivered entirely as that growth.

New ladders start at present value, because that is what almost everyone transcribing a redemption schedule wants. Ladders you saved before this option existed keep at par and are completely unchanged - switching them is your call, not something the app does under you. The editor shows a note on a par ladder so the choice is visible.

Which one do you want? Real TIPS ladders are usually planned as "receive $X real in year Y", and the bonds that deliver that trade at a discount - their yield to maturity is above their coupon. If you built your ladder from a redemption schedule (or from a ladder-builder tool), pick present value: entering the redemption amounts under par would show the future payouts as if they were spendable today, overstating both the account balance and its share of your allocation, and starting the simulation from a portfolio you don't have.

Worked example. Five rungs of $40,000 each at a 2% real yield, maturing in 21-25 years. At par the ladder shows $200,000 today. At present value it shows $126,881 - and each rung still pays its $40,000 when it matures, because the smaller starting value grows ~2% a year in real terms until it gets there. The editor shows both numbers on one line while present value is selected. If some of your rungs are scheduled purchases, that line says so and covers only the rungs you own today - an unbought rung is worth nothing to the account yet.

Two consequences worth knowing in present-value mode. Scheduled and replacement rungs are bought at the discounted price rather than at par, so building a ladder out over time costs your plan what the bonds actually cost. And a Brokerage-owned rung's phantom income is larger: it covers the whole year's growth (inflation accrual plus yield accretion), which is how a discount-bought TIPS is actually taxed.

Present value requires Manual rates. The selector is disabled under Historical TIPS, because that mode resolves a different rate in every simulation cycle and there is no single rate to discount the displayed value at.

Yield-source modes

Each ladder picks one of two yield-source modes:

  • Manual rates: the user-entered Real coupon rate applies across every cycle. Useful for sensitivity analysis: "what if I bought a ladder at these specific yields?"
  • Historical TIPS: each cycle's rungs use the historical tips_real rate observed at that cycle's start year. Useful for realistic backtesting: "how did a TIPS ladder fare for someone retiring in 1985 vs. 2010?" In non-historical sim modes (Constant Returns, Monte Carlo), the resolver falls back to the most recent available tips_real rate.

Proceeds policy

Each ladder configures what happens to a rung's matured cash after the year's spending runs:

  • Fund spending (default): matured cash sits in CASH; the spending plan naturally pulls from it first, and any leftover stays as surplus.
  • Reinvest into ladder: surplus would mint a new rung at the ladder's farthest maturity year. In v1 this collapses to Fund spending when the remaining horizon is too short for a meaningful rung.
  • Rebalance to equities: the regular rebalance pass routes surplus into EQUITIES when the glide path biases equities-heavy.

Note: Reinvest into ladder is not available in the Continuous modes (below), where the ladder's horizon is managed by target_forward_horizon instead, so the maturity surplus is already claimed by replacement rungs. After a sunset year (under Continuous, then Spend Down), the remaining proceeds policy (Fund spending or Rebalance to equities) re-activates and governs the drain phase.

Spend Down vs. Continuous vs. Continuous-then-Spend-Down

A ladder runs in one of three modes, set by a top-level mode selector in the ladder editor. They differ in what happens when a rung matures:

  • Spend Down (the default): a finite ladder. Rungs mature and are consumed; the ladder runs out at year N and is never refilled. This funds the early sequence-of-returns-risk window, the "improved equity glide path" pattern. Pick this when you want the ladder to carry you through the opening years of retirement and then hand off to the equity sleeve.
  • Continuous (perpetual): every maturing rung is replaced with a new long-dated rung, so the ladder slides forward indefinitely and holds a permanent inflation-protected income floor. Pick this when you have enough wealth that you don't need to spend the ladder down; you want a lifelong hedge against equity drawdowns, not a finite bridge.
  • Continuous, then Spend Down: maintain the ladder (replacing every maturing rung) up to a sunset year, then stop replacing and let it drain over the remaining years. This is the canonical "maintain my ladder until age 85, then let it drain through 95" plan: a perpetual floor for the years you most want certainty, with a graceful wind-down afterward.

Both Continuous modes are driven by target_forward_horizon: "always keep N years of rungs out from the current year" (1–50, default 10). As each rung matures, the engine buys a replacement maturing at current_year + target_forward_horizon, so the ladder's structure stays intact year over year. Under Continuous, then Spend Down, the sunset year (continuous_until_year) is the point past which no more replacements are purchased; the existing rungs simply mature out per the Spend Down flow.

Building a ladder over time (scheduled purchases)

Patterns 1 and 2 both assume the whole ladder exists at year 0: you buy every rung up front. Pattern 3 lets you build the ladder out over scheduled future years. Each rung carries a Purchase year (simulation-relative, 0 = today / sim start, the default). A rung with purchase year > 0 is scheduled: it doesn't exist until that year. When the simulation reaches the purchase year, the engine buys the rung (funded per the funding-source policy below), materializes it on its owning account, and it starts accruing from there. The only constraint is that a rung's purchase year must be before its maturity year.

Pattern 3 composes with the other two rather than replacing them. The ladder builds out over its scheduled years and then behaves like whatever else you've configured: with Spend Down it drains as the rungs mature (Pattern 1), and with a target_forward_horizon set it keeps replacing maturing rungs afterward (Pattern 2). The features touch different phases of a rung's life: Pattern 3 handles creation, the accrual/maturity steps handle the middle, and the continuous modes handle post-maturity replacement.

In the ladder editor you'll find:

  • A Purchase year column per rung. New rungs default to already owned (purchase year 0, a past purchase, input hidden). Click the Future purchase? link to schedule it, which reveals a purchase-year dropdown so you can pick a future year (the same simulation-year list as Maturity year, with Retirement Year on top). To turn a scheduled rung back into one you already hold, use the Already owned? link. Scheduled rungs are flagged with an amber Scheduled badge (and an amber row highlight); the purchase year itself shows in that rung's purchase-year dropdown.
  • A per-rung funding-source override. A scheduled rung can use a different funding source than the ladder default: for example, fund years 1–3 from a savings account where you've parked the build-out budget, then years 4–5 by selling equities once that account is depleted. When the override is left unset (the common case) the rung inherits the ladder-level policy.
  • A "Build out a ladder" auto-fill. Give it a span of build years, a maturity offset (Matures N years later), an Amount per year, and a coupon rate, and it generates the rungs for you, e.g. "$40k/yr for 5 years, each maturing 10 years later." The rungs are created on the account you're editing; the generated rows are normal editable rungs you can tweak afterward.

Funding replacement rungs

In a Continuous mode, each replacement rung has a cost: the price of the new long-dated bond at par. The matured principal that just landed as cash covers part of it; the rest comes from the ladder's funding-source policy:

  • Surplus maturity cash only: replacements are funded purely from the matured principal sitting in cash. Cheapest option, but if the ladder's coupon yield doesn't keep pace with the cost of replacement rungs, the ladder shrinks a little each year (the engine sizes the replacement down gracefully rather than failing). The horizon can erode over time.
  • Surplus cash, then sell equities: uses the owning account's cash first, then sells equities to cover any remaining gap, realizing long-term capital gains through the normal tax pipeline. This holds the horizon at full size, at the cost of drawing down the equity sleeve.
  • Pull from a specific account: uses the owning account's cash (including maturity proceeds) first, then draws from the named account to cover any remaining gap. No equity sales. Useful when you have a dedicated savings account or CD ladder set aside to top up the TIPS ladder, but still want maturity proceeds recycled into the next rung before touching that reserve.

Graceful degradation: if no funding can be found, the replacement is sized down or skipped rather than failing the cycle, and Proof View surfaces a Funding shortfalls row so you can see when and by how much the ladder fell short.

These same three funding policies govern scheduled purchases (Pattern 3, above), not just continuous-mode replacements. A scheduled rung uses the ladder-level policy by default, but a per-rung funding-source override always beats the ladder default for that rung, so you can mix sources across the build-out years.

Replacement rungs inherit the maturing rung's owning account: a maturing Roth rung is replaced with a Roth rung, a Brokerage rung with a Brokerage rung (including the phantom-income tax that comes with it). The replacement's coupon rate follows the ladder's yield-source mode: under Manual rates it uses the user-set "Coupon rate for replacement rungs"; under Historical TIPS the rate is resolved at each purchase year from the tips_real series.

How the ladder interacts with your allocation

The ladder is a finite carve-out, separate from your rebalanced allocation. Your glide-path class targets (equities / bonds / cash / gold) describe how to allocate the rest of your portfolio, the non-ladder pool. The ladder is never rebalanced and is never backfilled with regular bonds as it drains.

This is what makes the "improved equity glide path" work in Spend Down mode: as each rung matures and funds spending, the ladder shrinks, and the share it vacates simply follows the rest of your allocation. If the rest of your portfolio is all equities, your overall equity share rises naturally as the ladder burns down, and you don't have to hand-author a declining bonds curve to get there.

Phantom income for Brokerage-owned rungs

The IRS taxes TIPS inflation adjustments in the year they accrue, even though the cash arrives at maturity. FIREproof models this as an annual ordinary-interest tax event for any rung whose owning account is a Brokerage Account: the inflation accrual (current nominal balance × per-year inflation rate) flows through the normal tax pipeline and affects IRMAA, ACA premium credits, SS provisional income, NIIT, and bracket-fill space. Rungs in retirement-wrapper accounts (Roth IRA, Traditional IRA, 401k variants, HSA) skip phantom-income emission entirely.

In present value mode the accrual is larger: it is the whole year's growth in the rung's book value - the inflation accrual plus the yield accretion - because both are annually taxable on a TIPS bought at a discount. There is no separate coupon line in that mode, since the yield arrives as the accretion rather than as cash.

When the account you're editing is a Brokerage account, the Bond Ladder editor surfaces an info banner at the top of the modal so you can see the tax implication before saving. The accrual isn't a cash flow of its own, so it isn't listed under the Bond Ladder cash-flow group; instead its cost is rolled into your ordinary income taxes for the year (Proof View → Cash Flow → Taxes), along with any knock-on IRMAA, ACA, Social Security, and NIIT effects.

What happens if a rung needs to be sold early

Bond Ladder vs. Bucket Strategy

A portfolio may carry either a TIPS Ladder or a Bucket Strategy, but not both in v1. Both features control "where does spending come from"; defining a precedence rule between them has too many corner cases to be worth a v1 surface. Each editor surfaces a banner when the other feature is active and disables Save until one is cleared.

Limitations

  • Nominal bond ladders are not modeled in v1; only TIPS (real yields) are.
  • Multi-tenor real-yield curves are not modeled: Historical TIPS mode applies the single-tenor tips_real value to every rung regardless of maturity.
  • Stochastic real yields between purchase and maturity are not modeled: rungs hold their entered real yield to maturity (matches real-world buy-and-hold behavior).
  • Auto-laddering presets ("build me a 30-rung ladder of $40k/yr at today's curve") are deferred to a future polish. The manual rung builder is the v1 entry path.

Related

Was this helpful?

For sim-specific issues, open Plan Diagnostics from the Proof view. For everything else, reach out to support.