Runs
A run is a single execution of your infrastructure code within a stack. Runs are the core workflow in Zenfra — they plan, approve, and apply changes to your infrastructure.
Run types
Zenfra supports three types of runs, available from the Trigger dropdown on any stack:
| Type | Description |
|---|---|
| Plan & Apply (Tracked) | Plans changes, waits for manual approval, then applies. This is the standard deployment workflow. |
| Plan Only | Plans changes for review without applying them. Useful for previewing what would happen. |
| Destroy | Plans and applies the destruction of all resources managed by the stack. |
Run lifecycle
Every run progresses through a series of phases. Each phase is visible in the run detail page with its duration and timestamp.
Phases
Queued → Preparing → Initializing → Planning → [Approved] → Applying → Finished
| Phase | Description |
|---|---|
| Queued | The run is waiting for an available worker slot. Shows who triggered the run and when. |
| Preparing | The worker downloads the source bundle, configuration bundle, applies environment variables, and configures the managed state backend. |
| Initializing | Runs terraform init or tofu init to set up providers, modules, and the backend. |
| Planning | Generates the execution plan showing what resources will be added, changed, or destroyed. |
| Approved | For tracked runs, the plan must be manually confirmed before applying. Shows who approved and when. |
| Applying | Executes the approved plan to create, modify, or destroy infrastructure resources. |
| Finished | The run completed successfully. |
If a run encounters an error at any phase, it transitions to Failed instead of continuing.
Run detail page
The run detail page shows:
- Breadcrumb — link back to the parent stack
- Run type — Tracked, Plan Only, or Destroy
- Status — current state (Finished, Failed, etc.)
- Resource changes — summary of additions (+), modifications (~), and deletions (-)
- Re-run button — trigger a new run with the same configuration
- Metadata — branch, triggered by, and run ID (copyable)
Run history
The main content area shows the RUN HISTORY — a vertical timeline of all phases with expandable log sections. Each phase shows:
- Phase name and icon
- Duration (e.g.,
00:47) - Start timestamp (e.g.,
Feb 19th, 4:15:38 PM)
Logs
Click any phase to expand its logs. Logs show the full output from that phase of execution — including Terraform/OpenTofu init output, plan details, and apply results.
Each log section has:
- Copy logs — copy the full log output to your clipboard
- Download logs — download the log output as a file
Preparing phase logs
The Preparing phase shows Zenfra-specific operations:
[Zenfra] Preparing workspace for run <run_id>
[Zenfra] Downloading source bundle...
[Zenfra] Source bundle downloaded (676 B, 824ms)
[Zenfra] Downloading configuration bundle...
[Zenfra] Configuration bundle downloaded (0 B)
[Zenfra] Applied 0 environment variables
[Zenfra] Configuring managed state backend...
[Zenfra] Backend configuration complete
[Zenfra] Workspace preparation complete (860ms)
Runs tab on a stack
The Runs tab on a stack's detail page shows a paginated table of all runs with:
| Column | Description |
|---|---|
| Status | Run state (Finished, Failed, etc.) |
| Changes | Resource additions (+), modifications (~), and deletions (-) |
| IAC | IaC engine version used for this run |
| Started | When the run was triggered |
| Duration | Total run time |
| Triggered By | The user or system that initiated the run |
| Actions | Link to view the full run detail |
The table supports filtering by triggered by and is paginated with configurable rows per page.