Docs
provlift

Terraform & OpenTofu provider upgrades, automated.

Inventory providers across every module, see what the registry allows, and ship one precise, reviewable upgrade PR per provider. Lock files are always regenerated by Terraform or OpenTofu, never hand-edited.

$ go install github.com/provlift/provlift/cmd/provlift@latest
$ provlift upgrade --level major --next-major --allow-major
  provider   current     target
  azurerm    3.116.0  →  4.0.0
  aws        5.100.0  →  6.0.0
  google     6.50.0   →  7.0.0
✓ constraints rewritten
✓ lock files regenerated
✓ validated · ready for review
awsazurermgooglegithubkubernetes+ any provider
01 · Commands

Find the right command

list, check, drift and version never change files. validate runs Terraform init, and upgrade edits constraints, so preview upgrades with --dry-run first.

offline

provlift list

Show every required provider, module kind, source address, constraint, lock state, and declaration location.

Behavior: Read-only. Does not need Terraform or registry access.

Flags
--provider--roots-only--show-ignored
Examples
provlift list
provlift list --provider aws --roots-only
provlift list --json
network

provlift check

Compare locked versions or constraint floors with published provider releases and identify repository or dependency blockers.

Behavior: Read-only. Exit code 2 can gate CI when upgrades are available.

Flags
--provider--module--level--exit-code
Examples
provlift check
provlift check --level patch --exit-code
provlift check --provider hashicorp/google --module "platform/*"
provlift check --json
offline

provlift drift

Find provider version skew, constraint divergence, and root modules without lock files.

Behavior: Offline and read-only. Use it before changing provider versions across a repository.

Flags
--provider--exit-code
Examples
provlift drift
provlift drift --provider google
provlift drift --exit-code
provlift drift --json
writes files

provlift upgrade

Plan and apply provider updates, rewrite only blocking constraints, regenerate lock files through Terraform, and validate the result.

Behavior: Writes Terraform files and lock files. Major or breaking changes require acknowledgement.

Flags
--provider--module--level--exact-level--allow-major--next-major--to--raise-floor--pin-unconstrained--dry-run--skip-init--skip-validate--backend--platforms--fmt--pr-body
Examples
provlift upgrade --level patch --dry-run
provlift upgrade --provider aws --level minor
provlift upgrade --provider integrations/github --level major --allow-major
provlift upgrade --level patch --terraform-binary tofu
provlift upgrade --provider azurerm --level major --exact-level --next-major --allow-major
provlift upgrade --level patch --exact-level --pr-body body.md --json
terraform

provlift validate

Check formatting, initialize roots, validate Terraform configuration, and optionally run a plan.

Behavior: Runs Terraform. Plan is opt-in and may require backend and cloud credentials.

Flags
--module--plan--backend--no-init
Examples
provlift validate
provlift validate --module "envs/*"
provlift validate --plan --backend
provlift validate --no-init --json
offline

provlift version

Inspect the installed CLI version, commit, build date, Go version, and target platform.

Behavior: Read-only and offline.

Flags
--json
Examples
provlift version
provlift version --json
No matching command. Try “upgrade”, “lock”, or “json”.
02 · Method

How an upgrade moves

Discovery, planning, editing, and validation stay visible as separate steps.

01

Discover

Inventory modules and provider requirements without touching files.

02

Choose a stage

Run a direct patch, minor, or major budget, or progress through exact stages.

03

Review the PR

CI validates the change, explains blockers, and keeps the lock file honest.

03 · Flags

Flag reference

Global and upgrade controls in one searchable table.

FlagDefaultUse it for
-C, --dir.Repository directory to scan.
--jsonfalseEmit machine-readable output instead of a table.
--excludenoneSkip directory globs; repeatable.
--terraform-binaryterraformDrive Terraform, or OpenTofu with "tofu" (bare provider sources then resolve to registry.opentofu.org).
--timeout15mTimeout for one Terraform command.
--include-prereleasefalseInclude prerelease provider versions in discovery and planning.
--levelpatchUpgrade budget: patch, minor, or major.
--exact-levelfalseApply only the selected level for progressive stages.
--allow-majorfalseAcknowledge major or breaking changes.
--next-majorfalseAdvance one major series at a time.
--tononeTarget one exact provider version.
--raise-floorfalseRaise a shared module minimum to the tested target.
--pin-unconstrainedfalseAdd a constraint where none exists.
--dry-runfalseShow an upgrade plan without changing files.
--skip-initfalseEdit constraints without regenerating the lock file.
--skip-validatefalseSkip Terraform validation after upgrade.
--backendfalseAllow backend initialization and state access.
--platformsconfigPlatforms recorded by terraform providers lock.
--fmttrueRun terraform fmt on edited directories.
--pr-bodynoneWrite generated pull request markdown to a file.
04 · Automation

Pull requests by design

CI runs the tool, keeps forge credentials out of the binary, and turns the result into one focused PR per provider.

Direct budget

Move to the next published release one budget allows, one reviewable step at a time. minor includes patch and minor changes; a planned major needs acknowledgement.

provlift upgrade --provider aws --level minor --json

Progressive stages

Keep patch, minor, and major changes in separate PRs. --next-major crosses one major series at a time.

provlift upgrade --provider azurerm --level major --exact-level --next-major --allow-major

PR metadata

CI consumes the stable JSON shape and generated markdown, without giving the CLI forge credentials.

provlift upgrade --level patch --exact-level --pr-body body.md --json