Parameters and environment are substituted before parsing
Full-value and embedded placeholders are both valid. Full values preserve their resolved type.
Resolved values, with types preserved when a placeholder occupies the whole YAML value.
What {{ param:NAME }} + {{ env:NAME }} is
{{ param:NAME }} and {{ env:NAME }} are placeholders resolved before the YAML structure is validated by DSL models.
They are not runtime expression variables. After substitution, operations receive ordinary strings, numbers, booleans, lists, or mappings.
What it contains
- Parameter lookup — Resolved from declarations and layered values, with CLI overrides strongest.
- Environment lookup — Read from the current process environment.
- Two substitution modes — A full placeholder preserves type; an embedded placeholder produces text.
Whole values keep their type
Use a placeholder as the entire YAML value when the receiving key expects an integer, boolean, list, or mapping. Embed it in text only when text is the intended result.
Run the complete example
Copy this manifest from the verified documentation project, then run it from the repository root.
version: "1.0"
transformations:
steps:
- cast:
mapping: {amount: float}
- filter:
expr: "amount > {{ param:MIN_AMOUNT }}"
hdrctl run examples/tutorial/dsl-elements -t parameter-filter.yaml -P MIN_AMOUNT=50
✅ Pipeline completed successfully in 3.6s Rows read : 30 Rows written: 6
The relevant command syntax, copied from hdrctl run --help:
hdrctl run [PATH] -s, --sources FILE explicit path to sources.yaml -d, --destinations FILE explicit path to destinations.yaml -t, --transformations FILE explicit path to transformations.yaml -P, --param KEY=VALUE override a parameter, repeatable