The maths

A retirement date you can check.

The FIRE goal, the retirement date and the general net worth forecast all run on the same handful of functions. This page documents the actual formulas, not a simplified explainer version. If a number on your dashboard looks wrong, you should be able to reproduce it from what's below.

Net worth basis: investable vs. total

Two ways to look at net worth. Total is everything, including property and vehicles. Investable strips those out, because a house can't fund a monthly withdrawal without selling it. Every forecast below runs on the investable figure unless stated otherwise.

investable net worth = Σ(liquid assets by type) − total liabilities
where liquid excludes: property, vehicle

Turning an annual return into a monthly one

Contributions happen monthly, so the annual return assumption gets converted to an equivalent monthly rate by compounding. It isn't just divided by 12, which would understate the effect of compounding within the year.

monthly rate = (1 + annual return) ^ (1/12) − 1

e.g. 7% annual → 0.5654% monthly

Growing a balance forward

Each month, the balance compounds at the monthly rate and the contribution is added. Once a year, the contribution itself grows by your assumed contribution growth rate (e.g. a raise).

value ← value × (1 + monthly rate) + monthly contribution
every 12 months: contribution ← contribution × (1 + growth rate)

Worked example: $50,000 start, $1,000/month contribution growing 3%/year, 7% expected annual return:

YearBalance
0$50,000
1$65,880
2$83,244
3$102,205
5$145,424
10$291,253

How long until a target?

Same monthly loop as above, run until the balance clears the target (capped at 100 years). This is what answers "when do I hit $1M" or "when is my FIRE number reached."

Same example as above, target $1,000,000: reached in 265 months (22.1 years).

Coast FIRE

The earliest point where you could stop contributing entirely and still reach the target by your horizon, purely on compounding. Computed by checking, at each month, whether the current balance, left alone and compounded for the remaining time, would already clear the target.

The FIRE number (safe withdrawal rate)

Today's monthly spend is inflated forward to the year you plan to stop working, annualised, then divided by your safe withdrawal rate. A lower SWR means a bigger, more conservative nest egg for the same spend.

spend at horizon = spend today × (1 + inflation) ^ years
nest egg = (spend at horizon × 12) ÷ safe withdrawal rate

Worked example: $4,000/month today, 3% inflation, 20 years out, 4% SWR:

spend at horizon ≈ $7,224/month
nest egg needed ≈ $2,167,333

Retirement drawdown

After retirement, the first year's withdrawal is the corpus times the safe withdrawal rate. The corpus then grows at your real (inflation-adjusted) return and shrinks by that year's spend; the spend itself grows with inflation each year after. This is what draws the "does the money last" line on the retirement chart.

year-1 withdrawal = corpus × safe withdrawal rate
value ← value × (1 + real return) − annual spend
annual spend ← annual spend × (1 + inflation)

Uncertainty ranges (Monte Carlo)

A single projection line assumes one fixed return every year, which never actually happens. The range chart instead runs 600 simulated paths, each year drawing a random return around your expected return, and reports the 10th/25th/50th/75th/90th percentile outcomes at each year.

The spread of that randomness (volatility) comes from your actual asset mix. Each asset class carries an assumed annual volatility (stocks 18%, crypto 60%, deposits 2%, cash 1%, property 8%, vehicles 10%, pensions 12%, precious metals 15%, loans 0%, other 12%), combined by portfolio weight. This combination assumes each asset class moves independently of the others, which understates risk when your holdings are correlated (e.g. concentrated in one sector). That's a simplification we'd rather state plainly than hide. If your portfolio has real price history, we use its actual realised volatility instead of the class-mix estimate where that's available; a fixed 11.5% is the last-resort fallback. The combined figure is clamped between 5% and 50% either way, so a single wild data point can't produce a nonsensical range.

mixed volatility = √(Σ weight² × class volatility²)
clamped to [5%, 50%]

Which assumption moves your date the most?

The sensitivity view recomputes "months to target" three times, nudging savings rate, expected return, and retirement spend up and down in turn, and shows which lever moves the date furthest. It's the same months to target function from above, just run six times with one input changed at a time.

What we fill in for you by default

Two numbers are pre-filled from your actual data rather than left at an arbitrary default. You can always override them:

  • Monthly contribution defaults to your active salary inflows minus loan (EMI) outflows, weighted by your ownership share and converted to your display currency. This only applies when you have at least one active salary flow recorded.
  • Retirement spend defaults to a cost-of-living benchmark for your country when one is available, converted to your currency. Again, this only kicks in once a salary flow exists, so the default reflects an actual working household rather than a guess for an empty account.