Know exactly how many months of cash you have left, when you’ll hit zero, and what changes to burn rate can do to your survival timeline.
Your current runway
—
months
Enter your details below to calculate
036121824+ mo
Awaiting inputs
Cash in bank
₹—
Current balance
Monthly burn
₹—
Net cash out
Monthly revenue
₹—
Incoming cash
Zero date
—
Cash runs out
Raise by
—
6-mo buffer target
Cash & revenue
Your current financial position
₹
₹
%
₹
mo
Monthly expenses
Add each cost category (₹ Lakhs/month)
Total monthly burn₹0 L
Net burn (after revenue)₹0 L
Cash balance over time
Monthly projection based on current burn & revenue growth
Cash balance
Zero line
Enter your cash balance and monthly expenses above to see your runway analysis.
Scenario comparison
Scenario
Monthly burn
Net burn
Runway
Zero date
Runway tips for Indian founders
18 months is the minimum
Indian VC cycles are slow. Due diligence, term sheets, and legal take 3–6 months. Always raise before you hit 12 months of runway — start at 18.
Revenue is the best runway extender
Every ₹1L of new MRR adds months of runway without dilution. At ₹10L burn, ₹5L MRR doubles your effective runway at no cost.
Start fundraising at 9 months
If you have 9 months left, begin fundraising now. Build your list of 30+ investors, send warm intros, and start first meetings immediately.
Use DPIIT benefits to cut burn
DPIIT-registered startups get income tax exemption (80-IAC), patent fee rebate (80%), and access to Startup India Seed Fund. These directly extend runway.
Projections are estimates based on inputs provided. Actual runway depends on revenue variability, unexpected expenses, and market conditions. Always maintain a cash buffer for unforeseen events.
' +
'';
list.appendChild(row);
});
calc();
}
function addExpense() {
expenses.push({ name: 'New expense', amount: 0 });
renderExpenses();
}
function removeExpense(i) {
expenses.splice(i, 1);
renderExpenses();
}
// ── FORMATTING ────────────────────────────────────────────
function fmtL(l) {
if (l >= 100) return '₹' + (l / 100).toFixed(1) + ' Cr';
return '₹' + l.toFixed(1) + ' L';
}
function monthName(offset) {
var d = new Date();
d.setMonth(d.getMonth() + offset);
return d.toLocaleDateString('en-IN', { month: 'short', year: '2-digit' });
}
function fullDate(offset) {
var d = new Date();
d.setMonth(d.getMonth() + offset);
return d.toLocaleDateString('en-IN', { month: 'long', year: 'numeric' });
}
// ── MAIN CALC ─────────────────────────────────────────────
function calc() {
var cash = parseFloat(document.getElementById('inp-cash').value) || 0;
var revenue = parseFloat(document.getElementById('inp-revenue').value) || 0;
var revGrowth = parseFloat(document.getElementById('inp-rev-growth').value) || 0;
var fundraise = parseFloat(document.getElementById('inp-fundraise').value) || 0;
var fundraiseMo = parseInt(document.getElementById('inp-fundraise-month').value) || 0;
var totalBurn = expenses.reduce(function(a, b) { return a + (parseFloat(b.amount) || 0); }, 0);
var netBurn = Math.max(0, totalBurn - revenue);
document.getElementById('total-burn-display').textContent = fmtL(totalBurn);
var nbEl = document.getElementById('net-burn-display');
nbEl.textContent = fmtL(netBurn);
nbEl.style.color = netBurn <= 0 ? 'var(--green)' : 'var(--brand)';
// Stat cards
document.getElementById('s-cash').textContent = fmtL(cash);
document.getElementById('s-burn').textContent = fmtL(totalBurn);
document.getElementById('s-rev').textContent = fmtL(revenue);
if (netBurn <= 0) {
document.getElementById('runway-num').textContent = '∞';
document.getElementById('runway-date').textContent = 'Revenue covers burn — cash-flow positive!';
document.getElementById('s-zero').textContent = 'Cash+ve';
document.getElementById('s-raise').textContent = 'Cash+ve';
setStatus('great', 'Cash-flow positive');
document.getElementById('gauge-fill').style.width = '100%';
document.getElementById('gauge-fill').style.background = 'var(--green)';
renderChart([]);
renderScenarios(totalBurn, revenue, cash, revGrowth, fundraise, fundraiseMo);
renderInsight(999, totalBurn, revenue, netBurn, cash);
return;
}
// Simulate month by month
var balance = cash;
var curRevenue = revenue;
var months = 0;
var balances = [cash];
for (var m = 1; m <= 60; m++) {
curRevenue = revenue * Math.pow(1 + revGrowth / 100, m - 1);
var burn = totalBurn - curRevenue;
if (m === fundraiseMo && fundraise > 0) balance += fundraise;
balance -= Math.max(0, burn);
balances.push(Math.max(0, balance));
if (balance <= 0) { months = m; break; }
if (m === 60) months = 60;
}
// Display
var runEl = document.getElementById('runway-num');
runEl.textContent = months === 60 ? '60+' : months;
document.getElementById('runway-date').innerHTML =
'Cash runs out in ' + fullDate(months) + '';
document.getElementById('s-zero').textContent = fullDate(months);
document.getElementById('s-raise').textContent = fullDate(months - 6);
// Gauge — map 0–24 months to 0–100%
var gaugePct = Math.min(months / 24, 1) * 100;
var gaugeColor = months <= 3 ? 'var(--brand)' : months <= 6 ? 'var(--amber)' : months <= 12 ? 'var(--teal)' : 'var(--green)';
document.getElementById('gauge-fill').style.width = gaugePct + '%';
document.getElementById('gauge-fill').style.background = gaugeColor;
// Status
var cls, txt;
if (months <= 3) { cls = 'critical'; txt = 'Critical — raise now'; }
else if (months <= 6) { cls = 'warning'; txt = 'Warning — start fundraising'; }
else if (months <= 12) { cls = 'healthy'; txt = 'Healthy — plan next raise'; }
else { cls = 'great'; txt = 'Strong runway'; }
setStatus(cls, txt);
runEl.className = 'runway-months status-' + cls;
renderChart(balances);
renderScenarios(totalBurn, revenue, cash, revGrowth, fundraise, fundraiseMo);
renderInsight(months, totalBurn, revenue, netBurn, cash);
}
function setStatus(cls, txt) {
var badge = document.getElementById('status-badge');
badge.className = 'status-badge badge-' + cls;
document.getElementById('status-text').textContent = txt;
}
// ── CHART ─────────────────────────────────────────────────
function renderChart(balances) {
var svg = document.getElementById('burn-chart');
var labels = document.getElementById('month-labels');
if (!balances || balances.length < 2) {
svg.innerHTML = '';
labels.innerHTML = '';
return;
}
var W = 800, H = 150;
var maxBal = Math.max.apply(null, balances) || 1;
var pts = balances.map(function(b, i) {
return {
x: (i / (balances.length - 1)) * W,
y: H - (b / maxBal) * (H - 10) - 5
};
});
// Area path
var areaD = 'M' + pts[0].x + ',' + H;
pts.forEach(function(p) { areaD += ' L' + p.x.toFixed(1) + ',' + p.y.toFixed(1); });
areaD += ' L' + pts[pts.length - 1].x + ',' + H + ' Z';
// Line path
var lineD = pts.map(function(p, i) {
return (i === 0 ? 'M' : 'L') + p.x.toFixed(1) + ',' + p.y.toFixed(1);
}).join(' ');
// Zero line
var zeroY = H - 5;
var zeroLine = '';
// Grid lines
var gridLines = '';
[0.25, 0.5, 0.75].forEach(function(f) {
var y = H - f * (H - 10) - 5;
gridLines += '';
gridLines += '';
});
svg.innerHTML =
gridLines + zeroLine +
'' +
'' +
'' +
pts.filter(function(_, i){ return i === 0 || i === pts.length - 1; }).map(function(p, i) {
return '';
}).join('');
// Month labels
var showEvery = Math.ceil(balances.length / 8);
labels.innerHTML = '';
balances.forEach(function(_, i) {
if (i % showEvery === 0 || i === balances.length - 1) {
var span = document.createElement('span');
span.className = 'month-label';
span.textContent = i === 0 ? 'Now' : monthName(i);
span.style.position = 'absolute';
span.style.left = ((i / (balances.length - 1)) * 100) + '%';
span.style.transform = 'translateX(-50%)';
labels.style.position = 'relative';
labels.appendChild(span);
}
});
}
// ── SCENARIOS ─────────────────────────────────────────────
function calcRunwayMonths(cash, burn, revenue, revGrowth, fundraise, fundraiseMo) {
if (burn <= revenue) return 60;
var balance = cash;
var months = 0;
for (var m = 1; m <= 60; m++) {
var curRev = revenue * Math.pow(1 + revGrowth / 100, m - 1);
var net = burn - curRev;
if (m === fundraiseMo && fundraise > 0) balance += fundraise;
balance -= Math.max(0, net);
if (balance <= 0) return m;
months = m;
}
return 60;
}
function runwayPill(mo) {
var cls = mo <= 3 ? 'badge-critical' : mo <= 6 ? 'badge-warning' : mo <= 12 ? 'badge-healthy' : 'badge-great';
var txt = mo >= 60 ? '60+ mo' : mo + ' mo';
return '' + txt + '';
}
function renderScenarios(burn, revenue, cash, revGrowth, fundraise, fundraiseMo) {
var scenarios = [
{ label: 'Current (baseline)', burnMod: 1.0, highlight: true },
{ label: 'Cut burn by 20%', burnMod: 0.8 },
{ label: 'Cut burn by 40%', burnMod: 0.6 },
{ label: 'Double revenue', burnMod: 1.0, revMod: 2.0 },
{ label: 'Raise ₹50L extra', burnMod: 1.0, cashAdd: 50 },
{ label: 'Raise ₹1 Cr extra', burnMod: 1.0, cashAdd: 100 },
];
var tbody = document.getElementById('scenario-body');
tbody.innerHTML = scenarios.map(function(s) {
var b = burn * (s.burnMod || 1);
var r = revenue * (s.revMod || 1);
var c = cash + (s.cashAdd || 0);
var nb = Math.max(0, b - r);
var mo = calcRunwayMonths(c, b, r, revGrowth, fundraise, fundraiseMo);
return '
' +
'
' + s.label + '
' +
'
' + fmtL(b) + '
' +
'
' + fmtL(nb) + '
' +
'
' + runwayPill(mo) + '
' +
'
' + (mo >= 60 ? '60+ months' : fullDate(mo)) + '
' +
'
';
}).join('');
}
// ── INSIGHT ───────────────────────────────────────────────
function renderInsight(months, burn, revenue, netBurn, cash) {
var box = document.getElementById('insight-box');
if (months >= 60) {
box.innerHTML = 'You are revenue-positive. Your monthly revenue covers your burn — congratulations. Focus on reinvesting cash into growth rather than raising dilutive capital.';
return;
}
var txt = '' + months + ' months of runway at your current burn of ' + fmtL(burn) + '/month';
if (revenue > 0) txt += ' and revenue of ' + fmtL(revenue) + '/month';
txt += '. ';
if (months <= 3) txt += '🚨 You need to act immediately. Cut non-essential expenses today and reach out to investors and revenue sources simultaneously. You have very little time.';
else if (months <= 6) txt += '⚠️ Start fundraising this week. With Indian VC cycles taking 3–6 months, you need to begin investor outreach immediately. Simultaneously look at cutting burn by 20–30%.';
else if (months <= 12) txt += '📊 Healthy but not comfortable. Begin building your investor pipeline now. Aim to raise before you hit 6 months left. Use this time to hit the metrics that justify your next round.';
else txt += '💪 Strong runway. Use this time wisely — hit product-market fit, grow revenue, and build the metrics story for your next raise. Start investor relationship-building at least 6 months before you need the money.';
box.innerHTML = txt;
}
// ── HELPERS ───────────────────────────────────────────────
function escHtml(s) {
return String(s).replace(/&/g,'&').replace(//g,'>').replace(/"/g,'"');
}
// ── INIT ──────────────────────────────────────────────────
renderExpenses();