Release notes people actually read
Most release notes are either a wall of commit messages or a single vague line that says “bug fixes and improvements.” Good notes sit in between: grouped, scannable, and written for the person on the other side of the update. This builder takes your raw list of changes and formats them into clean release notes following the widely used “Keep a Changelog” structure — in Markdown or plain text.
How it works
You enter the version and date, then drop your changes into labeled buckets: new features, improvements, bug fixes, deprecations, known issues, and upgrade notes. The tool renders each non-empty section with a heading and bullet list, skipping any section you leave blank so the output stays tight.
It also validates the version against semantic versioning (MAJOR.MINOR.PATCH). If you type something that is not valid semver — like v2 or 2.4 — it flags it, because consistent version numbers are what let users and tools reason about the size of a change.
When to use each section
New features are things users can now do that they couldn’t before. Lead with the user capability, not the implementation: “You can now export reports as CSV” rather than “Added export endpoint.”
Improvements are things that already existed but work better — faster, easier, more reliable. Quantify when possible: “Import speed improved by roughly 40%” is more useful than “import is faster.”
Bug fixes should name the symptom the user experienced, not the internal cause: “Fixed: uploads silently failed when the filename contained a space” tells users whether this affects them; “Fixed null pointer in upload handler” does not.
Deprecations exist to give users time to migrate. Name the deprecated item, the version it will be removed, and what to use instead — all three, or the deprecation notice is incomplete. For example: “The v1/users endpoint is deprecated and will be removed in v3.0. Use v2/users instead.”
Known issues are the most trust-building section. A changelog that admits two things are still broken is one users return to; one that pretends everything is fixed is one users stop checking.
Upgrade notes contain anything a user must actively do when updating: running a migration command, changing a config key, or updating a dependency. These are action items, not descriptions.
Semver quick reference
| Change type | Version bump |
|---|---|
| Breaking API change | MAJOR (1.x.x → 2.0.0) |
| New backward-compatible feature | MINOR (1.2.x → 1.3.0) |
| Backward-compatible bug fix | PATCH (1.2.3 → 1.2.4) |
The tool warns when the bump level seems inconsistent with what you put in each section — for example, if you added breaking changes but only bumped PATCH.
Tips
- Lead each bullet with what changed for the user, not the implementation detail. “Projects now load 2× faster” beats “Refactored the project loader.”
- Put migration steps in upgrade notes with the exact command. Anything a user must do belongs here, not buried in features.
- Bump the version correctly: a breaking change is a MAJOR bump even if the internal change felt small. Users rely on semver to decide whether they can update safely.