File Extension
ubx source files use the.iac extension.
Syntax
Value Types
| Type | Example | Notes |
|---|---|---|
| String | "eu-west-1" | Double-quoted |
| Number | 42, 3.14 | Integer or float |
| Boolean | true, false | |
| Object | { key = value } | Nested key-value pairs |
| List | ["a", "b"] | Ordered list |
| Pending ref | ~unit.x.y.z | Async cloud output |
| Resolved ref | input.name | Compile-time variable |
| Interpolation | "${input.env}-bucket" | Embedded expressions |
Attribute Naming
Attribute keys usesnake_case in .iac files, automatically converted to camelCase in generated TypeScript:
The ~ Sigil and Pending<T>
The ~ prefix marks values that resolve at apply time:
Pending<T> propagates. If a value depends on a Pending<T>, it is also Pending<T>. The code generator converts Pending<T> references into Pulumi Output<T>.apply() chains automatically.
See The Pending<T> Type System for a full deep dive.
Block Types
Resource Blocks — create cloud resources
Value Blocks — define values
Modifier Blocks
Governance Blocks
String Interpolation
Pending<T>:
Meta-Arguments
These work onunit, component, deploy, and sync blocks:
| Argument | Description |
|---|---|
count = N | Create N copies; use count.index (0-based) |
for_each = map | Iterate over map; use each.key / each.value |
when = condition | Conditionally create the resource |
depends_on = [...] | Explicit dependency ordering |
lifecycle { ... } | prevent_destroy, ignore_changes, create_before_destroy |
cost_limit = N | Monthly cost ceiling in USD (requires AI) |
