| --- |
| page_title: Style Conventions - Configuration Language |
| description: >- |
| Learn recommended formatting conventions for the Terraform language and a |
| command to automatically enforce them. |
| --- |
| |
| # Style Conventions |
| |
| The Terraform parser allows you some flexibility in how you lay out the |
| elements in your configuration files, but the Terraform language also has some |
| idiomatic style conventions which we recommend users always follow |
| for consistency between files and modules written by different teams. |
| Automatic source code formatting tools may apply these conventions |
| automatically. |
| |
| -> **Note**: You can enforce these conventions automatically by running [`terraform fmt`](/cli/commands/fmt). |
| |
| * Indent two spaces for each nesting level. |
| |
| * When multiple arguments with single-line values appear on consecutive lines |
| at the same nesting level, align their equals signs: |
| |
| ```hcl |
| ami = "abc123" |
| instance_type = "t2.micro" |
| ``` |
| |
| * When both arguments and blocks appear together inside a block body, |
| place all of the arguments together at the top and then place nested |
| blocks below them. Use one blank line to separate the arguments from |
| the blocks. |
| |
| * Use empty lines to separate logical groups of arguments within a block. |
| |
| * For blocks that contain both arguments and "meta-arguments" (as defined by |
| the Terraform language semantics), list meta-arguments first |
| and separate them from other arguments with one blank line. Place |
| meta-argument blocks _last_ and separate them from other blocks with |
| one blank line. |
| |
| ```hcl |
| resource "aws_instance" "example" { |
| count = 2 # meta-argument first |
| |
| ami = "abc123" |
| instance_type = "t2.micro" |
| |
| network_interface { |
| # ... |
| } |
| |
| lifecycle { # meta-argument block last |
| create_before_destroy = true |
| } |
| } |
| ``` |
| |
| * Top-level blocks should always be separated from one another by one |
| blank line. Nested blocks should also be separated by blank lines, except |
| when grouping together related blocks of the same type (like multiple |
| `provisioner` blocks in a resource). |
| |
| * Avoid separating multiple blocks of the same type with other blocks of |
| a different type, unless the block types are defined by semantics to |
| form a family. |
| (For example: `root_block_device`, `ebs_block_device` and |
| `ephemeral_block_device` on `aws_instance` form a family of block types |
| describing AWS block devices, and can therefore be grouped together and |
| mixed.) |