Your first repo¶
This walks through a single interactive run of:
keel new --recipe go-service
Under the hood, a keel new run is a small state machine. Here's what happens,
step by step:
-
Resolve the recipe.
keellooks upgo-service, expands it into its ordered list of modules (base-layout,go-mod,taskfile-go,lint-go,test-go,security-go,dep-bots-go,release-go,spell,license,governance,contributing-go,community-templates), and loads each module's manifest. -
Ask the questions. The built-in core questions (repo name, module path, author name and email, license, visibility, provider) are merged with each module's own questions, then asked in a typed wizard. Press through the prompts — defaults come from your config and
git configwhere available. -
Build the render plan. Every module's
filesrules are expanded — templated with Gotext/templateand gated by optionalwhenconditions — into one combined set of destination files. If two modules would write the same path, the plan fails early rather than silently clobbering. -
Detect state.
keelchecks whether the target directory already exists and whether the remote already exists, then chooses how to materialize (see Repo states). For a brand-new repo, both are absent — a fresh scaffold. -
Materialize. The plan is written to disk. For a fresh repo this is a single atomic write;
keelnever deletes a file it didn't create. -
git init + commit.
keelinitializes git on branchmain, sets the author identity, writes.scaffold.lock(recording the recipe, modules, their versions, your answers, and per-file hashes), stages everything, and makes the first commitchore: scaffold with keel. -
Create the remote (optional). If you answered
create_remote: trueand aprovider,keelcreates the repository on that provider, wiresorigin, and pushes. When both local and remote already have history,keelrefuses to force anything and prints the fetch/rebase/push steps for you to run. -
Summary.
keelprints what it did and any next steps.
What landed¶
You now have a ready-to-push Go service: a module layout with a cmd/<name>
entrypoint, a Taskfile, golangci-lint v2, a race/coverage test workflow, CodeQL
+ govulncheck + dependency-review security scans, Dependabot/Renovate, a
release-please + GoReleaser pipeline, a typos spell-check, and the governance
files a public repo needs — LICENSE, CONTRIBUTING.md, SECURITY.md,
CODEOWNERS, issue forms and a PR template — all committed.
See What you get for the full directory tree a
go-service scaffold produces.