Clarity for the years ahead
How Dhanwise calculates retirement
Inputs are assumptions, not promises
Spending is entered in today’s rupees. Savings are current nominal INR balances. Results are nominal INR at the time shown, not inflation-adjusted purchasing power. Ages are whole years; “plan until 90” funds the year beginning at 89, not the year beginning at 90.
The public example starts at age 35, retirement at 60 (45 for FIRE), horizon 90, 6% inflation, 10% pre-retirement return, 6% post-retirement return and 5% effective withdrawal tax. None of these is an official forecast or a recommended asset allocation. There is no actuarial life-expectancy prediction.
Returns are annual nominal assumptions net of fees and annual investment-income taxes. The exact real return is (1 + nominal return) ÷ (1 + inflation) − 1, using decimal rates. Equal nominal return and inflation means zero real return, before any separate withdrawal tax.
Official references provide policy and scheme context, not support for the example’s selected rates.
Complete public numeric input contract
All ten fields are required finite numbers. Bounds are inclusive. The defaults below are fictional browser starting values, not recommendations: the library and optional POST service apply no silent defaults. Missing fields, numeric strings, nulls, unknown fields and out-of-range values are rejected. Do not send names, accounts, documents or other personal records.
Ages and money must be whole numbers. Rate fields accept decimal percentages within their bounds; the 0.1 browser step is an input control increment, not a service requirement that rates be multiples of 0.1. Retirement age must be at least current age; plan-until age must be greater than retirement age.
On narrow screens, scroll the table horizontally; keyboard users can focus the table region and use arrow keys.
| Field and meaning | Unit | Minimum | Maximum | Browser default | Browser step | Required |
|---|---|---|---|---|---|---|
age Current age | years | 18 | 100 | 35 | 1 | Yes |
retirementAge Retirement age | years | 18 | 110 | 60 | 1 | Yes |
lifeExpectancy Plan until age | years, exclusive | 19 | 120 | 90 | 1 | Yes |
monthlyExpense Monthly household spending | INR today | 1 | 10000000 | 50000 | 1 | Yes |
currentSavings Total retirement savings | INR today; count each balance once | 0 | 10000000000 | 1000000 | 1 | Yes |
monthlySavings Total monthly saving | INR; constant, including account contributions | 0 | 10000000 | 20000 | 1 | Yes |
inflation Annual spending inflation | %; assumption, not a forecast | 0 | 15 | 6 | 0.1 | Yes |
preReturn Return before retirement | % nominal per year, net of fees and investment taxes | -20 | 30 | 10 | 0.1 | Yes |
postReturn Return after retirement | % nominal per year, net of fees and investment taxes | -20 | 20 | 6 | 0.1 | Yes |
withdrawalTaxPercent Effective withdrawal tax | % of gross withdrawals; illustrative, not a statutory rate | 0 | 60 | 5 | 0.1 | Yes |
The FIRE calculator starts retirement age at 45 instead of 60; all other starting values are the same. Public calculations use constant contributions, no pension or other retirement income, no separate accounts, no family events and no spending changes. See the API request and response contract and service privacy limits.
The public calculator’s formulas
All monetary quantities are nominal INR. Define n = retirementAge − age, m = lifeExpectancy − retirementAge, E = 12 × monthlyExpense, S = currentSavings and C = monthlySavings. Rates are decimals: i = inflation ÷ 100, p = preReturn ÷ 100, r = postReturn ÷ 100 and w = withdrawalTaxPercent ÷ 100. Thus 6% becomes 0.06. The validated inputs give n ≥ 0, m > 0, p and r > −1, and w < 1.
- Years and first-year retirement spending
- years = n; retirementExpense = E₀ = E × (1 + i)ⁿ. This is annual household spending before the separate withdrawal-tax gross-up, not a monthly amount.
- Retirement spending and gross withdrawal
- Eₜ = E₀ × (1 + i)ᵗ; Wₜ = Eₜ ÷ (1 − w), for t = 0, …, m − 1.
- Required capital at retirement
- target = requiredCorpus = Σ from t = 0 to m − 1 of Wₜ ÷ (1 + r)ᵗ.
- Equivalent backward recurrence used by the engine
- Kₘ = 0; Kₜ = max(0, Wₜ + Kₜ₊₁ ÷ (1 + r)); target = K₀. If r = i, target = m × E₀ ÷ (1 − w). If r = 0, target = Σ Wₜ; neither case divides by r − i.
- Constant saving factor
- Fₙ = 12 × Σ from k = 0 to n − 1 of (1 + p)ᵏ. For p ≠ 0, Fₙ = 12 × ((1 + p)ⁿ − 1) ÷ p. For p = 0, Fₙ = 12n. The engine accumulates this factor by recurrence rather than dividing by a near-zero return.
- Projected assets at retirement
- projected = S × (1 + p)ⁿ + C × Fₙ. For n = 0, projected = S.
- Total monthly savings target, not an additional contribution
- For n > 0, M = max(0, (target − S × (1 + p)ⁿ) ÷ Fₙ); monthlyTarget = requiredMonthlySIP = ceil(100 × M) ÷ 100. An indicative extra monthly amount is max(0, monthlyTarget − C).
- Immediate retirement special case
- For n = 0, monthlyTarget = requiredMonthlySIP = 0; there are no saving years. Use gap = max(0, target − S) for the immediate capital shortfall. Zero monthlyTarget does not mean retirement is funded.
- Funding gap and readiness
- gap = max(0, target − projected); readiness = min(100, 100 × projected ÷ target). If target = 0, readiness = 100. This is a capped percentage funding ratio, not a probability of success.
Contributions are twelve monthly amounts paid together at each year end. Retirement withdrawals occur at year start, before that year’s return. The requiredMonthlySIP name is an alias, not a monthly-compounding SIP formula. The target has zero required terminal capital, not a promised inheritance or a perpetual withdrawal rule.
Yearly projections, balance floors and depletion
yearlyProjections follows the supplied currentSavings and monthlySavings, not the calculated minimum monthlyTarget. Each row covers [age, age + 1); year is the zero-based offset from current age, not a calendar year. The last row starts at lifeExpectancy − 1. Each next openingBalance equals the preceding closingBalance.
- Accumulation row, with opening balance B
- contribution = 12C; investmentReturn = B × p; closingBalance = max(0, B × (1 + p) + 12C). expense, requiredWithdrawal, withdrawal, withdrawalTax, netSpending and shortfall are all zero: working living costs are presumed already deducted from saving.
- Retirement row t, with opening balance B
- contribution = 0; expense = Eₜ; requiredWithdrawal = Wₜ; withdrawal = min(B, Wₜ); withdrawalTax = withdrawal × w; netSpending = min(Eₜ, withdrawal × (1 − w)); shortfall = max(0, Eₜ − withdrawal × (1 − w)).
- Return after retirement spending
- P = B − withdrawal; closingBalance = P × (1 + r); investmentReturn = closingBalance − P. The withdrawal cap keeps P nonnegative. A negative permitted return reduces capital but does not create debt.
Unfunded spending is recorded as shortfall, never borrowed, carried as debt or paid by a later year. With no income or contributions in retirement, an exhausted balance remains zero. Reaching exactly zero after fully funding the last year is not an unfunded year.
The full engine marks depletion at the first year whose shortfall exceeds max(₹0.005, that year’s expense × 10⁻¹⁰). This tolerance avoids classifying floating-point dust as depletion; it does not erase the reported shortfall. Public contract v1 exposes yearly shortfalls, not a separate depletionAge field.
The engine uses JavaScript floating-point arithmetic without annual rupee rounding. Only monthlyTarget and its requiredMonthlySIP alias are rounded up to ₹0.01 by ceil(100 × M) ÷ 100. Other service numbers are not rounded for display. Public summary displays round amounts below ₹1 lakh to whole rupees and show lakh/crore amounts with up to two decimals; do not use those shortened figures to reproduce the calculation. Tiny numerical residuals can remain.
An independently checkable zero-return example
Take current age 58, retirement age 60, plan-until age 63, monthly spending ₹1,000, current savings ₹6,000 and current monthly saving ₹1,000. Set inflation, both investment returns and withdrawal tax to 0%. These are deliberately simple assumptions, not forecasts.
There are n = 2 saving years and m = 3 retirement years (ages 60, 61 and 62). Annual spending is 12 × ₹1,000 = ₹12,000. Required corpus is 3 × ₹12,000 = ₹36,000. The saving factor is 12 × 2 = 24; total monthly saving needed is (₹36,000 − ₹6,000) ÷ 24 = ₹1,250, or ₹250 more than the supplied ₹1,000.
At the supplied saving rate, projected capital is ₹6,000 + 24 × ₹1,000 = ₹30,000: gap ₹6,000 and readiness 83⅓%. Retirement closing balances are ₹18,000, ₹6,000 and ₹0, with a ₹6,000 spending shortfall at age 62. At the required ₹1,250 monthly rate, retirement starts with ₹36,000 and ends at zero after fully funding all three years.
The same inputs through the live calculation model
- Corpus needed at retirement
- ₹36,000
- Projected savings at retirement
- ₹30,000
- Total monthly saving needed
- ₹1,250
First retirement year’s spending: ₹12,000 per year. Corpus and projected savings are future nominal rupees at age 60; monthly saving is a constant amount from now until retirement.
Rounded for display. Not a guarantee, success probability or personalised financial advice. No pension income, major events, spending changes or scheme-specific access rules are included in this simplified calculation.
What changes in the full planner?
The full planner can add separately recorded accounts, retirement income, spending changes and major events. Unlisted savings and extra contributions are additional to the account records: count each amount only once. Public calculator totals have no separately added accounts.
Retirement incomes apply from their start age (inclusive) to end age (exclusive), only during retirement, and grow from their start age. After assumed income tax, they offset spending; a surplus is reinvested. Work-year event budgets are paid at year end; retirement events occur at year start with withdrawal-tax gross-up. Future income cannot pay an earlier shortfall.
The engine works backwards from zero required terminal capital: required capital now = max(0, gross withdrawal + next year’s required capital ÷ (1 + net return) − surplus income). Earlier event deadlines can increase the monthly minimum. Excess starting assets or later income can leave a terminal surplus.
Saved contributions can grow when the full planner’s take-home salary is positive; salary is only a growth switch, not additional cash flow. The public calculator and the full planner’s constant-savings explorer disable contribution growth. Ordinary working expenses are presumed already deducted from savings.
Taxes, account access and risk limitations
The full planner’s initial 25% taxable withdrawal share × 20% tax rate gives a 5% effective withdrawal tax. The public tool exposes that effective rate directly. This is not a statutory tax calculation. It does not apply tax to each account, distinguish gains from principal, calculate rebates or infer exemptions.
EPF, NPS and PPF balances are notionally pooled. That does not establish legal access, liquidity, annuity requirements or tax treatment. Withdrawal order does not change the pooled projection. NPS illustrations elsewhere in the app are not extra income automatically added to the pool.
The salary-tax comparison in the planner is separately labelled historical FY2025–26 (AY2026–27); it is not current-year tax guidance. Verify the law for your year and circumstances with a qualified professional.
No volatility, market sequence risk, mortality probability, borrowing, automatic healthcare premium escalation or guaranteed safe withdrawal rate is modelled. Readiness is a capped funding ratio, not the probability of a successful retirement. Review adverse scenarios rather than relying on one number.
A worked example for an Indian household
This fictional household is age 35, plans to retire at 60 and funds spending through age 89 (a horizon of 90). It spends ₹50,000 per month today, has ₹10 lakh saved and saves ₹20,000 per month, with no annual increase.
Assume 6% annual inflation, 10% annual net nominal returns before retirement, 6% after retirement and a 5% effective tax on gross withdrawals. These are illustrations, not forecasts. No pension or one-off family costs are included.
- Corpus needed at retirement
- ₹8.13 crore
- Projected savings at retirement
- ₹3.44 crore
- Total monthly saving needed
- ₹59,725
First retirement year’s spending: ₹25.75 lakh per year. Corpus and projected savings are future nominal rupees at age 60; monthly saving is a constant amount from now until retirement.
Rounded for display. Not a guarantee, success probability or personalised financial advice. No pension income, major events, spending changes or scheme-specific access rules are included in this simplified calculation.
These figures are generated by the same calculation engine as the tool. With inflation and post-retirement return both at 6%, each year’s discounted spending is equal: target = 30 × first-year spending ÷ 0.95. A different return, horizon or tax assumption changes the answer.