ubx ship compiles an XCL stack and deploys it using the Pulumi Automation API. It is the equivalent of running ubx compile followed by pulumi up.
Usage
| Form | Description |
|---|---|
ubx ship | Ship the stack in the current directory |
ubx ship ./networking | Ship the stack in ./networking |
What it does
- Compile — runs the full XCL pipeline (lex → parse → typecheck → IR → codegen)
- Write — writes generated files to
<path>/.ubx/ - Stack — upserts the Pulumi stack (creating it if it doesn’t exist)
- Packages — installs Python dependencies via pip into a virtualenv
- Deploy — calls
pulumi upvia the Pulumi Automation API
State storage
State is stored locally in<path>/.ubx/state/ by default. This is a file:// backend — no remote state configuration is needed. The state directory is created automatically on the first ubx ship.
Stack name
The Pulumi stack name is the directory name of the target path. For example,ubx ship ./networking creates a stack named networking.
Output
+, ~, and - symbols indicate create, update, and destroy respectively.
Compile errors abort ship
If the XCL pipeline produces parse or typecheck errors,ubx ship aborts before any cloud calls are made:
Prerequisites
- AWS/GCP/Azure credentials in the environment (or configured via provider block)
- Python 3.9+ and
pipon yourPATH - Pulumi Automation API (bundled — no separate
pulumiCLI install required)

