Skip to content


Folders and files

Last commit message
Last commit date

Latest commit


Repository files navigation

terraform-mode.el Tests melpa badge melpa stable badge

Major mode of Terraform configuration file






You can install terraform-mode.el from MELPA by package.el.


  • Syntax highlighting
  • Indentation
  • imenu
  • Formatting using terraform fmt
  • Block folding
  • easier access to Terraform resource documentation

Block folding

terraform-mode sets up outline-mode variables for block folding. To use outline-mode for block folding, enable outline-minor-mode in terraform-mode-hook:

(add-hook 'terraform-mode-hook #'outline-minor-mode)

You can use outline-toggle-children bound to C-c C-f to toggle visibility of a block at point.

We also provide function terraform-toggle-or-indent which folds-or-indents. It is not bound by default, but you can bind it to TAB or any other key.

Access to Terraform resource documentation

Within a resource or a data block, type C-c C-d C-w to open a new browser tab with the resource or data documentation page.

Type C-c C-d C-c to kill the URL (i.e. copy it to the clipboard) for the documentation page rather than directly open it in the browser.

You can also type C-c C-d C-r to insert a comment containing a link to this documentation right above the resource or data block.

This feature requires either:

  • a required_provider declaration in any .tf file in current directory (see Terraform doc)
  • a working terraform providers command. This command may require a valid token (at least for AWS).

Customize Variables

terraform-indent-level(Default: 2)

Indentation size. You need to call revert-buffer if you change this value outer of hook such as eval-expression.

terraform-format-on-save(Default nil)

Set to t to automatically format the buffer on save.

Sample Configuration

 '(terraform-indent-level 4))

With use-package

(use-package terraform-mode
  ;; if using straight
  ;; :straight t

  ;; if using package.el
  ;; :ensure t
  :custom (terraform-indent-level 4)
  (defun my-terraform-mode-init ()
    ;; if you want to use outline-minor-mode
    ;; (outline-minor-mode 1)

  (add-hook 'terraform-mode-hook 'my-terraform-mode-init))

See Also

This major-mode inherits from hcl-mode. Most of syntax features, like highlighting, indentation are implemented in hcl-mode.