--- description: >- An introduction to the functions which can be used to transform and combine values in expressions. --- # Functions ## Built-in Functions The OpenTofu language includes a number of built-in functions that you can call from within expressions to transform and combine values. The general syntax for function calls is a function name followed by comma-separated arguments in parentheses: ```hcl max(5, 12, 9) ``` For more details on syntax, see [_Function Calls_](../../language/expressions/function-calls.mdx) in the Expressions section. You can experiment with the behavior of OpenTofu's built-in functions from the OpenTofu expression console, by running [the `tofu console` command](../../cli/commands/console.mdx): ``` > max(5, 12, 9) 12 ``` The examples in the documentation for each function use console output to illustrate the result of calling the function with different parameters. ## Provider-defined Functions As of OpenTofu 1.7.0, providers may define their own functions to be available during execution. OpenTofu iterates through the [required_providers](../../language/providers/requirements.mdx) block and queries the specified providers for any functions they wish to register. Functions are added to the current module's context under `provider::::`. Provider aliases are also supported under `provider::::::`. Functions are scoped to the module that requires the provider and are not inherited by child modules. ### Example: ```hcl terraform { required_providers { myhelper = { # yantrio/helpers registers a function named "echo" source = "yantrio/helpers" } } } locals { myval = provider::myhelper::echo("Hello Functions!") } ``` ### Built-in Provider Functions: OpenTofu has a built-in provider `terraform.io/builtin/terraform` which provides [additional functions](../providers/builtin.mdx#functions) that can be used in OpenTofu configurations. ### Notes for Provider Authors: * Support for functions was added in protocol version 5.5 and 6.5. * OpenTofu's provider protocol is compatible with Terraform's provider protocol. * `GetProviderSchema()` is used to initially query the functions available in a given provider. * Providers which supply functions may be configured and may supply additional functions via `GetFunctions()`. See the experimental [Lua](https://github.com/opentofu/terraform-provider-lua) and [Go](https://github.com/opentofu/terraform-provider-go) providers for implementation examples.