| --- |
| page_title: Modules Overview - Configuration Language |
| description: >- |
| Modules are containers for multiple resources that are used together in a |
| configuration. Find resources for using, developing, and publishing modules. |
| --- |
| |
| # Modules |
| |
| > **Hands-on:** Try the [Reuse Configuration with Modules](/terraform/tutorials/modules?utm_source=WEBSITE&utm_medium=WEB_IO&utm_offer=ARTICLE_PAGE&utm_content=DOCS) tutorials. |
| |
| _Modules_ are containers for multiple resources that are used together. A module |
| consists of a collection of `.tf` and/or `.tf.json` files kept together in a |
| directory. |
| |
| Modules are the main way to package and reuse resource configurations with |
| Terraform. |
| |
| ## The Root Module |
| |
| Every Terraform configuration has at least one module, known as its |
| _root module_, which consists of the resources defined in the `.tf` files in |
| the main working directory. |
| |
| ## Child Modules |
| |
| A Terraform module (usually the root module of a configuration) can _call_ other |
| modules to include their resources into the configuration. A module that has |
| been called by another module is often referred to as a _child module._ |
| |
| Child modules can be called multiple times within the same configuration, and |
| multiple configurations can use the same child module. |
| |
| ## Published Modules |
| |
| In addition to modules from the local filesystem, Terraform can load modules |
| from a public or private registry. This makes it possible to publish modules for |
| others to use, and to use modules that others have published. |
| |
| The [Terraform Registry](https://registry.terraform.io/browse/modules) hosts a |
| broad collection of publicly available Terraform modules for configuring many |
| kinds of common infrastructure. These modules are free to use, and Terraform can |
| download them automatically if you specify the appropriate source and version in |
| a module call block. |
| |
| Also, members of your organization might produce modules specifically crafted |
| for your own infrastructure needs. [Terraform Cloud](https://cloud.hashicorp.com/products/terraform) and |
| [Terraform Enterprise](/terraform/enterprise) both include a private |
| module registry for sharing modules internally within your organization. |
| |
| ## Using Modules |
| |
| - [Module Blocks](/terraform/language/modules/syntax) documents the syntax for |
| calling a child module from a parent module, including meta-arguments like |
| `for_each`. |
| |
| - [Module Sources](/terraform/language/modules/sources) documents what kinds of paths, |
| addresses, and URIs can be used in the `source` argument of a module block. |
| |
| - The Meta-Arguments section documents special arguments that can be used with |
| every module, including |
| [`providers`](/terraform/language/meta-arguments/module-providers), |
| [`depends_on`](/terraform/language/meta-arguments/depends_on), |
| [`count`](/terraform/language/meta-arguments/count), |
| and [`for_each`](/terraform/language/meta-arguments/for_each). |
| |
| ## Developing Modules |
| |
| For information about developing reusable modules, see |
| [Module Development](/terraform/language/modules/develop). |