Skip to content

destroy

Terminal window
alchemy destroy [file] [options]

destroy deletes every resource in a stack. It computes a plan where all existing resources are marked for deletion, asks for approval, and removes them in dependency order.

Under the hood, destroy is deploy with the desired state zeroed out — every resource in state plans as a deletion.

Plan: 2 to delete

- Worker (Cloudflare.Worker)
- Bucket (Cloudflare.R2.Bucket)

Proceed?
◉ Yes ○ No
 Worker (Cloudflare.Worker) deleted
 Bucket (Cloudflare.R2.Bucket) deleted
Option Description
[file] Stack file to destroy (defaults to alchemy.run.ts)
--stage <name> Stage to destroy (defaults to dev_$USER)
--yes Skip the approval prompt
--dry-run Show what would be deleted without actually deleting
--profile <name> Auth profile to use (defaults to default or $ALCHEMY_PROFILE)
--env-file <path> Load environment variables from a file
Terminal window
# Destroy a PR preview environment
alchemy destroy --stage pr-42 --yes
# Destroy your personal dev stage
alchemy destroy --stage dev_sam

Resources declared with RemovalPolicy.retain() are skipped by destroy: the provider’s delete is never called and only the state row is dropped, so the cloud object outlives the stack. The same is true of a resource whose declaration you simply delete — the orphan sweep reads the policy from the state row, not from your code.

import * as RemovalPolicy from "alchemy/RemovalPolicy";
const data = yield* R2.Bucket("Data").pipe(RemovalPolicy.retain());

See Resource lifecycle › Removal policy.

destroy is scoped to one stack + stage and driven by the state store; to enumerate and delete everything a set of providers can see in the live account, see nuke.