Changelog generator in Keep a Changelog format

Enter the version, the date and one line per change under Added, Changed, Fixed and the other headings, and the tool writes a CHANGELOG.md entry in the Keep a Changelog 1.1.0 layout.

Live demo · real result from this tool

CHANGELOG.md

# Changelog All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). ## [Unreleased] ## [1.4.0] - 2026-10-02 ### Added - CSV export- Support for multi-page invoices ### Fixed - Totals with a thousands separator were parsed as two numbers [unreleased]: https://github.com/asharao/invoice-parser/compare/v1.4.0...HEAD
[1.4.0]: https://github.com/asharao/invoice-parser/compare/v1.3.2...v1.4.0

Newest release goes at the top. Entries are for humans: describe the effect of a change, not the commit.

Processed on your device — nothing is uploaded.

How to use the changelog generator

  1. Type the Version (for example 1.4.0) and pick the Release date.
  2. Enter the Previous version (for compare link) and the GitHub repository (owner/name) if you want links at the bottom.
  3. Write one change per line in the boxes Added, Changed, Deprecated, Removed, Fixed and Security. Leave unused boxes empty.
  4. Choose whether to Include file header and Keep an [Unreleased] section.
  5. Copy the result into CHANGELOG.md at the root of your repository.

What it does and when to use it

A changelog tells users what changed in each release without reading the Git history. The Keep a Changelog convention groups changes under six fixed headings and lists the newest release first. This tool produces that structure, so every release in your file looks the same.

Use it when you publish a release or tag a version, or when you start a changelog for a project that never had one. Commits written with the conventional commit generator make the notes easier to collect. The version should match the version field from the package.json generator, and the file sits next to the LICENSE from the licence generator.

How it works

The tool removes a leading v from the version and checks it with the official Semantic Versioning pattern. It then writes ## [version] - date and one ### Heading per non-empty box, in the fixed order Added, Changed, Deprecated, Removed, Fixed, Security. If all boxes are empty, it writes _No changes listed yet._.

With a repository set, it adds reference links. With a previous version, the link compares the two tags; without one, it points to the release page of the new tag.

Worked examples

The default entry. Version 1.4.0, previous 1.3.2, two Added lines and one Fixed line. The output includes:

## [1.4.0] - 2026-10-02

### Added

- CSV export
- Support for multi-page invoices

and the link line [1.4.0]: https://github.com/asharao/invoice-parser/compare/v1.3.2...v1.4.0.

A major release with no previous version. Version v2.0.0, date 2026-11-03, header and Unreleased off, Changed Minimum Node.js version is now 22, Removed Node 20 support. The v is dropped from the heading, Changed comes before Removed, and the link becomes [2.0.0]: https://github.com/asharao/invoice-parser/releases/tag/v2.0.0.

A version that is not semver. Version 2.1 returns the message ““2.1” is not a semantic version (MAJOR.MINOR.PATCH, e.g. 1.4.0).” and no file.

Limits and tips

  • One release per run. The tool does not read or merge an existing CHANGELOG.md.
  • The date field does not update itself. Check it before you copy.
  • Links are GitHub-only. For GitLab or another host, edit the link lines.

Frequently asked questions

Why does the tool reject my version number?
It checks the version against Semantic Versioning 2.0.0, which needs three numbers, MAJOR.MINOR.PATCH, such as 1.4.0. Pre-release and build parts like 2.0.0-beta.1 are accepted. "2.1" or "release-5" are not. A leading "v" is removed for you.
Do the compare links work with my tags?
The links assume your Git tags start with "v", for example v1.3.2 and v1.4.0. If your tags are plain numbers, remove the "v" from the two link lines by hand.
Should I paste my commit messages into the change boxes?
Better not. A changelog is for your users, so describe the effect, such as "CSV export". Commit messages describe how the code changed.
What is the Unreleased section for?
It collects merged changes that are not released yet. At the next release, move them under a new version heading.
Do I paste the whole output each time?
Only the first time. Later, untick Include file header, paste the new block above the previous release and add its link line at the bottom.

Written by the ToolsRift team · Last updated

Pages are drafted with AI assistance and checked by automated tests. How we write and check pages.

Was this tool useful?

Report a problem

Start typing to search every tool.

↑ ↓ to moveEnter to openEsc to close