Environments

Last updated on May 21, 2026

Every Deployment carries one of three environment labels, and the label is fixed at build time. The environment determines where the build can run, how long it lives, and who can promote it.

The three environments

The table below summarizes how each environment is triggered, how long it sticks around, and which stations it can run on.

EnvironmentTriggered byLifetimeRuns on
ProductionPush to the production branch, or promotion of a preview deployment.Permanent.Production stations.
PreviewPush to a non-production branch, or manual trigger.90 days if unpinned, otherwise permanent.Preview stations only.
DevelopmentLocal CLI build.Session-bound.Local CLI session only.

Production

You create a production deployment in one of two ways:

  • A commit lands on the Procedure's production branch. The build worker compiles the artifact, and if auto-push is on, it rolls out to every linked Station.
  • An Admin or Owner clicks Promote to production on a preview deployment.

Production deployments are permanent. Replaced builds stay in the registry, so you can use Instant rollback to pin a station to any previous version.

Disable auto-push on a procedure when you want to keep building production artifacts without fanning them out automatically.

Preview

Preview deployments build the same way production deployments do and use the same artifact format. You cannot pin a preview to a production station without an explicit promote.

You can create a preview deployment in two ways:

  • Pull-request preview: every push to a PR head builds a preview, which you can pin to a dev station to test against a Unit.
  • Branch-tracked preview: assign a long-lived branch such as staging to a non-production station, and every push rolls out to that station.

Preview deployments age out 90 days after creation if no station is pinned to them. Pinned previews never expire.

Development

Development builds are session-bound and never leave the developer's laptop. CLI builds locally, runs against the Operator UI, and uploads the resulting Run, but the artifact itself is not uploaded.

When you want to share work-in-progress, push the branch and TofuPilot builds a preview deployment.

Environment-specific variables

TofuPilot does not inject environment-specific variables at build time. Configure MES endpoints and calibration data in the procedure YAML, then override per station in the station configuration.

How is this guide?

On this page