<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:media="http://search.yahoo.com/mrss/"><channel><title>Currency on LibreLeo: Financial Freedom for Globally Mobile Investors</title><link>https://libreleo.com/tags/currency/</link><description>Tools, math, and lived experience for expats building wealth across borders. Passive portfolios and active income from a Dubai-based trader.</description><generator>Hugo -- gohugo.io</generator><language>en</language><copyright>Copyright © 2026 | All rights reserved</copyright><lastBuildDate>Mon, 03 Aug 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://libreleo.com/tags/currency/index.xml" rel="self" type="application/rss+xml"/><item><title>Currency-Aware FIRE Calculator</title><link>https://libreleo.com/calculators/currency-aware-fire-calculator/</link><pubDate>Mon, 03 Aug 2026 00:00:00 +0000</pubDate><guid>https://libreleo.com/calculators/currency-aware-fire-calculator/</guid><description>A FIRE calculator for expats and global investors who earn in one currency but plan to retire in another. See your FIRE number in both currencies and how exchange-rate drift changes what you need to save.</description><content:encoded><![CDATA[<div class="lead text-neutral-500 dark:text-neutral-400 !mb-9 text-xl">
  Most FIRE calculators assume you earn, save, and retire in one currency. Expats and globally mobile investors do not. This calculator prices your financial independence number in the currency you will actually retire in, converts it into the one you save in, and shows how exchange-rate drift over the years changes what you need.
</div>

<div class="admonition relative overflow-hidden rounded-lg border-l-4 my-3 px-4 py-3 shadow-sm" data-type="tip">
      <div class="flex items-center gap-2 font-semibold text-inherit">
        <div class="flex shrink-0 h-5 w-5 items-center justify-center text-lg"><span class="relative block icon"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><path fill="currentColor" d="M112.1 454.3c0 6.297 1.816 12.44 5.284 17.69l17.14 25.69c5.25 7.875 17.17 14.28 26.64 14.28h61.67c9.438 0 21.36-6.401 26.61-14.28l17.08-25.68c2.938-4.438 5.348-12.37 5.348-17.7L272 415.1h-160L112.1 454.3zM191.4 .0132C89.44 .3257 16 82.97 16 175.1c0 44.38 16.44 84.84 43.56 115.8c16.53 18.84 42.34 58.23 52.22 91.45c.0313 .25 .0938 .5166 .125 .7823h160.2c.0313-.2656 .0938-.5166 .125-.7823c9.875-33.22 35.69-72.61 52.22-91.45C351.6 260.8 368 220.4 368 175.1C368 78.61 288.9-.2837 191.4 .0132zM192 96.01c-44.13 0-80 35.89-80 79.1C112 184.8 104.8 192 96 192S80 184.8 80 176c0-61.76 50.25-111.1 112-111.1c8.844 0 16 7.159 16 16S200.8 96.01 192 96.01z"/></svg>
</span></div>
        <div class="grow">
          Tip
        </div>
      </div><div class="admonition-content mt-3 text-base leading-relaxed text-inherit"><p>New to the 4% rule and FIRE numbers? Start with the <a href="/calculators/interactive_calculator_to_your_fire_number/" >FIRE Calculator</a> and the <a href="/calculators/interactive_safe_withdrawal_rate_calculator/" >Safe Withdrawal Rate Calculator</a>, then come back here for the cross-currency version.</p></div></div><hr>

<h2 class="relative group">Currency-Aware FIRE Calculator
    <div id="currency-aware-fire-calculator" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#currency-aware-fire-calculator" aria-label="Anchor">#</a>
    </span>
    
</h2>

