← Release Notes Generator

How to write a changelog people read

A changelog answers one question for the person upgrading: what changes for me? A list of commit subjects usually answers a different one (what did the team do?). The fix is mostly editorial: keep what changes behaviour, say it from the user's side, and put anything that can break them first.

What goes in, and what stays out

SectionInclude?Why
Breaking changesAlways, firstThe only section a cautious upgrader must read
Features, Fixes, Performance, SecurityYesUser-visible behaviour
DocsIf notableNew guides help adopters
Refactor, tests, CI, choresUsually skipNo change for the user (the CLI has --skip)

Conventional Commits make it mechanical

Write each subject as type(scope): description, with ! after the type or a BREAKING CHANGE: footer when behaviour breaks. Then the changelog is a grouping problem, not a writing problem, and the generator can also suggest the version.

Picking the next version (Semantic Versioning)

  1. Any breaking change: major (minor while you are below 1.0.0, by common convention).
  2. Otherwise any new feature: minor.
  3. Otherwise only fixes: patch.

The tool's suggestion comes from commit messages, so it is only as honest as they are. A fix that changes documented behaviour is breaking whatever its prefix says.

If your history is a mess

Paste it anyway. Subjects that start with Add, Fix, Update, Refactor and similar verbs are sorted into sections, everything else lands under "Other changes", and the page tells you how many were guessed. Edit the result by hand: a human pass of five minutes beats a perfect convention nobody follows.

Using the generator

Paste commits into the tool or run node cli.mjs --from v1.2.0 in your repository, review the output, and commit it to CHANGELOG.md. For GitHub, choose the GitHub style and paste it into the release description.