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: the inflation-adjusted face value, in today's (real) dollars. The engine converts it to nominal at the rung's maturity year using the cycle's cumulative inflation path.
- Real coupon rate (%): the rung's real yield, entered as a percent (enter
2for a 2% real yield). Under Manual rates yield-source mode this 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 thetips_realseries at each cycle's start year.
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_realrate 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 availabletips_realrate.
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.
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_realvalue 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
For sim-specific issues, open Plan Diagnostics from the Proof view. For everything else, reach out to support.