<style>
  .cfire {
    --card-max-width: 640px; --card-padding: 20px; --card-bg: #efefef; --card-text: #212529;
    --input-bg: #ffffff; --input-border: #ced4da; --accent: #4CAF50; --muted: #666;
    --inner-bg: #f8f9fa; --font-stack: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;
    max-width: var(--card-max-width); margin: auto; padding: var(--card-padding);
    background-color: var(--card-bg); color: var(--card-text); border-radius: 8px; font-family: var(--font-stack);
  }
  .dark .cfire {
    --card-bg: #2d2d2d; --card-text: #ccc; --input-bg: #404040; --input-border: #555;
    --accent: #4CAF50; --muted: #999; --inner-bg: #404040;
  }
  .cfire .form-group { margin-bottom: 18px; }
  .cfire label { display:block; margin-bottom:6px; }
  .cfire input[type="number"], .cfire input[type="range"], .cfire select {
    width:100%; background-color: var(--input-bg); color: var(--card-text);
    border: 1px solid var(--input-border); padding: 10px; border-radius: 4px; box-sizing: border-box;
  }
  .cfire .cfire-currencies { display:flex; gap:14px; }
  .cfire .cfire-currencies .form-group { flex:1; }
  .cfire .section-header {
    font-size:0.85em; text-transform:uppercase; letter-spacing:0.05em; color:var(--muted);
    margin: 24px 0 10px 0; padding-bottom: 6px; border-bottom: 1px solid var(--input-border);
  }
  .cfire .result-label { display:block; margin-bottom:6px; }
  .cfire .fire-number { font-size:1.5em; font-weight:bold; color:var(--accent); padding:10px; background-color:var(--inner-bg); border-radius:4px; text-align:center; }
  .cfire .fire-number.secondary { font-size:1.2em; opacity:0.9; }
  .cfire .muted { font-size:0.85em; text-align:left; margin-top:6px; color:var(--muted); }
  .cfire table.cfire-sens { width:100%; border-collapse:collapse; margin-top:8px; font-size:0.95em; }
  .cfire table.cfire-sens th, .cfire table.cfire-sens td { padding:8px 10px; border-bottom:1px solid var(--input-border); text-align:left; }
  .cfire table.cfire-sens td.num { text-align:right; font-weight:bold; }
  .cfire .cfire-caveat { font-size:0.82em; color:var(--muted); margin-top:16px; line-height:1.5; }
  .cfire .cfire-reality { background:var(--inner-bg); border-left:3px solid var(--accent); border-radius:4px; padding:12px 14px; margin-top:10px; font-size:0.9em; line-height:1.5; }
  .cfire .cfire-usehist { margin-top:10px; background:var(--accent); color:#fff; border:none; border-radius:4px; padding:8px 12px; font-size:0.9em; cursor:pointer; width:auto; }
  .cfire .cfire-usehist:hover { opacity:0.9; }
</style>

<div class="cfire">

  <div class="section-header">Where you earn and where you'll retire</div>
  <div class="cfire-currencies">
    <div class="form-group">
      <label for="cfEarn">Currency you earn and save in</label>
      <select id="cfEarn"></select>
    </div>
    <div class="form-group">
      <label for="cfSpend">Currency you'll retire and spend in</label>
      <select id="cfSpend"></select>
    </div>
  </div>

  <div class="section-header">Your retirement (in your spend currency)</div>

  <div class="form-group">
    <label for="cfExpenses">Annual expenses in retirement, after tax (<span class="cf-spend-label">spend currency</span>)</label>
    <input type="number" id="cfExpenses" value="1200000">
  </div>

  <div class="form-group">
    <label for="cfIncome">Monthly recurring income in retirement (rentals, pension) (<span class="cf-spend-label">spend currency</span>)</label>
    <input type="number" id="cfIncome" value="0">
  </div>

  <div class="form-group">
    <label for="cfRate">Target Withdrawal Rate: <span id="cfRateValue" style="font-weight:bold;">4.0%</span></label>
    <input type="range" id="cfRate" min="0.1" max="10" step="0.1" value="4.0">
  </div>

  <div class="form-group">
    <label for="cfTax">Effective Tax Rate on Withdrawals: <span id="cfTaxValue" style="font-weight:bold;">0.0%</span></label>
    <input type="range" id="cfTax" min="0" max="60" step="0.5" value="0">
    <p class="muted">Use your blended effective rate, not your top marginal rate. Entering the marginal rate overstates the tax and inflates the target. 0% for UAE/GCC residents; often 10-20% effective elsewhere, and lower still if most of a withdrawal is return of capital.</p>
  </div>

  <div class="form-group">
    <label for="cfYears">Years Until You Retire</label>
    <input type="number" id="cfYears" value="15" min="0" max="60" step="1">
  </div>

  <div class="form-group">
    <label for="cfInflation">Expected Inflation in your spend country: <span id="cfInflationValue" style="font-weight:bold;">3.0%</span></label>
    <input type="range" id="cfInflation" min="0" max="12" step="0.1" value="3.0">
  </div>

  <div class="form-group">
    <label for="cfDrift">Expected FX drift: <span id="cfDriftValue" style="font-weight:bold;">flat</span></label>
    <input type="range" id="cfDrift" min="-6" max="6" step="0.5" value="0">
    <p class="muted">How your earn currency moves against your spend currency each year. Left = your earn currency weakens (you need more); right = it strengthens (you need less). We default to flat because no one reliably forecasts currencies. Set a weakening drift to stress-test the risk, not to lower your target.</p>
  </div>

  <div class="form-group">
    <div class="cfire-reality" id="cfRealityBox" style="display:none;">
      <div id="cfRealityText"></div>
      <button type="button" id="cfUseHistBtn" class="cfire-usehist">Use the historical average</button>
    </div>
  </div>

  <div class="section-header">What you need in your spend currency</div>

  <div class="form-group">
    <label class="result-label">FIRE number today (<span class="cf-spend-label">spend currency</span>)</label>
    <div id="cfSpendToday" class="fire-number">-</div>
    <p class="muted">Investable assets, in your retirement country's money, if you stopped working today.</p>
  </div>

  <div class="form-group">
    <label class="result-label">FIRE number at retirement, inflation-adjusted (<span class="cf-spend-label">spend currency</span>)</label>
    <div id="cfSpendFuture" class="fire-number secondary">-</div>
    <p class="muted" id="cfSpendFutureNote" style="display:none;"></p>
  </div>

  <div class="section-header">What you need in the currency you actually save</div>

  <div class="form-group">
    <label class="result-label">FIRE number at retirement (<span class="cf-earn-label">earn currency</span>, nominal)</label>
    <div id="cfEarnFuture" class="fire-number">-</div>
    <p class="muted">Future <span class="cf-earn-label">earn currency</span> units you must accumulate. This is a nominal figure, not today's money, so it will look larger than your current salary.</p>
    <p class="muted" id="cfEarnTodayLine" style="font-weight:600;"></p>
  </div>

  <div class="form-group">
    <label class="result-label">If exchange rates drift, your earn-currency target changes</label>
    <table class="cfire-sens">
      <thead><tr><th>Scenario</th><th style="text-align:right;">You need (<span class="cf-earn-label">earn</span>)</th></tr></thead>
      <tbody id="cfSensBody"></tbody>
    </table>
  </div>

  <p class="cfire-caveat" id="cfPppWarn" style="display:none; color:#b45309; font-weight:600;"></p>

  <p class="cfire-caveat">
    Note: inflation and FX drift are set independently here. Over long periods they tend to partly cancel, because a currency with higher inflation usually weakens over time. If you enter high spend-country inflation and also assume your earn currency weakens a lot, you may be counting some of the same effect twice. This is a deterministic planning estimate: it assumes steady returns, inflation, and FX, and does not model market crashes, sequence-of-returns risk, or the odds your money runs out. Treat the drift row as a range of outcomes, not a forecast.
  </p>

</div>

<script>
(function () {
  
  var FX = {"AED":1,"CHF":0.21985,"CNY":1.840644,"EUR":0.235997,"GBP":0.201949,"HKD":2.135471,"INR":25.996744,"MYR":1.112753,"PHP":16.67992,"SGD":0.349114,"USD":0.272294};

  
  
  var FXH = {"2000":{"AED":1,"CHF":0.445745,"CNY":2.253751,"EUR":0.292634,"GBP":0.18263,"HKD":2.123867,"INR":12.708781,"MYR":1.035344,"PHP":13.625596,"SGD":0.471886,"USD":0.27229407760381213},"2001":{"AED":1,"CHF":0.458162,"CNY":2.253778,"EUR":0.308972,"GBP":0.188008,"HKD":2.123322,"INR":13.129748,"MYR":1.034282,"PHP":14.038666,"SGD":0.503799,"USD":0.27229407760381213},"2002":{"AED":1,"CHF":0.377127,"CNY":2.253778,"EUR":0.259649,"GBP":0.168901,"HKD":2.123431,"INR":13.058407,"MYR":1.034881,"PHP":14.623009,"SGD":0.472539,"USD":0.27229407760381213},"2003":{"AED":1,"CHF":0.335875,"CNY":2.253778,"EUR":0.215594,"GBP":0.151951,"HKD":2.113873,"INR":12.413342,"MYR":1.035262,"PHP":15.128387,"SGD":0.462437,"USD":0.27229407760381213},"2004":{"AED":1,"CHF":0.308428,"CNY":2.253778,"EUR":0.199907,"GBP":0.140945,"HKD":2.116651,"INR":11.846426,"MYR":1.035562,"PHP":15.295031,"SGD":0.445037,"USD":0.27229407760381213},"2005":{"AED":1,"CHF":0.358938,"CNY":2.197468,"EUR":0.230816,"GBP":0.158178,"HKD":2.111368,"INR":12.259224,"MYR":1.029081,"PHP":14.476515,"SGD":0.453043,"USD":0.27229407760381213},"2006":{"AED":1,"CHF":0.332226,"CNY":2.125283,"EUR":0.206753,"GBP":0.138835,"HKD":2.117332,"INR":12.03676,"MYR":0.961198,"PHP":13.345133,"SGD":0.417672,"USD":0.27229407760381213},"2007":{"AED":1,"CHF":0.306059,"CNY":1.988863,"EUR":0.184969,"GBP":0.135649,"HKD":2.123458,"INR":10.702791,"MYR":0.900477,"PHP":11.232131,"SGD":0.39145,"USD":0.27229407760381213},"2008":{"AED":1,"CHF":0.290538,"CNY":1.857862,"EUR":0.195657,"GBP":0.186361,"HKD":2.110306,"INR":13.194554,"MYR":0.940095,"PHP":12.89966,"SGD":0.392103,"USD":0.27229407760381213},"2009":{"AED":1,"CHF":0.280408,"CNY":1.858952,"EUR":0.189016,"GBP":0.167864,"HKD":2.11145,"INR":12.671477,"MYR":0.932335,"PHP":12.570728,"SGD":0.381702,"USD":0.27229407760381213},"2010":{"AED":1,"CHF":0.25481,"CNY":1.797767,"EUR":0.203782,"GBP":0.175406,"HKD":2.116406,"INR":12.177536,"MYR":0.8345,"PHP":11.880463,"SGD":0.34919,"USD":0.27229407760381213},"2011":{"AED":1,"CHF":0.255818,"CNY":1.716978,"EUR":0.210445,"GBP":0.175785,"HKD":2.11518,"INR":14.460177,"MYR":0.863989,"PHP":11.943635,"SGD":0.353955,"USD":0.27229407760381213},"2012":{"AED":1,"CHF":0.249138,"CNY":1.696555,"EUR":0.206377,"GBP":0.168425,"HKD":2.110415,"INR":14.974813,"MYR":0.832675,"PHP":11.166508,"SGD":0.332498,"USD":0.27229407760381213},"2013":{"AED":1,"CHF":0.242383,"CNY":1.648468,"EUR":0.197443,"GBP":0.164607,"HKD":2.111314,"INR":16.85582,"MYR":0.892852,"PHP":12.101021,"SGD":0.343826,"USD":0.27229407760381213},"2014":{"AED":1,"CHF":0.269669,"CNY":1.690102,"EUR":0.224278,"GBP":0.17469,"HKD":2.112022,"INR":17.206263,"MYR":0.952566,"PHP":12.20885,"SGD":0.360136,"USD":0.27229407760381213},"2015":{"AED":1,"CHF":0.270993,"CNY":1.765963,"EUR":0.25011,"GBP":0.183567,"HKD":2.110334,"INR":18.013342,"MYR":1.174486,"PHP":12.755344,"SGD":0.385596,"USD":0.27229407760381213},"2016":{"AED":1,"CHF":0.277413,"CNY":1.890946,"EUR":0.25832,"GBP":0.221168,"HKD":2.111777,"INR":18.494214,"MYR":1.221511,"PHP":13.501702,"SGD":0.393519,"USD":0.27229407760381213},"2017":{"AED":1,"CHF":0.265688,"CNY":1.771954,"EUR":0.227044,"GBP":0.20144,"HKD":2.127869,"INR":17.393057,"MYR":1.101974,"PHP":13.576038,"SGD":0.363812,"USD":0.27229407760381213},"2018":{"AED":1,"CHF":0.267989,"CNY":1.872784,"EUR":0.237811,"GBP":0.21273,"HKD":2.13258,"INR":18.960654,"MYR":1.125255,"PHP":14.295439,"SGD":0.370783,"USD":0.27229407760381213},"2019":{"AED":1,"CHF":0.263082,"CNY":1.895575,"EUR":0.242383,"GBP":0.206219,"HKD":2.120218,"INR":19.436896,"MYR":1.113819,"PHP":13.791695,"SGD":0.366263,"USD":0.27229407760381213},"2020":{"AED":1,"CHF":0.239698,"CNY":1.780204,"EUR":0.221901,"GBP":0.199496,"HKD":2.111205,"INR":19.895711,"MYR":1.094867,"PHP":13.119946,"SGD":0.359891,"USD":0.27229407760381213},"2021":{"AED":1,"CHF":0.248373,"CNY":1.729721,"EUR":0.240414,"GBP":0.202015,"HKD":2.123649,"INR":20.250238,"MYR":1.134377,"PHP":13.886998,"SGD":0.367325,"USD":0.27229407760381213},"2022":{"AED":1,"CHF":0.251385,"CNY":1.878475,"EUR":0.255292,"GBP":0.226426,"HKD":2.123077,"INR":22.507828,"MYR":1.199455,"PHP":15.143907,"SGD":0.365065,"USD":0.27229407760381213},"2023":{"AED":1,"CHF":0.228185,"CNY":1.934622,"EUR":0.246421,"GBP":0.214151,"HKD":2.126943,"INR":22.646698,"MYR":1.251191,"PHP":15.10143,"SGD":0.359564,"USD":0.27229407760381213},"2024":{"AED":1,"CHF":0.246688,"CNY":1.987583,"EUR":0.262099,"GBP":0.217326,"HKD":2.114772,"INR":23.308373,"MYR":1.217563,"PHP":15.804765,"SGD":0.371246,"USD":0.27229407760381213},"2025":{"AED":1,"CHF":0.215842,"CNY":1.906331,"EUR":0.231739,"GBP":0.202216,"HKD":2.119592,"INR":24.471069,"MYR":1.104969,"PHP":16.051736,"SGD":0.350034,"USD":0.27229407760381213},"2026":{"AED":1,"CHF":0.220585,"CNY":1.838339,"EUR":0.237086,"GBP":0.202881,"HKD":2.135657,"INR":25.974132,"MYR":1.11273,"PHP":16.683186,"SGD":0.349871,"USD":0.27229407760381213}};

  
  
  
  
  function histDrift(earn, spend) {
    if (!FXH || earn === spend) return null;
    var xs = [], ys = [];
    for (var yr in FXH) {
      if (!FXH.hasOwnProperty(yr)) continue;
      var row = FXH[yr], re = row[earn], rs = row[spend];
      if (typeof re === "number" && typeof rs === "number" && re > 0 && rs > 0) {
        xs.push(parseInt(yr, 10));
        ys.push(Math.log(re / rs)); 
      }
    }
    if (xs.length < 3) return null;
    var n = xs.length, sx = 0, sy = 0, sxx = 0, sxy = 0;
    for (var i = 0; i < n; i++) { sx += xs[i]; sy += ys[i]; sxx += xs[i] * xs[i]; sxy += xs[i] * ys[i]; }
    var denom = n * sxx - sx * sx;
    if (denom === 0) return null;
    var b = (n * sxy - sx * sy) / denom;   
    var g = Math.exp(-b) - 1;              
    if (!isFinite(g)) return null;
    var firstYear = Math.min.apply(null, xs), lastYear = Math.max.apply(null, xs);
    return { g: g * 100, firstYear: firstYear, lastYear: lastYear, years: lastYear - firstYear, points: n };
  }

  var CURRENCIES = [
    ["USD", "US Dollar (USD $)", "$"],
    ["EUR", "Euro (EUR €)", "€"],
    ["GBP", "British Pound (GBP £)", "£"],
    ["CHF", "Swiss Franc (CHF)", "CHF "],
    ["AED", "UAE Dirham (AED)", "AED "],
    ["SGD", "Singapore Dollar (SGD S$)", "S$"],
    ["HKD", "Hong Kong Dollar (HKD)", "HK$"],
    ["CNY", "Chinese Yuan (CNY)", "CN¥"],
    ["PHP", "Philippine Peso (PHP ₱)", "₱"],
    ["MYR", "Malaysian Ringgit (MYR)", "RM "],
    ["INR", "Indian Rupee (INR ₹)", "₹"]
  ];
  var SYMBOLS = {};
  for (var i = 0; i < CURRENCIES.length; i++) SYMBOLS[CURRENCIES[i][0]] = CURRENCIES[i][2];

  function symbolFor(code) { return SYMBOLS[code] || (code + " "); }
  function rateFor(code) {
    var r = FX && FX[code];
    return (typeof r === "number" && isFinite(r) && r > 0) ? r : null;
  }

  
  function computeCurrencyFire(inp) {
    var netSpend = Math.max((inp.annualExpenses || 0) - (inp.monthlyIncome || 0) * 12, 0);
    var wr = (inp.withdrawalRate || 0) / 100;
    if (netSpend <= 0 || wr <= 0) {
      return { alreadyFI: netSpend <= 0, spendFireToday: 0, spendFireAtRetirement: 0,
               earnFireToday: 0, earnFireAtRetirement: 0, sensitivity: [] };
    }
    var tax = Math.min(inp.taxRate || 0, 99) / 100;
    var years = Math.max(inp.years || 0, 0);
    var infl = Math.max(inp.inflation || 0, 0) / 100;

    var grossSpend = netSpend / (1 - tax);
    var spendFireToday = grossSpend / wr;
    var spendFireAtRetirement = spendFireToday * Math.pow(1 + infl, years);

    
    var re = rateFor(inp.earn), rs = rateFor(inp.spend);
    var rateMissing = false, ratio;
    if (re && rs) { ratio = re / rs; }
    else if (inp.earn === inp.spend) { ratio = 1; }
    else { ratio = 1; rateMissing = true; }   

    
    
    var g = Math.max((inp.drift || 0) / 100, -0.99);
    var earnFireToday = spendFireToday * ratio;
    var earnFireAtRetirement = spendFireAtRetirement * ratio / Math.pow(1 + g, years);

    
    
    var scenarios = [
      { label: "3%/yr worse for you (earn weaker)", g: Math.max(g - 0.03, -0.99) },
      { label: "Your assumption: " + driftLabel(g * 100), g: g },
      { label: "3%/yr better for you (earn stronger)", g: g + 0.03 }
    ];
    var sensitivity = [];
    for (var k = 0; k < scenarios.length; k++) {
      sensitivity.push({
        label: scenarios[k].label,
        earnFireAtRetirement: fin(spendFireAtRetirement * ratio / Math.pow(1 + scenarios[k].g, years))
      });
    }
    return { alreadyFI: false, rateMissing: rateMissing,
             spendFireToday: fin(spendFireToday), spendFireAtRetirement: fin(spendFireAtRetirement),
             earnFireToday: fin(earnFireToday), earnFireAtRetirement: fin(earnFireAtRetirement), sensitivity: sensitivity };
  }

  function fin(v) { return isFinite(v) ? v : 0; }
  function money(sym, v) { return sym + Math.round(fin(v)).toLocaleString(); }
  function el(id) { return document.getElementById(id); }
  
  function num(id) { return parseFloat(String(el(id).value).replace(/[^0-9eE.+-]/g, "")) || 0; }

  function render() {
    var earn = el("cfEarn").value, spend = el("cfSpend").value;
    var earnSym = symbolFor(earn), spendSym = symbolFor(spend);

    
    var sl = document.querySelectorAll(".cf-spend-label");
    for (var a = 0; a < sl.length; a++) sl[a].textContent = spend;
    var el2 = document.querySelectorAll(".cf-earn-label");
    for (var b = 0; b < el2.length; b++) el2[b].textContent = earn;

    
    renderReality(earn, spend);

    var out = computeCurrencyFire({
      earn: earn, spend: spend,
      annualExpenses: num("cfExpenses"), monthlyIncome: num("cfIncome"),
      withdrawalRate: num("cfRate"), taxRate: num("cfTax"),
      years: num("cfYears"), inflation: num("cfInflation"), drift: num("cfDrift")
    });

    if (out.alreadyFI) {
      el("cfSpendToday").textContent = money(spendSym, 0) + " (already covered)";
      el("cfSpendFuture").textContent = money(spendSym, 0);
      el("cfEarnFuture").textContent = money(earnSym, 0);
      el("cfEarnTodayLine").textContent = "";
      el("cfSensBody").innerHTML = "";
      el("cfSpendFutureNote").style.display = "none";
      el("cfPppWarn").style.display = "none";
      return;
    }

    
    if (out.rateMissing) {
      el("cfSpendToday").textContent = money(spendSym, out.spendFireToday);
      el("cfSpendFuture").textContent = money(spendSym, out.spendFireAtRetirement);
      el("cfEarnFuture").textContent = "rate unavailable";
      el("cfEarnTodayLine").textContent = "We do not have an exchange rate for " + earn + " right now, so the earn-currency figures are unavailable.";
      el("cfSensBody").innerHTML = "";
      el("cfSpendFutureNote").style.display = "none";
      el("cfPppWarn").style.display = "none";
      return;
    }

    el("cfSpendToday").textContent = money(spendSym, out.spendFireToday);
    el("cfSpendFuture").textContent = money(spendSym, out.spendFireAtRetirement);
    el("cfEarnFuture").textContent = money(earnSym, out.earnFireAtRetirement);
    el("cfEarnTodayLine").textContent = "In today's money, that is about " + money(earnSym, out.earnFireToday) + ". The gap up to the number above is inflation and FX drift, not extra wealth.";

    
    
    var inflV = num("cfInflation"), driftV = num("cfDrift");
    var ppp = el("cfPppWarn");
    if (inflV > 0 && driftV < 0) {
      ppp.textContent = "Heads up: you are assuming " + inflV.toFixed(1) + "%/yr inflation in " + spend + " AND that " + earn + " weakens " + Math.abs(driftV).toFixed(1) + "%/yr against it. A higher-inflation currency usually weakens on its own, so setting both can double-count the same effect and overstate your target. If unsure, leave FX drift flat.";
      ppp.style.display = "";
    } else {
      ppp.style.display = "none";
    }

    
    
    
    var note = el("cfSpendFutureNote");
    if (num("cfYears") <= 0) {
      note.textContent = "You entered 0 years to retirement, so this equals today's number. Add years above to see inflation and FX drift compound.";
      note.style.display = "";
    } else {
      note.style.display = "none";
    }

    var rows = "";
    for (var s = 0; s < out.sensitivity.length; s++) {
      rows += "<tr><td>" + out.sensitivity[s].label + "</td><td class='num'>" +
              money(earnSym, out.sensitivity[s].earnFireAtRetirement) + "</td></tr>";
    }
    el("cfSensBody").innerHTML = rows;
  }

  function driftLabel(v) {
    var x = Math.abs(v).toFixed(1);
    if (v < 0) return "earn weakens " + x + "%/yr";
    if (v > 0) return "earn strengthens " + x + "%/yr";
    return "flat";
  }

  
  
  function renderReality(earn, spend) {
    var box = el("cfRealityBox"), txt = el("cfRealityText"), btn = el("cfUseHistBtn");
    if (!box) return;
    var h = histDrift(earn, spend);
    if (!h) {
      box.style.display = "";
      btn.style.display = "none";
      txt.textContent = (earn === spend)
        ? "You earn and retire in the same currency, so there is no exchange-rate drift to check."
        : "We do not have enough exchange-rate history for this pair to show a reality check.";
      return;
    }
    box.style.display = "";
    btn.style.display = "";
    var head, meaning;
    if (h.g > 0.15) {
      head = "Reality check: over " + h.firstYear + "-" + h.lastYear + " (" + h.years + " years) " + earn + " actually strengthened about " + h.g.toFixed(1) + "%/yr against " + spend + ". ";
      meaning = "A stronger " + earn + " buys more " + spend + " each year, so a " + earn + " saver retiring in " + spend + " needed fewer " + earn + " over time.";
    } else if (h.g < -0.15) {
      head = "Reality check: over " + h.firstYear + "-" + h.lastYear + " (" + h.years + " years) " + earn + " actually weakened about " + Math.abs(h.g).toFixed(1) + "%/yr against " + spend + ". ";
      meaning = "A weaker " + earn + " buys less " + spend + " each year, so a " + earn + " saver retiring in " + spend + " needed more " + earn + " over time.";
    } else {
      head = "Reality check: over " + h.firstYear + "-" + h.lastYear + " (" + h.years + " years) " + earn + " stayed roughly flat against " + spend + ". ";
      meaning = "The pair barely moved, so exchange rates made little difference to the " + earn + " a saver needed.";
    }
    var driftV = num("cfDrift"), tol = 0.75, verdict;
    if (driftV > h.g + tol) verdict = " Your slider assumes " + earn + " does better than history did, which lowers your target. Treat that as optimistic.";
    else if (driftV < h.g - tol) verdict = " Your slider assumes less help than history gave, which raises your target. That is a safe, conservative bias.";
    else verdict = " Your current slider setting is in line with what history did.";
    txt.textContent = head + meaning + verdict;
    btn.textContent = "Use the historical average (" + driftLabel(h.g) + ")";
  }

  
  function applyHistDrift() {
    var earn = el("cfEarn").value, spend = el("cfSpend").value;
    var h = histDrift(earn, spend);
    if (!h) return;
    var v = Math.max(-6, Math.min(6, Math.round(h.g * 2) / 2));
    el("cfDrift").value = String(v);
    el("cfDriftValue").textContent = driftLabel(v);
    render();
  }

  document.addEventListener("DOMContentLoaded", function () {
    var earnSel = el("cfEarn"), spendSel = el("cfSpend");
    for (var i = 0; i < CURRENCIES.length; i++) {
      var o1 = document.createElement("option"); o1.value = CURRENCIES[i][0]; o1.textContent = CURRENCIES[i][1]; earnSel.appendChild(o1);
      var o2 = document.createElement("option"); o2.value = CURRENCIES[i][0]; o2.textContent = CURRENCIES[i][1]; spendSel.appendChild(o2);
    }
    earnSel.value = "USD";   
    spendSel.value = "PHP";  

    earnSel.addEventListener("change", render);
    spendSel.addEventListener("change", render);

    el("cfRate").addEventListener("input", function () { el("cfRateValue").textContent = parseFloat(this.value).toFixed(1) + "%"; render(); });
    el("cfTax").addEventListener("input", function () { el("cfTaxValue").textContent = parseFloat(this.value).toFixed(1) + "%"; render(); });
    el("cfInflation").addEventListener("input", function () { el("cfInflationValue").textContent = parseFloat(this.value).toFixed(1) + "%"; render(); });
    el("cfDrift").addEventListener("input", function () { el("cfDriftValue").textContent = driftLabel(parseFloat(this.value)); render(); });
    el("cfUseHistBtn").addEventListener("click", applyHistDrift);
    el("cfExpenses").addEventListener("input", render);
    el("cfIncome").addEventListener("input", render);
    el("cfYears").addEventListener("input", render);

    el("cfRateValue").textContent = parseFloat(el("cfRate").value).toFixed(1) + "%";
    el("cfTaxValue").textContent = parseFloat(el("cfTax").value).toFixed(1) + "%";
    el("cfInflationValue").textContent = parseFloat(el("cfInflation").value).toFixed(1) + "%";
    el("cfDriftValue").textContent = driftLabel(parseFloat(el("cfDrift").value));
    render();
  });
})();
</script>

<p class="calc-methodology-link" style="font-size:0.85rem;margin-top:1.25rem;text-align:right;opacity:0.85;"><a href="/data-sources/#currency-fire-calculator">How this is calculated &rarr;</a></p>

<hr>

<h2 class="relative group">Why a Normal FIRE Calculator Is Not Enough for Expats
    <div id="why-a-normal-fire-calculator-is-not-enough-for-expats" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#why-a-normal-fire-calculator-is-not-enough-for-expats" aria-label="Anchor">#</a>
    </span>
    
</h2>
<p>A FIRE number is a spending number. The standard rule is that you need about 25 times your annual expenses invested, so a 4% withdrawal covers your life. That works cleanly when you earn and spend in the same money.</p>
<p>The moment you earn in one currency and plan to retire in another, two things a normal calculator ignores start to matter:</p>
<ol>
<li><strong>Your expenses are in the retirement country's currency.</strong> If you will live in the Philippines, your grocery bills, rent, and healthcare are in pesos, not dollars. The honest FIRE number is priced in pesos first.</li>
<li><strong>The exchange rate will move before you get there.</strong> You are saving in one currency today and will convert it into another over a working life. That drift is a real risk, and it only points one way that hurts you.</li>
</ol>

<h2 class="relative group">A Worked Example
    <div id="a-worked-example" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#a-worked-example" aria-label="Anchor">#</a>
    </span>
    
</h2>
<p>Say you earn and save in US dollars and plan to retire in the Philippines. You expect to spend about 1,200,000 pesos a year, you use the 4% rule, and you are 15 years out. Inflation in the Philippines runs around 3%.</p>
<ul>
<li>In pesos, your FIRE number today is about 30,000,000 (1,200,000 divided by 4%).</li>
<li>Grown for 15 years of 3% inflation, that is roughly 46,700,000 pesos by your retirement date.</li>
<li>At today's exchange rate that is about 758,000 US dollars.</li>
</ul>
<p>Now the currency part. If the dollar <strong>weakens</strong> by 2% a year against the peso, each dollar you saved buys fewer pesos, so you need more dollars: closer to 1,030,000. If instead the dollar <strong>strengthens</strong>, you need less. A weakening earn currency is the risk, because it means your savings shrink in the money you will actually spend. That single assumption can move your target by hundreds of thousands, which is exactly why it deserves its own slider.</p>

<h2 class="relative group">How to Read Your Results
    <div id="how-to-read-your-results" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#how-to-read-your-results" aria-label="Anchor">#</a>
    </span>
    
</h2>
<table>
	<thead>
			<tr>
					<th>Result</th>
					<th>What it means</th>
			</tr>
	</thead>
	<tbody>
			<tr>
					<td><strong>FIRE number today (spend currency)</strong></td>
					<td>What you would need right now, priced where you will live</td>
			</tr>
			<tr>
					<td><strong>FIRE number at retirement (spend currency)</strong></td>
					<td>The same target grown for inflation in your retirement country</td>
			</tr>
			<tr>
					<td><strong>FIRE number at retirement (earn currency)</strong></td>
					<td>The nominal amount to accumulate in the money you save, at your retirement date</td>
			</tr>
			<tr>
					<td><strong>Drift scenarios</strong></td>
					<td>How that earn-currency target changes if your currency weakens, stays flat, or strengthens</td>
			</tr>
	</tbody>
</table>
<div class="admonition relative overflow-hidden rounded-lg border-l-4 my-3 px-4 py-3 shadow-sm" data-type="note">
      <div class="flex items-center gap-2 font-semibold text-inherit">
        <div class="flex shrink-0 h-5 w-5 items-center justify-center text-lg"><span class="relative block icon"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path fill="currentColor" d="M256 0C114.6 0 0 114.6 0 256s114.6 256 256 256s256-114.6 256-256S397.4 0 256 0zM256 128c17.67 0 32 14.33 32 32c0 17.67-14.33 32-32 32S224 177.7 224 160C224 142.3 238.3 128 256 128zM296 384h-80C202.8 384 192 373.3 192 360s10.75-24 24-24h16v-64H224c-13.25 0-24-10.75-24-24S210.8 224 224 224h32c13.25 0 24 10.75 24 24v88h16c13.25 0 24 10.75 24 24S309.3 384 296 384z"/></svg>
</span></div>
        <div class="grow">
          Note
        </div>
      </div><div class="admonition-content mt-3 text-base leading-relaxed text-inherit"><p>This is an estimate for planning, not advice. It assumes a constant withdrawal rate, steady inflation, and a steady FX drift. Real currencies move in jumps, not straight lines, so treat the drift row as a range of outcomes, not a prediction.</p></div></div><hr>

<h2 class="relative group">Related Calculators
    <div id="related-calculators" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#related-calculators" aria-label="Anchor">#</a>
    </span>
    
</h2>

  
  
  
  



<div
  
    class="flex px-4 py-3 rounded-md shadow bg-primary-100 dark:bg-primary-900"
  
  >
  <span
    
      class="text-primary-400 pe-3 flex items-center"
    
    >
    <span class="relative block icon"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><path fill="currentColor" d="M172.5 131.1C228.1 75.51 320.5 75.51 376.1 131.1C426.1 181.1 433.5 260.8 392.4 318.3L391.3 319.9C381 334.2 361 337.6 346.7 327.3C332.3 317 328.9 297 339.2 282.7L340.3 281.1C363.2 249 359.6 205.1 331.7 177.2C300.3 145.8 249.2 145.8 217.7 177.2L105.5 289.5C73.99 320.1 73.99 372 105.5 403.5C133.3 431.4 177.3 435 209.3 412.1L210.9 410.1C225.3 400.7 245.3 404 255.5 418.4C265.8 432.8 262.5 452.8 248.1 463.1L246.5 464.2C188.1 505.3 110.2 498.7 60.21 448.8C3.741 392.3 3.741 300.7 60.21 244.3L172.5 131.1zM467.5 380C411 436.5 319.5 436.5 263 380C213 330 206.5 251.2 247.6 193.7L248.7 192.1C258.1 177.8 278.1 174.4 293.3 184.7C307.7 194.1 311.1 214.1 300.8 229.3L299.7 230.9C276.8 262.1 280.4 306.9 308.3 334.8C339.7 366.2 390.8 366.2 422.3 334.8L534.5 222.5C566 191 566 139.1 534.5 108.5C506.7 80.63 462.7 76.99 430.7 99.9L429.1 101C414.7 111.3 394.7 107.1 384.5 93.58C374.2 79.2 377.5 59.21 391.9 48.94L393.5 47.82C451 6.731 529.8 13.25 579.8 63.24C636.3 119.7 636.3 211.3 579.8 267.7L467.5 380z"/></svg>
</span>
  </span>

  <span
    
      class="dark:text-neutral-300"
    
    ><p><strong>More tools for globally mobile investors:</strong></p>
<ul>
<li><strong><a href="/calculators/interactive_calculator_to_your_fire_number/" >FIRE Calculator</a></strong> - the single-currency starting point</li>
<li><strong><a href="/calculators/interactive_safe_withdrawal_rate_calculator/" >Safe Withdrawal Rate Calculator</a></strong> - stress-test your withdrawal rate against history</li>
<li><strong><a href="/calculators/how-to-use-savings-rate-calculator/" >Savings Rate Calculator</a></strong> - the biggest lever on how fast you get there</li>
</ul>
<p><strong>Go deeper:</strong> <a href="/posts/4-percent-rule-currency-risk/" >The 4% Rule Doesn't Speak Your Currency</a> - why retiring into a currency you never earned in adds a second layer of sequence-of-returns risk.</p>
</span>
</div>

<hr>



<section class="faq-section my-10">
  <h2 id="faq">Frequently Asked Questions</h2>
  
  <details class="faq-item my-3 rounded-lg border border-neutral-200 px-4 py-3 dark:border-neutral-700">
    <summary class="cursor-pointer text-lg font-semibold">What is a currency-aware FIRE calculator?</summary>
    <div class="faq-answer prose mt-3 max-w-none dark:prose-invert">

It is a financial independence calculator for people who earn and save in one currency but plan to retire and spend in another. It shows your FIRE number in your spend currency, converts it into the currency you actually save, and shows how exchange-rate movement over time changes what you need.
    </div>
  </details>
  
  <details class="faq-item my-3 rounded-lg border border-neutral-200 px-4 py-3 dark:border-neutral-700">
    <summary class="cursor-pointer text-lg font-semibold">Why does the currency I retire in matter?</summary>
    <div class="faq-answer prose mt-3 max-w-none dark:prose-invert">

Your FIRE number is really a spending number: 25 times your annual expenses in the place you will actually live. If you retire somewhere cheaper or more expensive than where you earn, the target changes. Pricing it in your retirement country's currency is the honest version of the number.
    </div>
  </details>
  
  <details class="faq-item my-3 rounded-lg border border-neutral-200 px-4 py-3 dark:border-neutral-700">
    <summary class="cursor-pointer text-lg font-semibold">What is exchange-rate drift and why should I care?</summary>
    <div class="faq-answer prose mt-3 max-w-none dark:prose-invert">

Drift is how your earn currency moves against your spend currency each year. If the currency you save in weakens against the one you will spend in, each unit buys fewer of the spend currency, so you need to accumulate more. Over 15 to 30 years even a small yearly drift compounds into a large difference.
    </div>
  </details>
  
  <details class="faq-item my-3 rounded-lg border border-neutral-200 px-4 py-3 dark:border-neutral-700">
    <summary class="cursor-pointer text-lg font-semibold">Which way is bad for me: my earn currency weakening or strengthening?</summary>
    <div class="faq-answer prose mt-3 max-w-none dark:prose-invert">

Weakening is the risk. If the currency you save in loses value against your retirement currency, your savings buy less abroad, so your target in earn-currency terms goes up. A strengthening earn currency works in your favour and lowers the target.
    </div>
  </details>
  
  <details class="faq-item my-3 rounded-lg border border-neutral-200 px-4 py-3 dark:border-neutral-700">
    <summary class="cursor-pointer text-lg font-semibold">Why is the earn-currency number bigger than my salary?</summary>
    <div class="faq-answer prose mt-3 max-w-none dark:prose-invert">

That figure is nominal and set at your retirement date, not today's money. It already includes years of inflation in your spend country and the exchange rate at retirement, so it will always look larger than what you earn now. Compare it to your projected future savings, not your current pay.
    </div>
  </details>
  
  <details class="faq-item my-3 rounded-lg border border-neutral-200 px-4 py-3 dark:border-neutral-700">
    <summary class="cursor-pointer text-lg font-semibold">Should I set both inflation and FX drift to large values?</summary>
    <div class="faq-answer prose mt-3 max-w-none dark:prose-invert">

Be careful not to double-count. Inflation and FX drift are set independently here, but over long periods they tend to partly cancel: a higher-inflation currency usually weakens over time. If you assume high spend-country inflation and also assume your earn currency weakens sharply, you may be counting some of the same effect twice.
    </div>
  </details>
  
  <details class="faq-item my-3 rounded-lg border border-neutral-200 px-4 py-3 dark:border-neutral-700">
    <summary class="cursor-pointer text-lg font-semibold">Where do the exchange rates come from?</summary>
    <div class="faq-answer prose mt-3 max-w-none dark:prose-invert">

Rates are refreshed at publish time from a free public source and stored with the site, so the calculator works offline with no tracking and no account. They are a snapshot for planning, not a live trading feed.
    </div>
  </details>
  
</section>
<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "FAQPage",
  "mainEntity": [
    {
      "@type": "Question",
      "name": "\"What is a currency-aware FIRE calculator?\"",
      "acceptedAnswer": { "@type": "Answer", "text": "\"It is a financial independence calculator for people who earn and save in one currency but plan to retire and spend in another. It shows your FIRE number in your spend currency, converts it into the currency you actually save, and shows how exchange-rate movement over time changes what you need.\"" }
    },
    {
      "@type": "Question",
      "name": "\"Why does the currency I retire in matter?\"",
      "acceptedAnswer": { "@type": "Answer", "text": "\"Your FIRE number is really a spending number: 25 times your annual expenses in the place you will actually live. If you retire somewhere cheaper or more expensive than where you earn, the target changes. Pricing it in your retirement country's currency is the honest version of the number.\"" }
    },
    {
      "@type": "Question",
      "name": "\"What is exchange-rate drift and why should I care?\"",
      "acceptedAnswer": { "@type": "Answer", "text": "\"Drift is how your earn currency moves against your spend currency each year. If the currency you save in weakens against the one you will spend in, each unit buys fewer of the spend currency, so you need to accumulate more. Over 15 to 30 years even a small yearly drift compounds into a large difference.\"" }
    },
    {
      "@type": "Question",
      "name": "\"Which way is bad for me: my earn currency weakening or strengthening?\"",
      "acceptedAnswer": { "@type": "Answer", "text": "\"Weakening is the risk. If the currency you save in loses value against your retirement currency, your savings buy less abroad, so your target in earn-currency terms goes up. A strengthening earn currency works in your favour and lowers the target.\"" }
    },
    {
      "@type": "Question",
      "name": "\"Why is the earn-currency number bigger than my salary?\"",
      "acceptedAnswer": { "@type": "Answer", "text": "\"That figure is nominal and set at your retirement date, not today's money. It already includes years of inflation in your spend country and the exchange rate at retirement, so it will always look larger than what you earn now. Compare it to your projected future savings, not your current pay.\"" }
    },
    {
      "@type": "Question",
      "name": "\"Should I set both inflation and FX drift to large values?\"",
      "acceptedAnswer": { "@type": "Answer", "text": "\"Be careful not to double-count. Inflation and FX drift are set independently here, but over long periods they tend to partly cancel: a higher-inflation currency usually weakens over time. If you assume high spend-country inflation and also assume your earn currency weakens sharply, you may be counting some of the same effect twice.\"" }
    },
    {
      "@type": "Question",
      "name": "\"Where do the exchange rates come from?\"",
      "acceptedAnswer": { "@type": "Answer", "text": "\"Rates are refreshed at publish time from a free public source and stored with the site, so the calculator works offline with no tracking and no account. They are a snapshot for planning, not a live trading feed.\"" }
    }
  ]
}
</script>



  
  
  
  



