1---
2title: deploy
3description: Compute a plan, ask for approval, and create/update/delete resources to match the desired state.
4---
5
6import Terminal from "../../../components/Terminal.astro";
7
8```sh
9alchemy deploy [options]
10```
11
12`deploy` computes a plan, asks for approval, and creates/updates/deletes resources to match the desired state.
13
14<Terminal content={`[u]Plan[/u]: [g]2 to create[/g]
15
16[g]+[/g] [b]Bucket[/b] [d](Cloudflare.R2.Bucket)[/d]
17[g]+[/g] [b]Worker[/b] [d](Cloudflare.Worker)[/d] [c](1 bindings)[/c]
18[s2][g]+[/g] [c]Bucket[/c]
19
20Proceed?
21◉ Yes ○ No
22[g]✓[/g] [b]Bucket[/b] [d](Cloudflare.R2.Bucket)[/d] [g]created[/g]
23[g]✓[/g] [b]Worker[/b] [d](Cloudflare.Worker)[/d] [g]created[/g]
24[s2][d]• Uploading worker (14.20 KB) ...[/d]
25[s2][d]• Enabling workers.dev subdomain...[/d]
26{
27[s2]url: "https://myapp-worker-dev-you-abc123.workers.dev",
28}`} />
29
30On subsequent deploys, only changed resources are updated:
31
32<Terminal content={`[u]Plan[/u]: [y]1 to update[/y]
33
34[y]~[/y] [b]Worker[/b] [d](Cloudflare.Worker)[/d]
35
36Proceed?
37◉ Yes ○ No
38[g]✓[/g] [b]Worker[/b] [d](Cloudflare.Worker)[/d] [y]updated[/y]
39[s2][d]• Uploading worker (15.10 KB) ...[/d]
40{
41[s2]url: "https://myapp-worker-dev-you-abc123.workers.dev",
42}`} />
43
44When the plan contains no changes, the approval prompt is skipped automatically.
45
46## Flags
47
48| Option | Description |
49| ------------------- | -------------------------------------------------------------------------------------------------------------------------- |
50| `--config, -c <file>` | Stack file to deploy (defaults to `alchemy.run.ts`) |
51| `--stage <name>` | Stage to deploy to (defaults to `$ALCHEMY_STAGE` or `live_$USER`) |
52| `--yes` | Skip the approval prompt |
53| `--dry-run` | Show the plan without applying (same as `alchemy plan`) |
54| `--detailed` | Show declared resource properties as YAML |
55| `--force` | Force updates for resources that would otherwise no-op |
56| `--adopt` | Adopt pre-existing cloud resources that conflict with this stack instead of failing. Useful for re-importing into a fresh state store. |
57| `--profile <name>` | Auth profile to use (defaults to `$ALCHEMY_PROFILE` or `default`) |
58| `--env-file <path>` | Load environment variables from a file |
59
60How `--adopt` decides what to take over is covered in [Adopting Resources](/cli/adopting-resources).
61
62`--dry-run` runs the exact same code path as [`alchemy plan`](/cli/plan) — see that page for the plan output format.
63
64`--detailed` adds the YAML property view to the approval prompt, `--yes`
65deploys, and `--dry-run` previews.
66
67## Examples
68
69```sh
70# Deploy to production, skip the prompt
71alchemy deploy --stage prod --yes
72
73# Deploy a PR preview environment
74alchemy deploy --stage pr-42
75
76# Deploy a different stack file
77alchemy deploy --config stacks/github.ts
78
79# Preview what would change
80alchemy deploy --dry-run
81
82# Review declared inputs as YAML before applying
83alchemy deploy --detailed
84
85# Re-import existing cloud resources into a fresh state store
86alchemy deploy --adopt
87```
88
89## Where next
90
91- [plan](/cli/plan) — preview changes without applying
92- [destroy](/cli/destroy) — delete everything in a stack
93- [Adopting Resources](/cli/adopting-resources) — take over pre-existing infrastructure
94- [Resource Lifecycle](/infrastructure-as-code/resource-lifecycle) — what happens inside a deploy