Methodology
How the calculator computes every figure it shows you, and where the numbers come from.
Tax-data files are in src/calc/data/2026/; each
carries a verifiedOn date and a source URL so the math
can be audited independently.
Federal income tax
Marginal-bracket tax is computed against the 2026 ordinary-income brackets from IRS Rev.
Proc. 2025-32, for all four filing statuses: single, married filing jointly (MFJ), married
filing separately (MFS), and head of household (HOH). Bracket cutoffs and standard
deductions live in
src/calc/data/2026/federal.json. The
taxable-income stack is: ordinary income first (wages, IRA distributions, Roth
conversions, Social Security taxable portion), then long-term capital gains on top,
consistent with the stacking rule under IRC §1(h). For a plain-language explanation of how
these brackets interact with Roth conversions, see
What is bracket filling?
Source: IRS Rev. Proc. 2025-32 (PDF)
Long-term capital gains
LTCG rates (0%, 15%, 20%) are applied to the capital-gains portion of income using the
stacking method: the taxable LTCG amount is placed on top of the ordinary-income stack and
the applicable LTCG bracket rate is determined by where that stack lands relative to the
LTCG thresholds for the filer's status. The 2026 thresholds are from Rev. Proc. 2025-32
and stored alongside the ordinary-income brackets in
federal.json.
Source: IRS Rev. Proc. 2025-32 (PDF)
Standard deduction and the 65+ add-on
The 2026 standard deduction is $16,100 (single/MFS), $32,200 (MFJ), and $24,150 (HOH).
Filers aged 65 or older receive an additional $2,050 (single) or $1,650 per qualifying
spouse (MFJ). These figures come from Rev. Proc. 2025-32 and are stored in federal.json under
standardDeduction and
additional65Plus. The calculator applies the
standard deduction unless the user provides SALT inputs large enough to exceed it after
applying the SALT cap (see SALT section below).
Source: IRS Rev. Proc. 2025-32 (PDF)
Social Security taxation
The taxable portion of Social Security benefits is determined by the IRS Pub 915
worksheet. Provisional income equals other income plus tax-exempt interest plus 50% of
gross Social Security benefits. Below the base threshold ($25,000 single; $32,000 MFJ; $0
MFS), no benefits are taxable. Between the base and the second threshold ($34,000 single;
$44,000 MFJ), up to 50% of benefits are taxable. Above the second threshold, up to 85% of
benefits are taxable under a two-tier formula. The taxable amount is always capped at 85%
of gross benefits. The implementation is in
src/calc/social-security.ts.
Source: IRS Publication 915 (PDF)
IRMAA (Medicare Part B and D surcharges)
Income-Related Monthly Adjustment Amounts (IRMAA) are Medicare premium surcharges that
step up at discrete MAGI thresholds. The 2026 IRMAA tiers are sourced from the CMS
announcement and stored in
src/calc/data/2026/irmaa.json. A critical
detail is the 2-year lookback: 2026 IRMAA is assessed on 2024 MAGI. The calculator models
this by using the projected MAGI for the lookback year when determining which IRMAA tier
applies. For single filers in 2026, the base tier (no surcharge) covers MAGI up to
$109,000; the top tier begins above $500,000. Each tier jump represents a cliff, not a
gradual phase-in, so a $1 Roth conversion above a threshold can trigger hundreds of
dollars in additional annual premiums.
Required Minimum Distributions
RMD amounts are calculated using the Uniform Lifetime Table (IRS Pub 590-B, Table III).
The applicable table divisor is looked up by age for each projection year. The Required
Beginning Date (RBD) age follows the SECURE 2.0 cohort rules: age 72 for those born before
1951, age 73 for those born 1951-1959 (current cohort), and age 75 for those born in 1960
or later (takes effect beginning in 2033). The implementation is in
src/calc/rmd.ts and
src/calc/secure2.ts. Uniform Lifetime Table
divisors are stored in
src/calc/data/uniform-lifetime.json.
Net Investment Income Tax (NIIT)
The 3.8% NIIT under IRC §1411 applies to the lesser of net investment income or the amount
by which MAGI exceeds the applicable threshold ($200,000 single/HOH; $250,000 MFJ;
$125,000 MFS). The calculator counts LTCG and taxable investment income as net investment
income; Roth conversion income is ordinary income and not subject to NIIT directly, though
it raises MAGI and can therefore expose investment income that was previously below the
threshold. The NIIT thresholds are not inflation-adjusted and are stored in
federal.json under
niit.threshold. Implementation is in
src/calc/niit.ts.
Source: IRC §1411; see also IRS Q&A on the Net Investment Income Tax
ACA Premium Tax Credit
The Premium Tax Credit (PTC) under IRC §36B applies to households enrolled in marketplace
coverage with MAGI between 100% and 400% of the federal poverty level (FPL). The enhanced
subsidies enacted by the American Rescue Plan Act (ARPA) and extended through the
Inflation Reduction Act expired after tax year 2025. For 2026, the pre-ARPA structure is
restored: eligibility ends at 400% FPL with a hard cliff. Above 400% FPL, a $1 Roth
conversion can eliminate the entire credit. The applicable percentage table for 2026 comes
from Rev. Proc. 2025-25 and interpolates linearly within each income band, matching the
Form 8962 applicable-figure methodology. FPL figures follow the IRC §36B(d)(3)(B) vintage
rule: a coverage year uses the guidelines in effect on the first day of its open
enrollment period, so 2026 coverage uses the January 2025 guidelines ($15,650 for a
one-person household; the 400% cliff sits at $62,600 single, $84,600 for a two-person
household). Both tables are stored in
src/calc/data/2026/aca-fpl.json. Implementation
is in
src/calc/aca.ts.
Sources: IRS Rev. Proc. 2025-25 (PDF) and HHS Federal Poverty Guidelines
SALT deduction
The One Big Beautiful Act (OBBBA) raises the SALT cap from $10,000 to $40,000 for tax
years 2025-2029. A phase-out applies to higher-income filers: for AGI above $500,000, the
cap is reduced by 30% of the excess over $500,000, reaching a floor of $10,000 (the
pre-OBBBA TCJA cap) at AGI of $600,000 or above. The phase-out applies equally to all
filing statuses under the enacted text. After 2029 the cap reverts to $10,000 under
current law. The $40,000 cap is stored in
federal.json under
saltCap; the phase-out logic is in
src/calc/salt.ts.
State income tax
The calculator models state income tax for all 42 jurisdictions that impose a broad-based
individual income tax, plus Washington's narrow capital gains excise tax. The seven
no-income-tax states (AK, FL, NV, SD, TN, TX, WY) return zero. New Hampshire's interest
and dividends tax was repealed effective January 1, 2026, so NH is now treated as a no-tax
state. Each state module in
src/calc/state/ cites its source DOR publication
and verification date. Washington's capital gains excise tax is handled separately in
src/calc/state/wa.ts: a 7% base rate applies to
net taxable long-term capital gains above an annually-adjusted standard deduction
($278,000 for 2025/2026 pending DOR update), with a 2.9% surtax on gains above $1,000,000
(per RCW 82.87.040). Washington's excise tax does not apply to ordinary income, wages, or
retirement distributions.
WA sources: WA DOR capital gains tax page and RCW 82.87.040
Conversion warnings
The calculator surfaces three specific warnings when inputs indicate a risk:
5-year clock under age 59.5. Roth conversions create a separate 5-year holding period for tax-free withdrawal of the converted principal. If the account owner is under 59.5, withdrawing a converted amount within 5 years of the conversion triggers a 10% early distribution penalty on that amount (not on earnings, which follow the Roth contribution 5-year rule). The calculator warns when age at conversion is under 59.5.
IRMAA cliff. When projected MAGI in the lookback year is within $10,000 of an IRMAA tier boundary, the calculator shows the dollar-per-month premium impact of crossing the tier.
ACA cliff. When projected MAGI is within 5% of the 400% FPL threshold and the household is enrolled in marketplace coverage, the calculator shows the estimated credit that would be lost at the cliff.
Annual data refresh
Federal bracket, standard deduction, IRMAA, and ACA figures are refreshed each fall when
the IRS Rev. Proc. and CMS announcements are published (typically October-November). State
data is updated when state DOR sources publish the following-year rates. The
prep-tax-year script scaffolds the new data directory
and
validate-tax-year runs structural checks to catch
common transcription errors. Every data file carries a
verifiedOn date so the age of each dataset is visible
at a glance.
Limitations and approximations
Inflation indexing assumes statutory current law. Federal brackets, standard deductions, LTCG breakpoints, IRMAA tiers, and ACA FPL multiples inflate each projection year at the user's inflation rate. NIIT thresholds (IRC §1411), the SALT cap (OBBBA), and Social Security provisional income thresholds (IRC §86) are not indexed and are held nominal. This preserves the real-world SS tax torpedo and the slow NIIT creep into middle-income retirees, but projections beyond ~10 years embed the assumption that those statutes stay frozen. If the SS thresholds are re-indexed (periodically proposed), late-year numbers will be off.
No itemized deductions other than SALT. The calculator compares the standard deduction against SALT-only itemized. Mortgage interest, charitable contributions, medical expenses above the 7.5% AGI floor, and casualty losses are not modeled. Users with significant deductions in those categories should expect actual federal taxable income to be lower than the calculator shows.
No IRA basis (pro rata) modeling. The calculator treats traditional balances as fully pretax. If your IRAs carry nondeductible basis (Form 8606), the taxable share of each conversion drops by the pro rata fraction: basis divided by the December 31 value of all traditional, SEP, and SIMPLE IRAs plus the year's conversions and distributions (IRC §408(d)(2)). The worked math is at the pro rata rule guide.
ACA benchmark plan cost is a national-average approximation. The PTC calculation interpolates a benchmark SLCSP from $4,800 at age 21 to $9,600 at age 64. Real Marketplace premiums vary substantially by rating area: rural and aging-population markets (West Virginia, parts of Florida) skew higher; competitive urban markets (Los Angeles, New York) skew lower. The estimated subsidy can be off by $1,000–$3,000 per year in either direction.
No multi-state residency. The state engine assumes a single state of residence for the entire projection. Snowbirds, mid-projection moves, and partial-year resident sourcing are not modeled.
State-specific exemptions modeled approximately. The engine supports income-conditioned retirement exclusions (AGI-gated stepwise schedules), and AL and CT use it exactly: AL's $6,000-per-person exemption for defined-contribution distributions at 65+ (Ala. Code §40-18-19, Act 2022-297) and CT's retirement deduction with the PA 23-204 phase-out (full below $75,000 single / $100,000 MFJ federal AGI, stepping down to zero at $100,000 / $150,000; Conn. Gen. Stat. §12-701(a)(20)(B)). Remaining gaps: NJ's pension exclusion is still modeled as a flat $75,000 cap rather than its income-conditioned phase-out (fully phased out above $150,000 NJ gross income); AL's unlimited defined-benefit pension exemption is not modeled (the engine cannot distinguish pension source, so DB pensioners see overstated AL tax); CT's partial SS taxation above the AGI thresholds is modeled as fully exempt; MN's income-based SS subtraction is applied conservatively, over-taxing lower-income MN retirees; MD's 2% CG surtax above $350,000 AGI and MO's full LTCG subtraction (effective 2025) are not yet wired in.
No property tax in SALT calculation. SALT is computed against state income tax only. Users in high-property-tax states (NJ, IL, NH) may have meaningfully higher itemized deductions in reality.
No LTCG harvesting integration. The math layer has a working LTCG module, but the orchestrator does not automate harvesting in years with bracket headroom. Run those scenarios manually.
No Roth conversion 5-year-clock penalty modeling. The calculator warns when a conversion is scheduled before age 54.5 but does not compute the 10% early-withdrawal penalty on withdrawals within the 5-year window. For the 60+ target audience this is rare; for users in their early 50s the warning is the right disclosure level but not a substitute for manual review.
Foreign earned income exclusion not modeled. IRC §1411 NIIT MAGI adds back the §911 exclusion; this calculator uses AGI directly. Users with substantial foreign earned income should expect NIIT figures to be slightly understated.
Tax data carries a verification date. Each
src/calc/data/<year>/*.json file carries a
verifiedOn date and a
source URL. State data was sourced May 2026; 2026
federal data from Rev. Proc. 2025-32; IRMAA from the CMS announcement; ACA FPL from HHS; ULT
divisors from Pub. 590-B Appendix B Table III. Changes published after the
verifiedOn date are not yet reflected.