Dashboard
▶ Every card explainedLiquid net of debts (today's $) recent actuals → retirement · full plan on Projections
Milestones ▶ Coast FIRE explained
How these numbers are worked out
FI = spending ÷ SWR in today's dollars; projected liquid accounts are deflated to today's dollars, and margin loans and mortgages subtract from FI progress. Coast FI = the amount that grows to your FI number by retirement with no further saving.
Accounts
This year
Coming up
Progress snapshots — plan vs actual, month over month ▶ Monthly check-in
Green dots on the Projection chart plot the active scenario’s actuals over its plan.
What a snapshot records
On your first save each calendar month, every scenario’s actual liquid / debts / net worth and key plan metrics are recorded, so the month-over-month deltas show whether the plan is trending the right way. Each scenario snapshots from its own balances + vested RSUs, with FI progress, projected FI date, net at retirement and survival odds at that moment. Monte Carlo survival uses the same run count as the Insights tab — ±2–3% between snapshots is run noise, not signal. Snapshots are tracked per profile: the monthly auto-snapshot records every profile, Snapshot now records just the active one. They live in your plan file and survive export/import.
How scenarios work
Every tab shows the scenario selected here, and each scenario keeps its own accounts, cash flows, holdings and strategy. Use ⧉ Duplicate to branch one, then change the copy — the Compare tab puts them side by side.
1 · About you
2 · Targets & spending ▶ How to set these
How FIRE targets are calculated
Four FIRE types are tracked: Lean, FIRE and Fat each have a spending input above (target = spending ÷ SWR); Coast FIRE has no input — it's derived from the FIRE target and your years to retirement. FI numbers, Coast FI and progress % auto-calculate from these targets and your SWR. The spending figure itself is yours to set — or auto-fill it from the expense streams active in your retirement year (debt payments excluded, since they end). Turn on ⟳ Auto-sync to keep all three figures recalculating automatically whenever the retirement year or your expense streams change — your FIRE number then always reflects what life costs at the year you chose (e.g. mortgage gone, tuition done), not today's expenses.
3 · How you'll withdraw ▶ 4% rule vs taxes
How the modes, RRSP top-up and withdrawal order work
"Expense streams" spends what your Cash Flows tab says; the other modes withdraw per the strategy and spending becomes what's left after tax. Fields that don't apply to the active mode are grayed out.
How the sweep works
⚙ Advanced — RRSP top-up, flexible spending, debt paydown
What flexible spending changes
4 · Returns & accounts📈 📈 = set by Portfolio → Apply
How these returns are used
These are nominal rates — inflation included, so a 7% return with 2.5% inflation is roughly a 4.4% real return. The before retirement rate grows accounts while you work; the plan switches to the in retirement rate the year you retire (typically set lower to reflect a more conservative mix). Together they drive the single deterministic projection used everywhere in the app; Monte Carlo (Insights tab) draws random yearly returns around its own mean and volatility settings, shifting by your pre/post spread at retirement — Monte Carlo's own volatility/sampling settings live on the Insights tab. Per-account Ret% overrides on the Accounts tab beat these plan-wide rates, and the Portfolio tab's Apply button writes its blended CAGR here (Restore undoes it).
⚙ US tax & health — filing status, state rate, health costs
Accounts, Debts & Assets
▶ Entering accounts & cash flowsAccounts
How accounts work
Currency, Min balance & Ret% / Vol%
USD accounts: enter balance, contribution and cost basis in USD — everything is converted to CAD at the rate above before any calculation (charts and projections always show CAD; the rate is held constant over the plan). Min balance is a per-account liquidity reserve: withdrawals (and every optimizer solution) leave at least that much and pull from the next account in the withdrawal order instead — today’s $ in the account’s own currency, inflation-indexed, breached only if every other account is empty. Ret% pre / post: blank uses the scenario’s plan returns; enter numbers to pin the account to its own rates before and after retirement (e.g. equities 8/6, GIC 4/4). Vol % works the same way — blank follows the plan’s volatility, so a pinned account still swings with the market around its own return; enter 0 only for a return that is genuinely certain, like a GIC held to maturity; enter a number to use that volatility. Surplus cash sweeps by the Savings priority; the retirement withdrawal order lives in the Withdrawal strategy panel (both on the Plan tab). RRSP withdrawals are taxed as income; taxable gains at 50% inclusion; TFSA is tax-free.
Post-retirement paydown timing is configured on the Plan tab → Retirement withdrawal strategy.
How debt interest, deductibility & paydown work
USD debts (margin loans) convert at the live rate, held constant over the plan. Interest marked Deductible (borrowed to invest — margin, Smith manoeuvre) reduces taxable income by each year's interest, so a 5.5% loan effectively costs ~half that at a high marginal rate. Debts with a monthly payment amortize normally. Debts with $0/mo accrue interest until either working-year surplus (Savings priority) or the post-retirement paydown configured on the Plan tab clears them — the paydown is withdrawn from your accounts through the normal order, with withdrawal taxes included.
Property & other assets
| Name | Value $ | Growth %/yr |
|---|
Counted in net worth, not spendable — retirement runs on liquid accounts only.
Where these assets show up
Total net worth, including these assets, is the dashed line on the projection chart. Retirement spending is drawn from liquid accounts only, so a house adds to your net worth without moving your FI date. Set its current value in the table above.
Investment strategy
What this panel is for. It works out a return and volatility assumption from what you hold — nothing here reaches your plan until you press Apply or Pin.
| Ticker / fund | Account | Weight % | CAGR | Avg return | Volatility | MER | Data |
|---|
How holdings drive the projection
Working out the blend. List the tickers and weights that make up each account (or the whole plan). ↻ Fetch history pulls each ticker's full price history; the stats line then shows the blended portfolio's CAGR, average return and volatility, computed year-by-year across the weighted mix — so correlations between holdings are preserved, not assumed. Returns are real calendar-year returns, dividend-adjusted where the source provides it. The 10y/20y/Max toggle picks how much history feeds the stats — but only years all tickers share are used, so one young listing (QQQM, 2020) caps the whole blend at a few years however the toggle is set; the stats line names the culprit. A share class that tracks the same index as an older fund can borrow its twin's history (QQQM → QQQ, VOO / IVV / SPLG / SPYM → SPY) with one click on the row — weight, name and quote stay the row's own.
Mutual funds. US funds work by ticker (VFIAX); Canadian funds have no ticker at all, so type the FundSERV code (TDB902, INI220, PHN350 — ~50 of the common ones resolve automatically) or use 🔍 Find a fund to search by name and pick the right series. The fund's real name shows under the box — check it matches what you hold.
⊕ Manual rows need no ticker at all: type a CAGR and volatility yourself (from the fund's own Fund Facts long-run return, say), and they blend in as a steady sleeve, with their volatility added assuming it is uncorrelated with the rest.
Where the numbers land. Each press is a one-time copy, not a live link — change a weight or refetch history later and your plan keeps the old number until you press again. Rows set to Whole plan blend together and feed the two buttons on the stats line: Apply CAGR overwrites the Plan tab’s Return % pre/post, and Apply avg + vol overwrites the Monte Carlo mean and volatility — ↺ Restore puts back whatever you had before. Rows tagged to a specific account blend separately, per account, and that group’s Pin button writes its blend into that account’s Ret% pre, Ret% post and Vol % on the Accounts tab, which from then on override the plan return for that account in both the projection and Monte Carlo. Two consequences worth knowing: a plan-wide Apply does not reach accounts you have pinned — it only moves the rest — and a pinned account carrying a Vol % moves in lockstep with the market each simulated year, scaled by its own volatility, so a concentrated account stays genuinely risky instead of averaging out. (The applied ✓ badge is worked out by comparing the account’s Ret% against the current blend, so if you change a weight it turns back into a Pin button — that is the panel noticing its copy is stale, not losing your setting.) Past performance is history, not a promise — everything here is a starting-point assumption you can edit anywhere it lands.
Fees, and what these numbers can’t tell you
Fees are already in these numbers. A fund or ETF deducts its MER from its own assets every day, so the price history fetched here is net of it — the CAGR, average return and volatility above are all after-fee. That is also why the share class matters: the same fund in a cheaper series compounds visibly faster (RBC Canadian Equity Income returned 10.5%/yr in Series A and 12.5%/yr in Series O over the same 2018–2026 window — that 2pp gap is the fee). Not included: brokerage commissions, sales loads and any advisor fee billed outside the fund.
Past ≠ future: single-stock CAGRs (AAPL, NVDA…) are survivor-biased, and a young ETF’s “Max” window may be all bull market — prefer Max or 20y over 10y. Canadian mutual funds carry no history before 2018 on the data source, however old the fund is, so their “Max” is ~8 years of an almost unbroken bull run — the published long-run return from the fund’s own Fund Facts, entered on a ⊕ Manual row, is usually the more honest input. History fetches need the hosted (http) version.
RSU grants — vested (held) & unvested ▶ Vesting & forfeiture
| Grant | Ticker | Vested | Vest $/sh | Held | Unvested | Vest/yr | Vest mo | Every | Day | Price | Cur | Grow% | Start | Gross/yr | Net/yr | Done |
|---|
How grants flow through the plan
Unvested shares vest at the per-year rate while their owner still works. Each vest is employment income at that year’s share price (today’s price grown at Grow%), taxed like salary — that is the sell-to-cover. Anything still unvested at retirement is forfeited: the walk-away cost on the Insights tab. The Sell-to-cover % below only drives the Net/yr column (what actually lands in your brokerage as shares) — the projection taxes vests at your true marginal rate, since over-withholding comes back at filing.
Vested (held) shares are already yours: they count in net worth and are modelled as a taxable stock holding growing at Grow%, shaken in Monte Carlo and sold only when the withdrawal order needs the money — you never enter a sell price. Vest $/sh is their cost basis (the FMV on your broker’s vest confirmation); the gain from there to the sale price is taxed at 50% inclusion. Left blank it defaults to today’s price, so any gain since vest is invisible to the tax engine. Batches that vested at different prices: enter the weighted average, or one grant row per batch.
Keeping it current: after a real vest, move the kept shares from Unvested to Vested held and update the weighted Vest $/sh; after a real sale, reduce Vested held and add the after-tax proceeds to an account (that tax was already paid, so the model shouldn’t re-tax it). Vest mo + Every set the schedule: Vest mo is the first vest and each later tranche steps on from it, so an Aug grant vesting quarterly lands Aug, Nov, Feb, May. Unvested is always what is still unvested today — tranches dated on or before today never count again, so keeping the row current is just that move from Unvested to Vested held. A grant with a cliff: enter the first vest as the cliff date and put the cliff chunk in its own row. Price is today’s market price (RSUs have no cost base until vest); USD grants convert at the FX rate, ↻ Quotes refreshes prices and ⏪ Back-date estimates historical vest prices.
Income streams (today's $ per year)
Leave End year 0 for income with no end date — salary and bonus stop at your retirement year; pension, CPP/OAS and other run to the end of the plan. Start year 0 = already running.
How income rows work
Expense streams (today's $) ▶ One-time costs
| Name | Type | Category | Amount | per | Start year | Start mo | End year | End mo | Repeat | Dollars |
|---|
Leave End year 0 for an expense that never stops — it runs to the end of the plan, and it’s the part of your spending multiplied into the FIRE number. Type an end year and it’s treated as temporary instead. Start year 0 = already running.
How expense streams work
Each stream is a block of spending with its own dates: enter the amount per month or per year (stored yearly), partial years prorate by month, and Repeat every N years turns a dated block into a recurring one — a car with 5 years of payments every 10 years is one stream, not one per decade. Essential vs Discretionary matters beyond tidiness: Lean FIRE is computed from essential-only spending, so marking cuttable costs Discretionary lowers your lean target. Streams active in your retirement year drive the FIRE targets when auto-sync is on (Plan tab). Dollars: Today's $ · rises = the amount is in today's dollars and grows with inflation; Start-year $ · rises = the amount is what you'll pay in its start year, then grows (for lines that start later); Fixed $ · never rises = the same dollar amount every year, like a loan payment — so it shrinks in today's $. End year 0 = end of plan. once = a one-time purchase: the whole amount lands in the start year (0 = this year, charged in full — delete the row if it's already paid), End year is ignored, Repeat every N years makes it recur (a new car every 10 years), and it never inflates your FIRE number. In the fixed-amount and strategy spending modes, a one-time purchase is withdrawn on top of the strategy amount in its year (as a gross withdrawal — those modes don't gross up for tax, so budget the sticker price). Debt payments are handled on the Plan tab — don't duplicate them here.
| Category | Annual $ | % of total |
|---|
Life — phases, experiences & gifts ▶ Go-go, slow-go, no-go
Spend while you're able: taper discretionary spending as you age, plan experiences while you're fit, and give while you're alive.
How much more could you spend? 🚀 Optimize (Plan tab) → Spend more. (Pro)
Net worth projection
Cash flow — money in vs money out
Account burndown — where withdrawals come from
Debt paydown — balance by debt
Year inspector ▶ Year inspector explained
AgeDrag to any year — the stats, the money-flow diagram, and the detail tables below all follow this slider.
Money flow — where it comes from, where it goes
Income on the left (stacked by source), then each step down — taxes, spending, debt — leaves what you kept on the right. Hover any segment for the detail.
Money in — full detail
Money out — full detail
Year-by-year detail
How to read this table
Retirement playbook
Once you stop working, where does each year’s spending money come from?
Recommendations
Rule-based checks on this scenario's own numbers — educational model output, not financial advice.
This year's playbook ▶ Reading the playbook
Drag to any year for that year’s account-by-account withdrawal readout.
How to read the playbook
The playbook turns your projection into a year-by-year withdrawal outline — a readout of your plan, not new input and not advice. Amounts follow the Future $/Today’s $ toggle in the header.
Active strategy
The settings driving every playbook above — click "edit →" on any card to jump to where it's configured.
When would I change these?
Tax analytics ▶ Bracket map explained
Income composition by year
Tax brackets & rules used (2026, thresholds indexed with your inflation)
How money flows through the plan
What If — quick sensitivity
temporary overlay on the active scenario · nothing is saved ▶ Can you retire 2 years earlier? ▶ What-If explainedLiquid net worth — baseline vs what-if (today's $)
Insights
Monte Carlo — net portfolio percentile bands (after debts)
How the simulation works
Sequence-of-returns explorer — your plan replayed through history ▶ Sequence risk explained
How the historical replay works
Every line runs your exact plan through real S&P 500 total returns (1928–2024), one trial per start year, in calendar order, and each year's prices rise by that year's real US inflation (CPI) instead of your fixed rate — so a 1966 start lives through the 1970s. A plan longer than the history left after a start year jumps to a random year and carries on (two passes, so each such start gets two different jumps; it used to loop back to 1928, which pushed every recent start into the 1929 crash). The post-retirement return keeps your pre/post spread. This view assumes markets repeat at history's own 11.8% average — the Monte Carlo above uses your expected return, which is why the two numbers differ. What sinks a plan is when the bad years land, not the average — compare the red starts against the Monte Carlo bands above.
Levers — tested on both simulations
at%Levers tested in the model, one at a time — each row changes a single thing in a copy of your plan and re-runs both simulations with the same random draws, so the differences are the lever and nothing else. Results of tests, not advice; effects do not simply add up.
Retirement year × return — where your plan survives
Model: deterministic projection — one straight-line run per cell at a fixed return every year (no Monte Carlo, no historical sequence), so it shows how the retirement date and the return assumption move the plan, not the odds.
How to read this heatmap
Each cell is a full deterministic projection at that retirement year and pre-retirement return (post-retirement keeps your current spread; the debt-free rule applies if enabled). Hover any cell for the ending balance. Failing cells are cross-hatched in addition to being red, so pass/fail doesn't rely on colour alone.
RSU walk-away analysis
| Hit ▶ Analyze to compare retirement years: RSU value you'd still collect vs forfeit, and whether the plan survives each choice. |
How to read this analysis
Each row retires you in that year (same quarter as your plan) and re-runs the projection: RSU kept = future vests you'd collect by then at projected prices, forfeited = unvested value left on the table, plus net liquid at that retirement (today's $), Monte Carlo survival (the same run count as the Insights tab — a few % either way is run noise) and the S&P 500 history replay. 🎯 marks the earliest year that meets your 🚀 Optimize requirements (Plan tab, under the Optimize button) on both numbers — the point where staying longer is about wanting more, not needing more. Your currently planned year is highlighted.
RRSP meltdown — with vs without the bracket top-up
How to read this tab
The chips pick which profiles are compared — click to include or exclude one (the active profile always stays in; your selection saves with the plan). The chart plots each profile's liquid net worth after debts in today's $ (zoom with 10y/20y/30y/All). The cards call out the winners — earliest retirement, best survival, cheapest FIRE number, richest ending. In the table, green/bold marks the best value in each column; WR @ ret is first-year spending ÷ net liquid at retirement (green ≤4%), Depletes is the year money runs out (green Never = the plan lasts), and MC % / History % fill in after "Run MC + history for all" (the Insights tab's run count per scenario · S&P 500 history replayed from every start year since 1928). Click any row to switch to that profile.
Scenarios — liquid net of debts (today's $)
WalkAwayFI Pro
Backup, export & import ▶ Backups explained
Export downloads your full plan — every scenario in one JSON file. Drop it back here on any machine to restore everything exactly as it was.
Other tools, and where your plan is saved
Exports from some other planning tools are also recognized and converted automatically. Your plan auto-saves in this browser (localStorage); the self-hosted server.py additionally syncs it to the server's data file.
Plan summary
Where your data lives:
Everything you enter is stored in this browser's localStorage — nothing is uploaded to a server, unless you're running the self-hosted server.py, which additionally syncs to that server's local data file.
Nothing here leaves your machine unless you export it or run your own server.
Clearing this browser's site data (or switching browsers/devices) erases it — export a backup regularly.
Tax model details are described on the Taxes tab.