Cash runway model
@ledgerly/cash-runway-model
Model cash runway from cash on hand, monthly burn by category, revenue growth, and planned hires. Produces runway months, cash-zero and raise-by dates, and an 18-month table for base, lean, and upside scenarios.
- Activity
- New: be the first to try it
- Installs
- 0 installs
- Likes
- 0 likes
- Clones
- 0 clones
- 1---
- 2name: cash-runway-model
- 3description: Build a cash runway model from cash in the bank, monthly burn by category, revenue and its growth, and planned hires, with base, lean, and upside scenarios. Gives runway in months, the month cash hits zero, a raise-by date, breakeven, and an 18-month table. Use when the user asks "how much runway do we have", "when do we need to raise", "can we afford these hires", wants a burn or cash forecast, or is planning a budget or a hiring plan.
- 4license: MIT
- 5---
- 7# Cash runway model
- 9A small, honest runway model: one JSON file of inputs, one script, three scenarios. Good enough to answer "when do we need to raise" and "what do these hires cost us in runway" in minutes, and simple enough that anyone can check it.
- 11## Inputs
- 13Collect these, then write them to `data/runway.json` in the format of `examples/runway.json`:
- 151. **`as_of`** and **`cash`**: the month of the balance and cash across all bank accounts (exclude money you cannot spend, like a deposit held as collateral).
- 162. **`revenue`**: monthly cash collected from customers now (`monthly`) and expected monthly growth (`growth_pct`). Use cash, not bookings. If they bill annually up front, use the monthly average collected over the last 6 months and say so.
- 173. **`expenses`**: monthly spend by category, with optional `growth_pct` per category. Six to eight categories is plenty. Pull them from the last 3 months of the P&L or bank export and average them (the `expense-categorizer` kit helps).
- 184. **`hires`**: role, start month, annual salary. `payroll_burden_pct` (default 20) covers taxes and benefits. Use `monthly_cost` instead for contractors.
- 195. **`one_time`**: known lumps (insurance, annual contracts, a deposit).
- 206. **`scenarios`**: start with the three in the example and adjust. Each can set `revenue_growth_pct`, `revenue_change_pct`, `expense_change_pct`, `hire_delay_months`, and `skip_hires` (list of roles).
- 217. **`min_cash_months`**: how long a raise takes (default 6). The raise-by date is cash-zero minus this.
- 23Ask for anything missing. Never invent a cash balance or a growth rate; if the user does not know growth, propose last quarter's average and get a yes.
- 25## Steps
- 271. Write `data/runway.json` and show the user the key numbers back in a short list (cash, revenue, total monthly expenses, hires) before running.
- 282. Run:
- 30 ```bash
- 31 node scripts/runway.mjs data/runway.json --out out/runway
- 32 ```
- 343. Read `out/runway.md` (scenario summary and the 18-month table per scenario). `out/runway.csv` has every category by month for a spreadsheet; `out/runway.json` has the summary.
- 354. Answer the question the user actually asked first ("You have about 14 months; start raising by July 2027"), then show the scenario table.
- 365. Offer one or two levers with their effect, by rerunning with a changed scenario: delay a hire by 3 months, cut a category by 10%, or a revenue miss of 20%. Show the change in runway months for each.
- 38## How the math works (say this if asked)
- 40- Each month: revenue grows by `growth_pct`, each expense category grows by its own rate, hires are added from their start month (salary / 12 x (1 + burden)).
- 41- Net burn = expenses - revenue. Runway = months until cash goes below zero, with the last month pro-rated. The model looks out up to 10 years to find cash-zero and breakeven, but the table shows `months` (default 18).
- 42- It is a cash model: no accruals, no debt draws, no taxes on profit. Add a known loan or raise as a negative `one_time` amount (money in) if the user wants to see it.
- 44## Output template
- 46```markdown
- 47**Runway: 14 months (base).** Cash runs out in Jan 2028. Start raising by Jul 2027.
- 48| Scenario | Runway | Cash zero | Raise by | Breakeven |
- 49...
- 50Biggest lever: <for example, delaying the AE hire by a quarter adds 0.6 months>.
- 51```
- 53## Guardrails
- 55- This is a planning model, not financial or investment advice. Say so once when you share a runway number with someone outside the team.
- 56- Keep the user's inputs file as the source of truth: change scenarios in `data/runway.json`, not by editing outputs.
- 57- If cash or burn numbers look off by 10x (monthly vs annual), stop and ask before running.
- 58- Do not share salary-level detail in summaries; report hires as total cost unless the user asks.
