CFDL
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 asset solar : Asset.Real

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

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

stream solar.om on entity asset.solar outflow currency USD {
  schedule every month from 2026-01 to 2035-12
  amount = 70000 / 12
}
NPV @ 8%$1,942,461
P5
$1,909,865
Median
$1,944,120
P95
$1,976,918

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

Built like a compiler

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.

Checked against references

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.

Assets, parties, contracts

Declare what exists and how it relates. Assets carry lifecycles, events move them between states, and options are contracts with an election.

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.

Every number is checked against a reference

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
40
benchmark cases
305
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.