Skip to content

Recipes

A recipe is a named composition of modules — a list of small, single-purpose modules that keel assembles into one repository. You pick a recipe; keel resolves it into its ordered modules, asks their combined questions, and renders the result.

The built-in recipes

keel ships these recipes embedded in the binary:

Recipe Language Modules
go-service go base-layout, go-mod, taskfile-go, lint-go, test-go, security-go, dep-bots-go, release-go, spell, license, governance, contributing-go, community-templates
go-library go same module list as go-service, with archetype: library — no cmd/, no GoReleaser, no task build
go-cli go go-service's list plus cli-go, with archetype: cli — a cobra root command, a version subcommand wired to the release ldflags, and a command test
go-analyzer go go-service's list plus analyzer-go, with archetype: cli — a go/analysis analyzer, a singlechecker binary, and a working analysistest corpus

The go-analyzer corpus under analyzer/<pkg>/testdata/src/ is GOPATH-shaped on purpose: that is the layout analysistest expects. It is excluded from task format, because analysistest matches diagnostics by line and its fixtures are frequently non-canonical deliberately — being badly formed is often exactly what the analyzer flags. | rust-service | rust | base-layout, cargo-mod, taskfile-rust, lint-rust, test-rust, security-rust, release-rust, dep-bots-rust, spell, license, governance, contributing-rust, community-templates |

go-service is the default — keel new with no --recipe uses it. They share the language-agnostic base-layout and spell modules; everything else is the per-language variant.

Listing what's available

keel list

keel list prints the live set of recipes and modules known to your binary — the authoritative answer for the version you have installed.

Running a recipe

keel new --recipe go-service
keel new --recipe go-library
keel new --recipe rust-service

See the per-module breakdown in the Module catalog, and What you get for the directory tree a recipe produces.

Custom recipes

--recipe also accepts a file path, so you can compose your own recipe mixing built-in modules with external ones:

keel new --recipe ./my-recipe.yaml

See Authoring → Recipes for how to write one.