.xcl extension.
File structure
A.xcl file contains a sequence of top-level blocks. Multiple .xcl files in the same directory are merged into one compilation unit — the directory is the stack.
Top-level blocks
These blocks appear at the top level of a.xcl file:
| Block | Label | Purpose |
|---|---|---|
stack | Identifier | Declare cloud resources |
input | Identifier | Declare typed input fields |
output | Identifier | Declare stack outputs |
locals | Identifier | Compute local values |
provider | Identifier (+ optional alias) | Configure a cloud provider |
workspace | None | Workspace-level config |
context | Identifier | Per-environment deployment config |
import | Quoted path | Import existing resources |
remote | Identifier | Reference remote stack outputs |
extend | Labels | Per-environment attribute overrides |
move | None | Rename a resource without recreating it |
interface, policy, test, and check are also top-level blocks.
Block labels are bare identifiers; quotes are optional. stack networking and stack "networking" are equivalent (the quotes are stripped). The one exception is import "path", where the quoted string is a resource path, not a label.
Stack body constructs
Inside astack name { } body you can write:
- Resource declarations —
name = Type { … }(see resources) - Module calls —
module name { source = "…" }(see module) - Deploy targets —
name = deploy helm { … } - GitOps sync —
name = sync argocd { … } - Data lookups —
name = data <type> { … }(see data) meta { }— one per stack (see meta)
Keywords
Comments
Quick links
- Expressions — operators, ternary, match, for
- Types — string, int, number, bool, list, map, object, optional
- Secret function —
secret("backend", "path") - Built-in functions —
len,join,split, etc.

