conventional-changelog-angular, conventional-changelog-cli, and standard-version are tools designed to automate semantic versioning and changelog generation based on commit message standards. conventional-changelog-angular defines the specific rules for parsing Angular-style commit messages. conventional-changelog-cli is a command-line tool that generates changelog files using those rules. standard-version is a higher-level utility that combines version bumping, changelog generation, and git tagging into a single workflow. Together, they help teams maintain clear release history and consistent version numbers without manual effort.
Managing release history and version numbers manually is error-prone and time-consuming. The conventional-changelog ecosystem offers tools to automate this based on commit messages. While conventional-changelog-angular, conventional-changelog-cli, and standard-version are often used together, they serve different layers of the release process. Let's break down how they differ and when to use each.
conventional-changelog-angular is a configuration preset.
// conventional-changelog-angular: Used as a config preset
const config = {
preset: 'angular',
// Or explicitly require the package
config: require('conventional-changelog-angular')
};
conventional-changelog-cli is a generation tool.
# conventional-changelog-cli: Generate changelog only
npx conventional-changelog-cli -p angular -i CHANGELOG.md -s
standard-version is a complete workflow utility.
npm version for local releases.# standard-version: Full release workflow
npx standard-version
How you configure these tools depends on how much control you need over the output.
conventional-changelog-angular requires no setup if used as a string preset.
// conventional-changelog-angular: Customizing rules
module.exports = {
parserOpts: {
headerPattern: /^(\w*)(?:\((.*)\))?\:(.*)$/,
headerCorrespondence: ['type', 'scope', 'subject']
}
};
conventional-changelog-cli accepts flags for input and output control.
# conventional-changelog-cli: Custom config via flags
npx conventional-changelog-cli -p angular -i CHANGELOG.md -s -r 0
standard-version uses a .versionrc file for complex setups.
// standard-version: .versionrc configuration
{
"types": [
{ "type": "feat", "section": "Features" },
{ "type": "fix", "section": "Bug Fixes" }
],
"skip": {
"tag": true
}
}
The biggest difference lies in how these tools interact with git and version numbers.
conventional-changelog-angular does not touch git.
// conventional-changelog-angular: No git interaction
// Used internally to parse commit messages
const commit = { hash: 'abc123', message: 'feat: add login' };
// Parser logic applied here
conventional-changelog-cli reads git history but does not write commits.
CHANGELOG.md file only.git add and git commit separately.# conventional-changelog-cli: Manual git steps required
npx conventional-changelog-cli -p angular -i CHANGELOG.md -s
git add CHANGELOG.md
git commit -m "docs: update changelog"
standard-version handles git commits and tags automatically.
# standard-version: Automatic git management
npx standard-version
# Automatically runs: git add, git commit, git tag
Integration into continuous deployment pipelines varies by tool.
conventional-changelog-angular is a dependency in your pipeline script.
// conventional-changelog-angular: In CI script
const conventionalChangelog = require('conventional-changelog');
const config = require('conventional-changelog-angular');
// Used to calculate next version
conventional-changelog-cli runs as a step in your build job.
# conventional-changelog-cli: In GitHub Actions
- name: Generate Changelog
run: npx conventional-changelog-cli -p angular -i CHANGELOG.md -s
standard-version is often replaced by semantic-release in full CI/CD.
# standard-version: In CI (less common for full auto)
- name: Release
run: npx standard-version
env:
GIT_AUTHOR_NAME: "CI Bot"
| Feature | conventional-changelog-angular | conventional-changelog-cli | standard-version |
|---|---|---|---|
| Primary Role | Config Preset | Changelog Generator | Release Workflow |
| Bumps Version | β No | β No | β Yes |
| Commits Git | β No | β No | β Yes |
| Generates Changelog | β No (Provides rules) | β Yes | β Yes |
| Best For | Custom Scripts | Modular Pipelines | Local Manual Releases |
conventional-changelog-angular is the rulebook π β it defines what a feat or fix means. You rarely use it alone, but it powers the other tools.
conventional-changelog-cli is the writer βοΈ β it drafts the changelog based on the rules. Use this if you want to control versioning separately.
standard-version is the project manager π β it handles the version number, the changelog, and the git commit in one go. It is excellent for local workflows where a developer triggers the release.
Final Thought: For fully automated CI/CD pipelines, many teams now prefer semantic-release over standard-version. However, if you need manual control over when a release happens, standard-version remains a solid choice. Use conventional-changelog-cli if you only need to update documentation without changing versions.
Choose conventional-changelog-angular when you need the specific rule set for parsing Angular-style commit messages within a larger tooling setup. It is not a standalone tool but a dependency that defines how commit types like feat or fix map to version bumps. Use this if you are building a custom release script or configuring another tool that requires a preset. It is essential for enforcing consistency in commit history across teams using the Conventional Commits specification.
Choose conventional-changelog-cli when you only need to generate or update a changelog file without automatically bumping versions or managing git tags. It offers granular control over the changelog generation process and fits well into custom CI/CD pipelines. This tool is ideal if you handle version numbering separately or need to regenerate history without altering git state. It works best for projects that require a modular approach to release automation.
Choose standard-version when you want a single command to handle version bumping, changelog generation, and git committing locally. It replaces the standard npm version workflow and is perfect for teams that prefer manual release triggers over fully automated CI/CD. This package is suitable for libraries or apps where a developer explicitly cuts a release rather than relying on continuous deployment. Note that for fully automated CI/CD pipelines, many teams now prefer semantic-release, but standard-version remains robust for local workflows.
conventional-changelog angular preset.
Issues with the convention itself should be reported on the Angular issue tracker.
# pnpm
pnpm add -D conventional-changelog-angular
# yarn
yarn add -D conventional-changelog-angular
# npm
npm i -D conventional-changelog-angular
Use with conventional-changelog by passing the preset name with -p:
conventional-changelog -p angular
For the commit convention details and preset options, visit the documentation website.