StacksPRO
A stack is a runnable composition of projects, services, and other stacks. Instead of starting your API, its database, its auth worker, and your frontend one at a time, you group them once and bring the whole environment up — in dependency order — with a single command, click, or Shortcut.
A stack runs no process of its own. It’s a lightweight unit that orchestrates its members: starting a stack starts its members (and their dependencies); stopping it releases them.
Two kinds of stack
Manual
You choose the members. Create a stack, seed it, then add or remove members whenever you like.
corral stack create storefront --member web --member api
corral stack add storefront auth
corral stack rm storefront web
Cloudflare-derived
For Cloudflare Workers, Corral builds stacks automatically. It reads each worker’s wrangler config, finds the workers that call each other — service bindings, queue producer/consumer pairs — and groups each cluster into a derived stack. New clusters are detected as you register projects; you don’t create these by hand.
A derived stack stays in sync with your config. Change a wrangler binding and the stack’s membership and wiring are re-derived; if the on-disk config has drifted from the stack, Corral shows a divergence banner with a one-click Re-sync.
To hand-edit a derived stack, eject it into a manual copy first (see below).
Starting and stopping
corral stack start storefront # bring every member up, in dependency order
corral stack stop storefront # release the stack's members
corral stack restart storefront
In the macOS app, select the stack in the STACKS section of the sidebar and use the toolbar Start / Stop / Restart controls, or the Play button on the stack’s row.
Members are ref-counted. If two running stacks share a member — say both storefront and admin depend on postgres — stopping one stack won’t pull the shared member out from under the other. The member stops only when the last stack using it releases it. When stopping a stack would affect another running stack, Corral asks first.
Seeing how a stack fits together
corral stack list # every stack: status, origin, member count
corral stack status storefront # dependency tree, members, wiring, drift
In the app, a stack’s detail view opens on a Graph tab — a dependency diagram of the members and the wiring between them, each node showing its live status. The Members list, a New Stack sheet, membership editing, and (for derived stacks) the re-sync / eject controls live here too.
Re-sync and Eject
corral stack resync storefront # re-derive a Cloudflare stack from current wrangler config
corral stack eject storefront # fork a derived stack into an editable manual copy
Re-sync pulls a Cloudflare-derived stack back in line with its workers’ current wrangler config. Eject forks a derived stack into a manual one you can edit freely, leaving the original intact — the way to take manual control of membership that otherwise comes from config.
Deleting and renaming
corral stack rename storefront shop
corral stack delete storefront # the stack is removed; its members are preserved
Deleting a stack never deletes its members — they go back to being ordinary standalone projects and services.
Reading a stack’s logs
A stack has no process of its own, so its logs are the logs of everything it
brings up: its members, whatever those members depend on, and the same again
through any nested stack. That is exactly the set corral stack start starts,
so a shared Postgres two of your workers talk to is in view — which matters,
because when a stack is broken that is very often what broke it.
corral logs storefront
corral logs storefront --follow
The same set backs the Logs tab of a stack’s detail view in the macOS app. Every line is labelled with the unit it came from, and the CLI names the units it widened to on stderr before the first line.
corral stack status draws the same set: a unit the stack starts but does not
contain is marked ↑ started with the stack, and anything the tree cannot place
— a dependency’s own dependency, a nested stack’s members — is listed after it as
also started:.
Under --follow, the daemon — not the CLI — decides which units the stream
carries, and it works the set out again every time the stream subscribes. So a
follow that rides out a daemon restart or an update comes back scoped to the
stack as it is now, rather than to the membership it had when you started. A
member added while the connection stays up is picked up at the next reconnect;
re-run the command to see it straight away.
Beyond the CLI and app
Stacks are reachable wherever Corral is:
- AI tools (MCP) — agents can
stack_listandstack_info(free) andstack_start/stack_stop(Pro). See AI Tools (MCP). - Spotlight, Shortcuts & Siri — open or list stacks for free; start / stop / restart in a Shortcut or by asking Siri (“Start a Corral stack”). See Spotlight, Shortcuts & Siri.
- Deep links —
corral://start?stack=storefrontand friends. See Deep Links.
Free vs Pro
| Capability | Free | Pro |
|---|---|---|
| List stacks, inspect members & wiring | ✓ | ✓ |
| Read a stack’s logs | ✓ | ✓ |
| Open a stack, view its graph | ✓ | ✓ |
| Create, add / remove members, rename, delete | ✓ | |
| Start / stop / restart | ✓ | |
| Re-sync / eject a Cloudflare-derived stack | ✓ |
The daemon enforces this split — the same gate behind every surface (CLI, app, MCP, Shortcuts, deep links), so the boundary is identical no matter how you reach it. On the free tier, a Pro action returns a clean “Corral Pro required” prompt instead of failing cryptically.