This guide walks through installing ReleaseKit, verifying your setup with a dry run, and wiring it into CI.
- Node.js 22+
- A git repository using Conventional Commits
- At least one git tag marking a previous release (e.g.
v0.0.0), or no tags at all for a first release
Install the unified CLI:
npm:
npm install -g @releasekit/releasepnpm:
pnpm add -g @releasekit/releaseThis provides the releasekit command. Individual tools (releasekit-version, releasekit-notes, releasekit-publish) are also available if you need them independently. See the CLI reference for every command and flag.
Run the init command to create a releasekit.config.json with sensible defaults:
releasekit initOr create it manually. The minimal config for a single-package npm project:
Comments (
//and/* … */) and trailing commas are supported. Name the filereleasekit.config.jsoncif you want your editor to accept comments without warnings — both filenames are auto-discovered.
{
"$schema": "https://goosewobbler.github.io/releasekit/schema.json",
"notes": {
"changelog": { "mode": "root" }
},
"publish": {
"npm": { "enabled": true }
}
}For a scoped package (@scope/name), add "access": "public" — npm defaults scoped packages to restricted:
{
"publish": {
"npm": { "enabled": true, "access": "public" }
}
}The $schema line enables autocompletion and validation in editors that support JSON Schema.
For a monorepo with packages under packages/, write a changelog per package:
{
"$schema": "https://goosewobbler.github.io/releasekit/schema.json",
"notes": {
"changelog": { "mode": "packages" }
},
"publish": {
"npm": { "enabled": true }
}
}Before making any real changes, preview what ReleaseKit would do:
releasekit release --dry-runThis runs the full pipeline — version analysis, changelog generation, publish simulation — without writing any files, creating git tags, or publishing packages. Check the output to confirm the version bump and changelog entries look correct.
If nothing is detected, make sure:
- Your commits follow the Conventional Commits format (
feat:,fix:, etc.) - There is at least one commit since the last git tag
When the dry run looks right, run the real thing:
releasekit releaseThis will:
- Bump version in
package.json(andCargo.tomlif present) - Generate / update
CHANGELOG.md - Create a git commit and tag
- Publish to npm
- Push to remote
- Create a GitHub Release (draft by default)
npm authentication — for a local run you need to be logged in to npm:
npm loginOr set NODE_AUTH_TOKEN in your environment if you prefer token-based auth:
NODE_AUTH_TOKEN=npm_... releasekit releaseGitHub Release — set GITHUB_TOKEN in your environment:
GITHUB_TOKEN=ghp_... releasekit releaseIn CI, both tokens are typically available as secrets or via OIDC — see the CI setup guide for details.
The most common setup triggers a release on every push to main. See the CI setup guide for complete GitHub Actions workflows covering:
- Push-to-main releases
- Label-based triggers (release only when a PR has a
bump:patch/minor/majorlabel) - npm OIDC trusted publishing (no
NPM_TOKENsecret required) - PR preview comments
- Prerelease workflows
# .github/workflows/release.yml
name: Release
on:
push:
branches: [main]
permissions:
contents: write
id-token: write
jobs:
release:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
with:
fetch-depth: 0
- uses: pnpm/action-setup@v6
- uses: actions/setup-node@v6
with:
node-version: '24'
cache: pnpm
registry-url: 'https://registry.npmjs.org'
- run: pnpm install --frozen-lockfile
- run: pnpm exec releasekit release
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}Using npm? Drop the
pnpm/action-setupstep, setcache: npmonsetup-node, and replacepnpm install --frozen-lockfilewithnpm ciandpnpm execwithnpx.
If you use the label-based trigger, create the required bump:*, channel:*, and release:skip labels with releasekit labels sync — see Create the labels.
- Architecture — pipeline design, mental model, and how everything fits together
- Release taxonomy — groups vs prerequisites vs selection, for monorepos with coupled packages
- CI setup guide — complete workflow recipes
- CLI reference — every command and flag
- Configuration reference — all
releasekit.config.jsonoptions - Troubleshooting — symptom-indexed error guide
- @releasekit/notes — LLM providers — add AI-enhanced release notes
- @releasekit/notes — configuration — changelog and release notes options
- @releasekit/publish — GitHub Releases — release body options
- Rust / Cargo guide — Rust crate versioning and crates.io publishing
- Migration guide — from semantic-release or changesets