Monorepo
A monorepo is a workspace with a backend package and a frontend that calls it. The one decision Alchemy adds: where do the Stacks live?
Option A — Single Stack
Section titled “Option A — Single Stack”.├── package.json # workspaces: ["frontend", "backend"]├── alchemy.run.ts # the one Stack — deploys both packages├── backend/ # Worker + API schema + typed client└── frontend/ # React app, built by the StackOne alchemy.run.ts at the workspace root deploys everything in
one plan. The frontend reads the Worker’s URL directly off the
in-memory Output — no references, no deploy ordering.
Walkthrough: Single Stack.
Option B — Multiple Stacks
Section titled “Option B — Multiple Stacks”.├── package.json # workspaces: ["frontend", "backend"]├── backend/│ ├── alchemy.run.ts # Backend Stack│ └── src/Stack.ts # typed handle the frontend imports└── frontend/ └── alchemy.run.ts # Frontend Stack — yield* BackendEach package owns its own Stack. The frontend reads the backend’s deployed outputs through a typed cross-stack reference, so each package deploys and destroys independently.
Walkthrough: Multiple Stacks.
How to choose
Section titled “How to choose”- Start with a Single Stack — one plan, one state file, no ordering constraints.
- Go Multiple Stacks when packages deploy on different cadences (different teams, different CI), or the backend has consumers beyond this frontend.
- Go Multiple Stacks when you need to
destroyone package without touching the other.
Where next
Section titled “Where next”- File layout — the single-package layout both options build on.
- Single Stack — the full two-package walkthrough.
- Multiple Stacks — typed Stack handles and cross-stack references.
- References — when to split Stacks and how to pin stages.