Skip to main content
ubx is a compiler, not a wrapper. Understanding how the pieces fit together helps you write better .iac files and debug issues faster.

The Pipeline

.iac files
    ↓ Lexer        tokenizes HCL-inspired syntax
    ↓ Parser       builds typed AST (14+ block types)
    ↓ Merger       applies extend block overrides for target env
    ↓ Type Checker resolves symbols, validates `Pending<T>` refs,
    |              validates required fields against provider schemas,
    |              evaluates policy blocks, detects circular dependencies
    ↓ Code Gen     emits Pulumi TypeScript with `Output<T>` wiring
    ↓ pulumi up    executes against real cloud
Users never write or edit TypeScript — it’s a build artifact in .ubx/.

Core Concepts

`Pending<T>` Type System

How ubx models async cloud outputs and generates correct Pulumi chains

Compilation

Compiler pipeline stages and generated TypeScript

State

How Pulumi state works and where it’s stored

Environments

Multi-environment patterns with extend blocks

Cross-Stack References

Sharing outputs between stacks with remote blocks

Components

Registry and local .iac components

What ubx Is NOT

  • Not a fork of Terraform or OpenTofu
  • Not a wrapper around Terraform (uses Pulumi exclusively)
  • Not a Pulumi YAML replacement (richer syntax + output wiring)
  • Not a general-purpose programming language