CFDL
Source available · pre-1.0

Cash-flow models that give you the number and the distribution around it.

CFDL is a deterministic language for modeling cash flows across energy, real estate, credit, and operating businesses. Declare the deal in text; the engine derives the schedule, the metrics, and the uncertainty.

No signup. The compiler and engine run in your browser.

solar-ppa.cfdl
version 0.1
model "solar-ppa"
time calendar monthly from 2026-01 for 120

entity project solar

assume degradation ~ Normal(mean=0.005, stdev=0.002, clip=[0.0, 0.012])

stream project.ppa_revenue on entity project.solar inflow currency USD {
  schedule every monthly from 2026-01 to 2035-12
  amount = 4200 * 85 / 12 * pow(1 - inputs.degradation, time.t / 12.0)
}

stream project.om on entity project.solar outflow currency USD {
  schedule every monthly from 2026-01 to 2035-12
  amount = 70000 / 12
}
NPV @ 8%$1,954,959
P5
$1,921,963
Median
$1,956,580
P95
$1,989,638

2,000 seeded trials (seed 42) — same model file, reproducible byte-for-byte.

Built like a compiler, not a spreadsheet

Underwriting models decide real money. They deserve the tooling software engineering has had for decades.

One model, two answers

Swap a constant for a distribution and the same file returns the point estimate and percentile bands around every metric — seeded and reproducible.

Parity you can check

Every domain pack is gated by benchmark suites diffed against independent reference models, held decimal-exact on schedule math.

Domain packs

Energy, real estate, credit, and operating businesses ship as contract templates with validated terms and industry metrics.

Diffable and deterministic

Models compile to canonical IR. The same inputs always produce the same output, so results belong in code review and CI.

Diagnostics, not #REF!

A real compiler with spans, error codes, and hover docs. Mistakes fail at compile time, naming the term that caused them.

Runs everywhere

The same engine in your terminal, your notebook, your browser, and your service — byte-identical results across all of them.

Parity is proven, not claimed

Every pack ships with a benchmark suite: the CFDL model is diffed period-by-period against an independent reference implementation, inside a tolerance each case declares. Schedule math is held decimal-exact; only IRR-class iteratives get a bps tolerance.

How benchmarks work
4
domain packs
8
benchmark cases
59
golden fixtures
3
operating systems in CI

Write your first model in ten minutes

Start in the browser, then install the CLI when you want the model in version control.