# Releasing kibble
Releases are tag-triggered. Prebuilt binaries + installers are built by
`.github/workflows/release.yml` (cargo-dist); the crates.io publish is manual.
## Cut a release
1. Bump `version` in `Cargo.toml` (semver).
2. Update `CHANGELOG.md`.
3. Commit, then tag and push:
```bash
git tag vX.Y.Z
git push origin main --tags
```
The release workflow cross-compiles the configured targets and publishes a
GitHub Release with binaries, `sha256` checksums, and the `curl|sh` /
PowerShell installers.
4. **First release only:** after it completes, check which targets built. Drop
any that failed from `dist-workspace.toml` and the README OS
list, then commit.
## Publish to crates.io
Requires a crates.io API token in `CARGO_REGISTRY_TOKEN` (or `cargo login`).
```bash
cargo publish --dry-run # verify it packages + compiles from the tarball
cargo publish # irreversible — permanently publishes this version
```
`cargo install kibble` works once published. (`assets/` is excluded from the
package; `examples/notes/*.md` + `kibble.toml.example` ship because they are
`include_str!` build dependencies.)