An estimator. Represented as data.
A portable contract for questions, conditions, prices and presentation. Validate it at the boundary, use it beyond the application.
Readable files.
Explicit meaning.
The document wrapper carries a schema version, an estimator and optional template metadata. Inside: steps, typed fields, choices, validation, conditions, rules, constants and output settings.
Unknown properties and broken references fail. Unsupported versions are rejected rather than guessed. Older strict readers can reject newer version-1 authoring additions, so compatible package versions still matter.
The public Schema contractimport { parseDocument, parseEstimator }
from "@openquotestack/schema";
// input is parsed JSON data, not executable code.
const document = parseDocument(input);
const estimator = parseEstimator(input);
document.schemaVersion; // "1"
estimator.steps;
estimator.rules;Portable by design.
Bounded by validation.
Conditions and formulas are data. There is no arbitrary JavaScript to execute. Field keys, choices and rules use stable identifiers; references are validated before a calculator is published.
Validation limits document size and depth, validates default values and preserves authored hidden values. Schema migrations will be explicit; automatic migration tooling is not shipped.
Start with a real file.
Download a complete Moving, Cleaning or Agency template. Edit the definition, validate it, and import it as a new estimator. No tenant secrets or customer records belong in a portable file.
Download the templatesFormat and compatibility guidance
Author a working template.
Start with a downloadable room-cleaning example, validate its definition, calculate a known result and import it into the application.
Template authoring walkthroughOPEN SOURCE / OPEN POSSIBILITIES