---
description: |
  The `packer validate` command validates the syntax and
  configuration in a Packer template, helping you prevent errors.
page_title: packer validate command reference
---

⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️
> [!IMPORTANT]  
> **Documentation Update:** Product documentation previously located in `/website` has moved to the [`hashicorp/web-unified-docs`](https://github.com/hashicorp/web-unified-docs) repository, where all product documentation is now centralized. Please make contributions directly to `web-unified-docs`, since changes to `/website` in this repository will not appear on developer.hashicorp.com.
⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️

# `packer validate` command reference

The `packer validate` Packer command is used to validate the syntax and
configuration of a [template](/packer/docs/templates). The command will
return a zero exit status on success, and a non-zero exit status on failure.
Additionally, if a template doesn't validate, any error messages will be
outputted.

Example usage:

```shell-session
$ packer validate my-template.pkr.hcl
Template validation failed. Errors are shown below.

Errors validating build 'vmware'. 1 error(s) occurred:

* Either a path or inline script must be specified.
```

## Options

- `-syntax-only` - Only the syntax of the template is checked. The
  configuration is not validated.

- `-evaluate-datasources` - Evaluate all data sources when validating a template.
  This is only valid on HCL2 templates, since JSON templates do not feature
  datasources, this option will be ignored.

  ~> **Warning:** Data sources may rely on external services for fetching data,
  which can incur some costs at validation if the services being contacted are
  billing per operation.

- `-except=foo,bar,baz` - Validates all the builds except those with the
  comma-separated names. In legacy JSON templates, build names default to the
  types of their builders (e.g. `docker` or
  `amazon-ebs` or `virtualbox-iso`), unless a specific `name` attribute is
  specified within the configuration. In HCL2 templates, the "name" is the
  source block's "name" label, unless an in-build source definition adds the
  "name" configuration option.

- `-no-warn-undeclared-var` - Silence warnings when the variable definition
  file contains variable assignments for undeclared variables. This can occur
  when using a var-file that contains a large amount of unused variables for a
  given HCL2 template. For HCL2 template defining a value for a variable in a
  var-file is not enough on its own for Packer to function, as there also needs
  to be a variable block definition in the template files `pkr.hcl` for the
  variable. By default `packer validate` will warn when a var-file contains one
  or more undeclared variables.

- `-only=foo,bar,baz` - Only validate the builds with the given comma-separated
  names. In legacy JSON templates, build names default to the
  types of their builders (e.g. `docker` or
  `amazon-ebs` or `virtualbox-iso`), unless a specific `name` attribute is
  specified within the configuration. In HCL2 templates, the "name" is the
  source block's "name" label, unless an in-build source definition adds the
  "name" configuration option.

- `-machine-readable` Sets all output to become machine-readable on stdout.
  Logging, if enabled, continues to appear on stderr.

- `-var` - Set a variable in your Packer template. This option can be used
  multiple times. This is useful for setting version numbers for your build.

- `-var-file` - Set template variables from a file.
