HashiCorp Terraform is a powerful Infrastructure as Code (IaC) tool for managing resources both in the cloud and on-premises. The first command that you run when working with a Terraform Project is the terraform init
command (aka Terraform project initialization command). The Terraform Init command is a critical part of the Terraform workflow, and must be run before any other Terraform commands can be used. Regardless of your experience level with Terraform, you’ll need to be familiar with the terraform init
command.
This article explains how to use the terraform init
command, as well as what options are available when using it, with examples. Whether you’re a beginner looking to learn HashiCorp Terraform, or an experienced DevOps Engineer or Site Reliability Engineer (SRE), this article will help you gain further understanding of the Terraform Init command.
What is the Terraform Init Command?
The terraform init
command is used to initialize a Terraform working directory; also known as a Terraform project. When the init
command is run, it will automatically download and install any required Terraform providers and plugins used within the Terraform code. It will also set up the backend configured in the Terraform code for storing the Terraform state (.tfstate
) file. This state file is where Terraform will store information about the infrastructure managed by the project, and it can be stored locally or in a remote / shared location like Azure Storage.
To run the Terraform Init command, you’ll need to first have Terraform installed, then navigate to the directory where the Terraform Project is located and run the following command:
terraform init
After running the terraform init
command within the working directory, Terraform will have downloaded and installed any required providers and plugins, and set up the backend state file storage. This will get everything initialized for Terraform to be able to manage the infrastructure configured within the Terraform project code.

The Terraform providers and plugins that are downloaded when the init
command is run are saved within a sub-directory of the working directory where the command was run. In other words, the downloads are saved within a sub-directory of the Terraform project. This sub-directory is named .terraform
and depending on your operating system settings may be hidden from view. You don’t need to worry about committing this sub-directory into source control.
If you need help when running the terraform init
command, you can add the -help
option to have Terraform output help information about command usage to the terminal.
terraform init -help
What Init Command Options are Available?
When running the terraform init
command it will take direction off the Terraform configuration defined in the code, but there are also several options that can be used on the terminal when running the init
command.
Here’s a summary of the different, options available when running the terraform init
comand:
-backend=true|false
: Specifies whether to set up the backend for storing Terraform state.false
will skip the backend configuration. By default, this option is set totrue
.-backend-config=path
: Specifies a file containing backend configuration values to use. This option can be used to configure the backend without embedding configuration values into the Terraform configuration files.-get=true|false
: Specifies whether to download and install modules. By default, this option is set totrue
so it will automatically download modules.-input=true|false
: Specifies whether to ask for input. By default, this option is set totrue
.false
can be used for a more “quite” execution of the command.-lock=true|false
: Specifies whether to lock the state file. By default, this option is set totrue
.false
could be used to disable locking the state files during state-related operations if necessary.-lock-timeout=duration
: Specifies the time to wait for a state lock. By default, this option is set to0s
(zero seconds) or “no wait”; which will cause failure if the lock is currently held by another process.-upgrade
: Install the latest module and provider versions allowed within configured constraints, overriding the default behavior of selecting exactly the version recorded in the dependency lock file.-reconfigure
: Reconfigure a backend, ignoring any saved configuration.
These options can be used to customize the behavior of the terraform init
command, such as locking the state file, specifying the backend for storing the Terraform state file, or other options. The terraform init
command will generally be used without any options, but options can be used depending on the specific use case a necessary.