Skip to content

Environments

Kyku supports isolated environments with separate state files, letting you manage dev, staging, and production from the same config.

The --env flag selects a state file:

.kyku/
├── state.json (default — no --env flag)
├── state.dev.json (--env=dev)
├── state.staging.json (--env=staging)
└── state.prod.json (--env=prod)
Terminal window
# Development
kyku plan --env=dev
kyku apply --env=dev
# Staging
kyku plan --env=staging
kyku apply --env=staging
# Production
kyku plan --env=prod
kyku apply --env=prod --auto-approve

Each environment maintains its own provider IDs, outputs, and encryption meta.

Resources in different environments are completely isolated:

  • Different provider credentials per env via the CI/CD pipeline
  • Different deployment prefixes (each env gets its own prefix)
  • Independent plan/apply lifecycle

To promote from dev to staging, apply the same config with a different --env flag. Since each environment has its own state, resources are created fresh in the target environment.

For incremental promotion, save a plan file and apply it to the target:

Terminal window
# Generate plan for dev
kyku plan --env=dev --out plan-dev.json
# Apply same plan to staging
kyku apply --env=staging --plan plan-dev.json
# GitHub Actions
jobs:
deploy-dev:
steps:
- run: kyku apply --env=dev --auto-approve
deploy-prod:
needs: deploy-dev
steps:
- run: kyku apply --env=prod --auto-approve