Skip to content
Praxis is in alpha. The supported API is praxis.io/alpha, and the contract can change while Praxis is in alpha.About the alpha contract

Dependencies and outputs

Use an output expression when one resource needs a value created by another:

resources: {
network: {
apiVersion: "praxis.io/alpha"
kind: "VPC"
metadata: {name: "payments", labels: {}}
spec: {
region: "us-west-2"
cidrBlock: "10.42.0.0/16"
tags: {}
}
}
appSubnet: {
apiVersion: "praxis.io/alpha"
kind: "Subnet"
metadata: {name: "app-a", labels: {}}
spec: {
region: "us-west-2"
vpcId: "${resources.network.outputs.vpcId}"
cidrBlock: "10.42.10.0/24"
availabilityZone: "us-west-2a"
tags: {}
}
}
}

The expression establishes a graph edge from network to appSubnet. Praxis provisions the VPC first, reads its vpcId output, injects the typed value into the subnet specification, and then dispatches the subnet.

networkVPCappSubnetSubnetother independent resources outputs.vpcIdhydrates spec.vpcId
${resources.<resource-name>.outputs.<field>}

An expression must occupy the entire string value. This lets Praxis preserve the output type instead of performing text substitution.

Praxis builds a directed acyclic graph from all output expressions. Resources with no unresolved dependencies can run concurrently. A failed resource prevents its transitive dependents from running and records the causal chain in the deployment result.

VPCSubnet ASubnet BSecurity groupInstance AInstance BS3 assets instance ID tag

Cycles and references to unknown resources or outputs fail during evaluation, before provisioning begins.