---
description: >-
  The tofu destroy command destroys all objects managed by a OpenTofu
  configuration.
---

# Command: destroy

The `tofu destroy` command is a convenient way to destroy all remote
objects managed by a particular OpenTofu configuration.

While you will typically not want to destroy long-lived objects in a production
environment, OpenTofu is sometimes used to manage ephemeral infrastructure
for development purposes, in which case you can use `tofu destroy` to
conveniently clean up all of those temporary objects once you are finished
with your work.

## Usage

Usage: `tofu destroy [options]`

This command is just a convenience alias for the following command:

```
tofu apply -destroy
```

For that reason, this command accepts most of the options that
[`tofu apply`](../commands/apply.mdx) accepts, although it does
not accept a plan file argument and forces the selection of the "destroy"
planning mode.

You can also create a speculative destroy plan, to see what the effect of
destroying would be, by running the following command:

```
tofu plan -destroy
```

This will run [`tofu plan`](plan.mdx) in _destroy_ mode, showing
you the proposed destroy changes without executing them.

## Forgotten Resources

<span id="forgotten-resources"></span>

When you run `tofu destroy`, OpenTofu will attempt to destroy all resources
managed by the configuration. However, if any resources have the
[`lifecycle.destroy`](../../language/resources/behavior.mdx#lifecycle-customizations)
meta-argument set to `false`, those resources will be "forgotten" instead of
destroyed.

When resources are forgotten:

- They are removed from the OpenTofu state file
- The actual infrastructure objects remain intact in your cloud provider or remote system
- The `tofu destroy` command exits with a non-zero status code to indicate
  that not all resources were fully removed

This exit code behavior might be important for automation and CI/CD pipelines, as it
signals that the destroy operation did not complete as a typical destroy would.
In case you want `tofu destroy` to not emit errors and exit with zero status code when resources are forgotten,
you can use the `-suppress-forget-errors` flag.

:::warning
The `destroy` attribute is persisted in the state file, even when resources are removed from the configuration.
Meaning that resources will **not** be destroyed even when removed from the configuration.
If you want to fully destroy such resources (still in the state), you must first add the resource configuration back and
remove the `lifecycle.destroy` attribute (or set it to `true`).

Alternatively, you can add the `removed` block for the removed resource with `lifecycle.destroy = true`, which will override the `destroy` attribute in the state file.
:::
