website/docs/language/files/index.mdx
Code in the OpenTofu language is stored in plain text files with the .tf
or .tofu file extensions. There is also
a JSON-based variant of the language that is
named with the .tf.json or .tofu.json file extensions.
Files containing OpenTofu code are often called configuration files.
When both .tf and .tofu files with the same base name are present in a
directory, OpenTofu will prioritize the .tofu file and ignore the .tf file.
For example:
foo.tf and foo.tofu exist in the same directory, OpenTofu will
only load foo.tofu and ignore foo.tf.This ensures that .tofu files always take precedence over .tf files when
both are available. This scenario can be useful for module authors who want
their modules to support both OpenTofu and Terraform.
Configuration files must always use UTF-8 encoding, and by convention usually use Unix-style line endings (LF) rather than Windows-style line endings (CRLF), though both are accepted.
A module is a collection of one or many .tf, .tf.json, .tofu,
.tofu.json files kept together in a directory.
An OpenTofu module only consists of the top-level configuration files in a directory; nested directories are treated as completely separate modules, and are not automatically included in the configuration.
OpenTofu evaluates all of the configuration files in a module, effectively treating the entire module as a single document. Separating various blocks into different files is purely for the convenience of readers and maintainers, and has no effect on the module's behavior.
An OpenTofu module can use module calls to explicitly include other modules into the configuration. These child modules can come from local directories (nested in the parent module's directory, or anywhere else on disk), or from external sources like the Public OpenTofu Registry.
OpenTofu always runs in the context of a single root module. A complete OpenTofu configuration consists of a root module and the tree of child modules (which includes the modules called by the root module, any modules called by those modules, etc.).