Introduction
standard-changelog is conventional-changelog with the Angular commit convention preset built in. It reads your git history and turns it into a CHANGELOG.md, grouping commits into sections like Features and Bug Fixes.
The only difference from conventional-changelog is that there is no preset to install or choose — standard-changelog always uses the Angular preset. You just write commit messages that follow the convention, and the tool assembles the release notes for you.
Quick start
Section titled “Quick start”-
Install
standard-changelog:pnpm add -D standard-changelognpm i -D standard-changelogyarn add -D standard-changelog -
Make commits following the Angular commit convention as you work:
feat(api): add async write() generatorfix(cli): resolve config path relative to cwdperf(parser): cache compiled header regex -
Run
standard-changelog:pnpm standard-changelognpx standard-changelogyarn standard-changelogAdd
--stdoutto print the result to the terminal instead of writing the file. -
Get your changelog. A new section is prepended to
CHANGELOG.md(existing entries are kept), using theversionfrom yourpackage.json:CHANGELOG.md # [1.1.0](https://github.com/acme/app/compare/v1.0.0...v1.1.0) (2026-07-01)### Features* **api:** add async write() generator ([0f7e2c1](https://github.com/acme/app/commit/0f7e2c1a9d3e4b5c6f7089abcdef0123456789ab))### Bug Fixes* **cli:** resolve config path relative to cwd ([a3b9d84](https://github.com/acme/app/commit/a3b9d8472e1f0c9b8a7d6e5f4c3b2a1908f7e6d5))### Performance Improvements* **parser:** cache compiled header regex ([c1d2e3f](https://github.com/acme/app/commit/c1d2e3f4a5b6c7d8e9f0a1b2c3d4e5f6a7b8c9d0))
By default the version comes from the closest package.json, only commits made since the last semver tag are included, and the result is written to CHANGELOG.md. When package.json has a repository field, versions and commit hashes link to your git host (as above); without it, they are plain text.
Common tasks
Section titled “Common tasks”Regenerate the whole changelog
Section titled “Regenerate the whole changelog”The first time you adopt the tool, generate notes for every release at once. --release-count 0 (or -r 0) rebuilds the full history and overwrites the output file:
pnpm standard-changelog -r 0npx standard-changelog -r 0yarn standard-changelog -r 0Generate for a specific range
Section titled “Generate for a specific range”Limit generation to a commit range with --from and --to (each accepts a tag or SHA):
pnpm standard-changelog --from v1.0.0 --to HEADnpx standard-changelog --from v1.0.0 --to HEADyarn standard-changelog --from v1.0.0 --to HEADProgrammatic usage
Section titled “Programmatic usage”Prefer to generate changelogs in code? The same result is available through the JS API:
import { StandardChangelog } from 'standard-changelog'
const generator = new StandardChangelog(process.cwd()) .readPackage()
for await (const chunk of generator.write()) { process.stdout.write(chunk)}