# FIREcalc methodology > Distilled from the in-app help. This matches the calculator that runs in the browser. It is a planning sketch, not a full-history Trinity or Bengen study. ## What it does FIREcalc runs a savings calculator and a retirement calculator locally. Inputs are not sent to a server to compute the result. There is no account. ## Data, 1975–2024 - Stocks: S&P 500 total return, including dividends. 1975–2020 is the series the app already used. 2021–2024 are Damodaran S&P 500 total returns: 28.47%, −18.04%, 26.06%, and 24.88%. - Non-stock sleeve: that year’s 10-year US Treasury total return, from Aswath Damodaran, NYU Stern, “Historical Returns on Stocks, Bonds and Bills” (January 2026). This is not the Bloomberg US Aggregate. Treasury returns can be negative. In 2022 Treasuries were −17.83% and stocks were −18.04%. The series is more volatile than a total-bond fund. - Inflation: the CPI rate stored on each row, paired with that year’s stock return. The table starts in 1975. It does not include 1966 or 1973–74. ## Two ways to use the table - Shuffled years: each simulated year is drawn at random from the 50 rows. Stock return, Treasury return, and inflation stay together. The next year is independent. - Historical cycles: the model walks through the years that followed a start year. Retirement keeps only complete windows. A 30-year retirement has 21 windows. A 40-year retirement has 11. A 50-year retirement has one. Savings uses every start year from 1975 until the goal or until 2024, so a late start has only a few years of data. Shuffled paths use a fixed random seed until the user presses Reshuffle, so the same inputs give the same result. A share link carries the seed. ## Savings goal The typed goal is today’s purchasing power. Each year the portfolio earns that year’s stock and Treasury return, income and spending rise with that year’s inflation, and the contribution is income minus spending (never below zero). The model compares portfolio divided by cumulative inflation to the goal. A nominal balance can pass the goal number before purchasing power does. The savings headline is the median number of years, with the 10th percentile (the faster 10% of paths) and the 90th percentile (the slower 10%) beside it, and the share of paths that reach the goal within 50 years. ## Retirement success Success means the portfolio is still above zero at the end of every year of the chosen horizon. The year’s return is applied before the withdrawal. If withdrawals are adjusted for inflation, spending rises with inflation starting in the second year. Simple taxes gross spending up by 1 / (1 − tax rate). There is no fee, no glide path, and no separate cash bucket. Social Security is off unless the user turns it on. When it is on, the result states the monthly benefit, the claiming age, and that the income is inside the success rate. That rate is then not a portfolio-only withdrawal test. The retirement range chart shows, at each age, the 10th, 25th, 50th, 75th, and 90th percentile of balance across all paths. A path that ran out counts as $0 from then on. The chart starts in today’s dollars (each path’s balance divided by its own cumulative inflation) and can switch to future dollars. The median line is the middle balance at each age, not one path. ## The 4% rule The published 4% rule measured an inflation-adjusted withdrawal over historical retirement cohorts. This tool can run a similar question only in Historical cycles mode, and only inside 1975–2024. Shuffled years are a different statistic. A tax rate makes the portfolio draw larger than the after-tax spending that was typed. Social Security, if turned on, lowers the portfolio withdrawal. ## Taxes and other income Simple mode applies one rate. Detailed mode uses 2025 federal brackets, the standard deduction, and long-term gains on half of taxable-account withdrawals. Brackets are not inflation-indexed. Social Security taxability uses married-filing-jointly thresholds even if filing status is single. “Optimize withdrawal order” does not change the result, because separate account balances are not tracked. The model does not include early-withdrawal penalties, RMDs, NIIT, IRMAA, or ACA premiums. Part-time work, a pension, or Social Security belong in the “Social Security & other income” section. Subtracting that income from the withdrawal as well counts it twice. Social Security uses the benefit at full retirement age (67) and scales it for the claiming age. It receives a cost-of-living adjustment. A pension stays flat in nominal dollars. ## Named stress packs The retirement results include six named stress packs. Each runs the plan through one real stretch of the table, in the order the years happened, with the same engine as the main result (spending, stock mix, taxes, Social Security, and other income all apply). A pack is one path. It is not a success rate. A pack starts in its first villain year and runs for the plan’s length, but never past 2024. If the villain stretch is longer than the plan, the whole stretch runs. The result states the exact years used. - stagflation: Stagflation squeeze. Villain years 1977–1981. Starts 1977. - rate-wall-81: Rate wall of ’81. Villain year 1981. Starts 1981. - bond-rout-94: Bond rout of ’94. Villain year 1994. Starts 1994. - dotcom: Dot-com hangover. Villain years 2000–2002. Starts 2000. A 30-year plan is clipped to 2000–2024, 25 years. - gfc: GFC crash. Villain year 2008. Starts 2008. - rate-shock-22: 2022 rate shock. Villain year 2022. Starts 2022. At most 3 years, 2022–2024. There is no pack for 1966 or 1973–74, which are before the table. There is none for Black Monday or the COVID crash: stocks returned +5.6% in 1987 and +18.4% in 2020 in this annual table, so those drops do not appear as down years. Links: https://firecalc.ai/?pack=dotcom opens the retirement calculator with that pack selected and the visitor’s own saved inputs (a challenge link, with no one else’s numbers). Adding pack= to a full retirement share link opens that pack with the link’s inputs. An unknown id is refused. The share card is drawn in the browser. It shows ratios and rates, not dollar amounts. ## Limits The calculators replay or reshuffle one 50-year US large-cap and Treasury sample. They leave out fees, returns before 1975, and markets outside this table. ## Local MCP The repository includes a local MCP server at `mcp/server.mjs`. It calls `FirecalcSim`, `FirecalcIO`, `FirecalcPacks`, and `calculateWithdrawalTax` in-process. It speaks stdio. It does not open a network port and it does not send inputs anywhere. Tools: `retirement_success`, `years_to_target`, `run_stress_pack`, `build_firecalc_link`, `describe_methodology`. A short methodology resource and this file are exposed as MCP resources. Install notes are in `mcp/README.md` and on https://firecalc.ai/ai. Not in this server: a withdrawal that targets a success rate, a Social Security claiming sweep, and moving the page's input assembly in `app.js` onto the same adapter. Shuffled paths already use `FirecalcSim.seededRandom`. This is an illustration, not advice. There is no public compute API. ## Hosted link-only MCP (draft) `workers/firecalc-link-mcp/` is a separate Cloudflare Worker for a ChatGPT Developer Mode connector test. It is not published in the ChatGPT app directory. Tools build a firecalc.ai share URL, describe this methodology, list stress-pack ids with challenge links, and read an existing share URL. They do not run `FirecalcSim`, do not replay a stress pack, and do not return a success rate. Request bodies are not logged. The calculator on this website still runs in the browser.