---
page_title: Version Constraints - Configuration Language
description: >-
  Version constraint strings specify a range of acceptable versions for modules,
  providers, and Terraform itself. Learn version constraint syntax and behavior.
---

# Version Constraints

Anywhere that Terraform lets you specify a range of acceptable versions for
something, it expects a specially formatted string known as a version
constraint. Version constraints are used when configuring:

- [Modules](/terraform/language/modules)
- [Provider requirements](/terraform/language/providers/requirements)
- [The `required_version` setting](/terraform/language/settings#specifying-a-required-terraform-version) in the `terraform` block.

## Version Constraint Syntax

Terraform's syntax for version constraints is very similar to the syntax used by
other dependency management systems like Bundler and NPM.

```hcl
version = ">= 1.2.0, < 2.0.0"
```

A version constraint is a [string literal](/terraform/language/expressions/strings)
containing one or more conditions, which are separated by commas.

Each condition consists of an operator and a version number.

Version numbers should be a series of numbers separated by periods (like
`1.2.0`), optionally with a suffix to indicate a beta release.

The following operators are valid:

- `=` (or no operator): Allows only one exact version number. Cannot be combined
  with other conditions.

- `!=`: Excludes an exact version number.

- `>`, `>=`, `<`, `<=`: Comparisons against a specified version, allowing
  versions for which the comparison is true. "Greater-than" requests newer
  versions, and "less-than" requests older versions.

- `~>`: Allows only the _rightmost_ version component to increment. For example,
  to allow new patch releases within a specific minor release, use the full
  version number: `~> 1.0.4` will allow installation of `1.0.5` and `1.0.10`
  but not `1.1.0`. This is usually called the pessimistic constraint operator.

## Version Constraint Behavior

A version number that meets every applicable constraint is considered acceptable.

Terraform consults version constraints to determine whether it has acceptable
versions of itself, any required provider plugins, and any required modules. For
plugins and modules, it will use the newest installed version that meets the
applicable constraints.

If Terraform doesn't have an acceptable version of a required plugin or module,
it will attempt to download the newest version that meets the applicable
constraints.

If Terraform isn't able to obtain acceptable versions of external dependencies,
or if it doesn't have an acceptable version of itself, it won't proceed with any
plans, applies, or state manipulation actions.

Both the root module and any child module can constrain the acceptable versions
of Terraform and any providers they use. Terraform considers these constraints
equal, and will only proceed if all of them can be met.

A prerelease version is a version number that contains a suffix introduced by
a dash, like `1.2.0-beta`. A prerelease version can be selected only by an
_exact_ version constraint (the `=` operator or no operator). Prerelease
versions do not match inexact operators such as `>=`, `~>`, etc.

## Best Practices

### Module Versions

- When depending on third-party modules, require specific versions to ensure
  that updates only happen when convenient to you.

- For modules maintained within your organization, specifying version ranges
  may be appropriate if semantic versioning is used consistently or if there is
  a well-defined release process that avoids unwanted updates.

### Terraform Core and Provider Versions

- Reusable modules should constrain only their minimum allowed versions of
  Terraform and providers, such as `>= 0.12.0`. This helps avoid known
  incompatibilities, while allowing the user of the module flexibility to
  upgrade to newer versions of Terraform without altering the module.

- Root modules should use a `~>` constraint to set both a lower and upper bound
  on versions for each provider they depend on.
