Using EquaFlow

← Documentation home · DSL reference · Architecture

A five-minute first model

Open Menu → Import DSL and use one of the two built-in examples.

| Choose | When you want to learn | | --- | --- | | Load AI Value Example | A complete business case: labour savings, quality, risk reserves, vendor fees, ROI and payback. | | Load Variate Example | Repeated comparable options and delivery teams, aggregates, capacity and budget decisions—without a time axis. |

Click Import model, then select an entity on the canvas. Inputs are values you provide; formulas reference other fields; ? denotes an unknown output. Press Solve in the canvas toolbar when you want a deliberate solve.

Reading a model

Models are made from entities (cards) and fields.

  • Known/input — a number supplied by the modeller.
  • Formula — an expression such as Revenue.total = Sales.orders * Sales.price.
  • Unknown/output — ?; the solver looks for a value that meets every constraint.
  • Constraint — a condition such as constraint Budget.total <= 50000.

Cards with *N in DSL are collections. For example, Option*4.monthlyDemand = 3200 makes a four-item Option collection. sum(Option.monthlyDemand) aggregates it. This is a collection/variate, not a time series.

Time series are explicitly marked with [t], for example Cash.balance[t] = Cash.balance[t-1] + Cash.netFlow[t]. Turn on Time in the second header row to choose the number of periods.

Solving and Auto-Solve

EquaFlow solves with its Python + Z3 backend. It returns a satisfying assignment for unknowns subject to your constraints; it does not decide whether the assumptions are sensible.

Auto-Solve is opt-out. It is enabled for new sessions: a DSL import starts its first solve, and later edits to a solved model trigger re-solving. Turn it off in Settings → Auto-Solve if a model is expensive, incomplete, or you prefer to press Solve manually. The setting describes the behaviour rather than silently changing it.

After a solution, use the bottom-centre Solution View / Original View control to compare solved values with the original model.

Compare alternatives

Use the Scenarios row to add variations such as Conservative and High Cost. Scenario-specific inputs fall back to the Base value when no override exists. With two or more scenarios, use Compare to read their results side by side.

Use a collection when the options must exist together and need totals, averages, minima or maxima. Use scenarios when the whole model represents competing assumptions.

Save and export

Projects are saved in the browser. Projects opens saved work; Save as Copy makes an independent model. The toolbar offers exports including spreadsheet, image, JSON, DSL and Python where available.

Before relying on an exported result, record the scenario, assumptions, constraint set and solve status. This makes a spreadsheet review reproducible.

Help path

  • Read DSL reference when writing or correcting importer text.
  • Read architecture notes when evaluating solver behaviour or contributing code.
  • Open Menu → Documentation in the app for the current version on GitHub.