Skip to main content


Expressions refer to or compute values within a configuration. The simplest expressions are just literal values, like "hello" or 5, but the OpenTofu language also allows more complex expressions such as references to data exported by resources, arithmetic, conditional evaluation, and a number of built-in functions.

Expressions can be used in a number of places in the OpenTofu language, but some contexts limit which expression constructs are allowed, such as requiring a literal value of a particular type or forbidding references to resource attributes. Each language feature's documentation describes any restrictions it places on expressions.

You can experiment with the behavior of OpenTofu's expressions from the OpenTofu expression console, by running the tofu console command.

The other pages in this section describe the features of OpenTofu's expression syntax.

  • Types and Values documents the data types that OpenTofu expressions can resolve to, and the literal syntaxes for values of those types.

  • Strings and Templates documents the syntaxes for string literals, including interpolation sequences and template directives.

  • References to Values documents how to refer to named values like variables and resource attributes.

  • Operators documents the arithmetic, comparison, and logical operators.

  • Function Calls documents the syntax for calling OpenTofu's built-in functions.

  • Conditional Expressions documents the <CONDITION> ? <TRUE VAL> : <FALSE VAL> expression, which chooses between two values based on a bool condition.

  • For Expressions documents expressions like [for s in var.list : upper(s)], which can transform a complex type value into another complex type value.

  • Splat Expressions documents expressions like var.list[*].id, which can extract simpler collections from more complicated expressions.

  • Dynamic Blocks documents a way to create multiple repeatable nested blocks within a resource or other construct.

  • Type Constraints documents the syntax for referring to a type, rather than a value of that type. Input variables expect this syntax in their type argument.

  • Version Constraints documents the syntax of special strings that define a set of allowed software versions. OpenTofu uses version constraints in several places.