v0.18.0
Release 9 delivers curated scaffold recipes so new stacks can start from a working Dockerfile + compose + config instead of generic boilerplate.
Highlights
Scaffold recipes (#45)
strut scaffold list
strut scaffold list --json
strut scaffold my-api --recipe python-api
strut scaffold my-site --recipe static-site
strut scaffold my-app --recipe next-postgres--recipe <name> copies a curated recipe directory into stacks/<name>/ and runs the usual STACK_NAME_PLACEHOLDER / YOUR_ORG substitutions. Without --recipe, strut scaffold still emits the default single-service template from v0.17.0 and earlier — recipes are purely additive.
Three built-in recipes
- static-site — Caddy serving
public/with automatic Let's Encrypt TLS - python-api — FastAPI + Postgres with
/healthrunningSELECT 1 - next-postgres — Next.js standalone + Postgres + Caddy reverse proxy
Each ships with its own README.md that explains the recipe-specific setup (e.g. point DNS, set output: 'standalone' in Next.js config).
Custom / team recipes
Drop your own recipe under .strut/recipes/<name>/ at the project root. Strut picks them up automatically, scaffold list shows them alongside official recipes, and user recipes override official recipes of the same name — so teams can lock their own flavor of a stack without forking strut.
Recipe structure
<recipe-name>/
├── recipe.conf # NAME, DESCRIPTION, TAGS, …
├── docker-compose.yml
├── services.conf # health-check wiring
├── required_vars
├── .env.template
└── README.md # printed in "Next steps"
PRs
Test coverage
1001/1001 BATS tests green — 23 new cases in tests/test_recipes.bats covering discovery, user-override precedence, scaffold list text/JSON, and all three official recipes.