<div
  
    class="flex px-4 py-3 rounded-md shadow bg-primary-100 dark:bg-primary-900"
  
  >
  <span
    
      class="text-primary-400 pe-3 flex items-center"
    
    >
    <span class="relative block icon"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path fill="currentColor" d="M256 0C114.6 0 0 114.6 0 256s114.6 256 256 256s256-114.6 256-256S397.4 0 256 0zM256 128c17.67 0 32 14.33 32 32c0 17.67-14.33 32-32 32S224 177.7 224 160C224 142.3 238.3 128 256 128zM296 384h-80C202.8 384 192 373.3 192 360s10.75-24 24-24h16v-64H224c-13.25 0-24-10.75-24-24S210.8 224 224 224h32c13.25 0 24 10.75 24 24v88h16c13.25 0 24 10.75 24 24S309.3 384 296 384z"/></svg>
</span>
  </span>

  <span
    
      class="dark:text-neutral-300"
    
    ><strong>Disclaimer:</strong> This calculator reflects my personal views and is for educational purposes only. It is not financial advice. Every situation is different. Always check your country's specific tax and investment rules before acting. See the full <a href="/disclaimer/" >Disclaimer</a> and <a href="/privacy/" >Privacy Policy</a> for the long version.</span>
</div>

]]></content:encoded><media:content url="https://libreleo.com/img/featured/currency-aware-fire-calculator.webp" medium="image"/></item></channel></rss>