gh repo create my-new-repo --template TitusKirch/scaffoldThat's it. Click Use this template (or use gh), edit a handful of placeholders, and the meta layer — lint, format, commit hooks, CI, CodeQL, Dependabot, release-please — is already wired up.
- 🟢 Node + pnpm pinned —
.nvmrc(Node 24),.npmrc(pnpm 11 with sane defaults),package.jsonwithpackageManager. - 🧹 Lint & format via oxc —
.oxlintrc.json,.oxfmtrc.json, singlepnpm checkgate. - 🪝 Commit hooks — Husky +
lint-staged+commitlintenforcing Conventional Commits. - 🤖 Dependency PRs — Dependabot (npm weekly, actions monthly) +
taze.config.jsfor interactive upgrades. - 🔁 release-please — full workflow + config + manifest so the new repo can publish from its first commit.
- 🛡️ GitHub workflows —
ci.yml(lint + format check on PR),codeql.yml(push/PR + weekly). - 📋 Issue / PR templates — bug report, feature request, question (
.ymlforms) + PR checklist. - 📄 Standard meta —
LICENSE,CODE_OF_CONDUCT.md,CONTRIBUTING.md,SECURITY.md.
The actual project code can be anything — PHP, Go, Rust, Vue, plain shell. scaffold only owns the meta layer that sits on top.
After clicking Use this template:
-
Clone your new repo.
-
Replace the placeholders listed in Customising the template.
-
Reset release-please as described in Resetting release-please (only if you want to start at
v0.0.0). -
pnpm install— Husky activates the hooks via thepreparescript. -
Add your project code and ship the first commit:
git commit -m "chore: initial commit from scaffold"
Every file below references TitusKirch/scaffold, the maintainer's name, or the maintainer's email. Search-and-replace these to your repo's identity before the first push.
| File | Replace |
|---|---|
package.json |
name, description, homepage, bugs.url, repository.url, author |
README.md |
Project title, tagline, hook snippet, every TitusKirch/scaffold link |
LICENSE |
Copyright year + holder |
CODE_OF_CONDUCT.md |
Enforcement contact email |
CONTRIBUTING.md |
Every TitusKirch/scaffold link, the development setup section |
SECURITY.md |
Advisory URL, contact email, scope wording |
.github/ISSUE_TEMPLATE/bug_report.yml, feature_request.yml, question.yml |
Links pointing to TitusKirch/scaffold |
.github/pull_request_template.md |
Example commit message in the title hint |
release-please-config.json |
packages["."]["package-name"] |
CLAUDE.md |
Delete and regenerate with /init in Claude Code — it's scaffold-specific |
Tip
A quick grep -rn "TitusKirch/scaffold" . catches every reference in one sweep.
scaffold ships with an initial manifest pinned at 0.0.0. For most cases you can leave it alone — release-please will simply propose a first release PR after your first conventional commit on main. If you want a truly clean slate:
-
Manifest — make sure
.release-please-manifest.jsonis{ ".": "0.0.0" }(the default). -
Changelog — delete
CHANGELOG.mdif your fresh repo somehow inherited one. -
Config — update
release-please-config.json→packages["."]["package-name"]to your repo name. -
Workflow permissions — in Settings → Actions → General → Workflow permissions, enable Read and write permissions so release-please can open its PR.
-
Tags & releases (optional) — if you copied the repo with history, drop old tags:
git tag -l | xargs -r git tag -d…and clear any stale entries on the GitHub Releases tab.
-
First commit — push a Conventional Commit on
main(feat: …,fix: …). release-please opens the initial release PR; merge it and your first tagged release ships.
Single word, brandable, language-neutral. Future stack-specific templates can sit next to it as scaffold-laravel, scaffold-nuxt, etc.
PRs welcome. Conventional Commits required (enforced via commitlint). Husky runs the project's linters/formatters on git commit.
Tip
Run pnpm check:fix before pushing — CI will catch what husky missed.
See CONTRIBUTING.md for the full workflow.
Semantic Versioning via release-please — see CHANGELOG.md.