| --- |
| page_title: Providers - Configuration Language |
| description: >- |
| An overview of how to install and use providers, Terraform plugins that |
| interact with services, cloud providers, and other APIs. |
| --- |
| |
| # Providers |
| |
| > **Hands-on:** Try the [Perform CRUD Operations with Providers](https://learn.hashicorp.com/tutorials/terraform/provider-use?in=terraform/configuration-language&utm_source=WEBSITE&utm_medium=WEB_IO&utm_offer=ARTICLE_PAGE&utm_content=DOCS) tutorial. |
| |
| Terraform relies on plugins called providers to interact with cloud providers, |
| SaaS providers, and other APIs. |
| |
| Terraform configurations must declare which providers they require so that |
| Terraform can install and use them. Additionally, some providers require |
| configuration (like endpoint URLs or cloud regions) before they can be used. |
| |
| ## What Providers Do |
| |
| Each provider adds a set of [resource types](/language/resources) |
| and/or [data sources](/language/data-sources) that Terraform can |
| manage. |
| |
| Every resource type is implemented by a provider; without providers, Terraform |
| can't manage any kind of infrastructure. |
| |
| Most providers configure a specific infrastructure platform (either cloud or |
| self-hosted). Providers can also offer local utilities for tasks like |
| generating random numbers for unique resource names. |
| |
| ## Where Providers Come From |
| |
| Providers are distributed separately from Terraform itself, and each provider |
| has its own release cadence and version numbers. |
| |
| The [Terraform Registry](https://registry.terraform.io/browse/providers) |
| is the main directory of publicly available Terraform providers, and hosts |
| providers for most major infrastructure platforms. |
| |
| ## Provider Documentation |
| |
| Each provider has its own documentation, describing its resource |
| types and their arguments. |
| |
| The [Terraform Registry](https://registry.terraform.io/browse/providers) |
| includes documentation for a wide range of providers developed by HashiCorp, third-party vendors, and our Terraform community. Use the |
| "Documentation" link in a provider's header to browse its documentation. |
| |
| Provider documentation in the Registry is versioned; you can use the version |
| menu in the header to change which version you're viewing. |
| |
| For details about writing, generating, and previewing provider documentation, |
| see the [provider publishing documentation](/registry/providers/docs). |
| |
| ## How to Use Providers |
| |
| To use resources from a given provider, you need to include some information |
| about it in your configuration. See the following pages for details: |
| |
| - [Provider Requirements](/language/providers/requirements) |
| documents how to declare providers so Terraform can install them. |
| |
| - [Provider Configuration](/language/providers/configuration) |
| documents how to configure settings for providers. |
| |
| - [Dependency Lock File](/language/files/dependency-lock) |
| documents an additional HCL file that can be included with a configuration, |
| which tells Terraform to always use a specific set of provider versions. |
| |
| ## Provider Installation |
| |
| - Terraform Cloud and Terraform Enterprise install providers as part of every run. |
| |
| - Terraform CLI finds and installs providers when |
| [initializing a working directory](/cli/init). It can |
| automatically download providers from a Terraform registry, or load them from |
| a local mirror or cache. If you are using a persistent working directory, you |
| must reinitialize whenever you change a configuration's providers. |
| |
| To save time and bandwidth, Terraform CLI supports an optional plugin |
| cache. You can enable the cache using the `plugin_cache_dir` setting in |
| [the CLI configuration file](/cli/config/config-file). |
| |
| To ensure Terraform always installs the same provider versions for a given |
| configuration, you can use Terraform CLI to create a |
| [dependency lock file](/language/files/dependency-lock) |
| and commit it to version control along with your configuration. If a lock file |
| is present, Terraform Cloud, CLI, and Enterprise will all obey it when |
| installing providers. |
| |
| > **Hands-on:** Try the [Lock and Upgrade Provider Versions](https://learn.hashicorp.com/tutorials/terraform/provider-versioning?in=terraform/configuration-language&utm_source=WEBSITE&utm_medium=WEB_IO&utm_offer=ARTICLE_PAGE&utm_content=DOCS) tutorial. |
| |
| ## How to Find Providers |
| |
| To find providers for the infrastructure platforms you use, browse |
| [the providers section of the Terraform Registry](https://registry.terraform.io/browse/providers). |
| |
| Some providers on the Registry are developed and published by HashiCorp, some |
| are published by platform maintainers, and some are published by users and |
| volunteers. The provider listings use the following badges to indicate who |
| develops and maintains a given provider. |
| |
| <ProviderTable /> |
| <p></p> |
| |
| ## How to Develop Providers |
| |
| Providers are written in Go, using the Terraform Plugin SDK. For more |
| information on developing providers, see: |
| |
| - The [Plugin Development](/plugin) documentation |
| - The [Call APIs with Terraform Providers](https://learn.hashicorp.com/collections/terraform/providers?utm_source=WEBSITE&utm_medium=WEB_IO&utm_offer=ARTICLE_PAGE&utm_content=DOCS) tutorials |