PHPackages                             marcocesarato/php-conventional-changelog - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Utility &amp; Helpers](/categories/utility)
4. /
5. marcocesarato/php-conventional-changelog

ActiveLibrary[Utility &amp; Helpers](/categories/utility)

marcocesarato/php-conventional-changelog
========================================

Generate changelogs and release notes from a project's commit messages and metadata and automate versioning with semver.org and conventionalcommits.org

1.17.3(3mo ago)2511.3M—3.4%37[14 issues](https://github.com/marcocesarato/php-conventional-changelog/issues)[6 PRs](https://github.com/marcocesarato/php-conventional-changelog/pulls)20GPL-3.0-or-laterPHPPHP &gt;=7.1.3CI passing

Since Jan 16Pushed 1mo ago4 watchersCompare

[ Source](https://github.com/marcocesarato/php-conventional-changelog)[ Packagist](https://packagist.org/packages/marcocesarato/php-conventional-changelog)[ RSS](/packages/marcocesarato-php-conventional-changelog/feed)WikiDiscussions main Synced 1mo ago

READMEChangelog (10)Dependencies (6)Versions (75)Used By (20)

PHP Conventional Changelog
==========================

[](#php-conventional-changelog)

[![Version](https://camo.githubusercontent.com/6466921c2132e6a1af7fb136976f9a837056e10eaab132e836839e6b72e326a8/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f76657273696f6e2d312e31372e332d627269676874677265656e3f7374796c653d666f722d7468652d6261646765)](https://camo.githubusercontent.com/6466921c2132e6a1af7fb136976f9a837056e10eaab132e836839e6b72e326a8/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f76657273696f6e2d312e31372e332d627269676874677265656e3f7374796c653d666f722d7468652d6261646765)[![Requirements](https://camo.githubusercontent.com/930853237eda0cf62b89ab91b0330d3225060e6e610db5845a8376f9ca69f683/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f7068702d253345253344253230372e312e332d3446354439353f7374796c653d666f722d7468652d6261646765)](https://camo.githubusercontent.com/930853237eda0cf62b89ab91b0330d3225060e6e610db5845a8376f9ca69f683/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f7068702d253345253344253230372e312e332d3446354439353f7374796c653d666f722d7468652d6261646765)[![Conventional Commits](https://camo.githubusercontent.com/c3e90b21a1a9a25e90b61de6260313775f6f1ff5998a9ef2a0d1a87773a15d8b/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f436f6e76656e74696f6e616c253230436f6d6d6974732d312e302e302d79656c6c6f773f7374796c653d666f722d7468652d6261646765)](https://conventionalcommits.org)[![License](https://camo.githubusercontent.com/eed994762fde13efccf0531439206a3c7b19aad96760455c61141ad8f9580eaa/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f6c6963656e73652f6d6172636f636573617261746f2f7068702d636f6e76656e74696f6e616c2d6368616e67656c6f673f7374796c653d666f722d7468652d6261646765)](https://camo.githubusercontent.com/eed994762fde13efccf0531439206a3c7b19aad96760455c61141ad8f9580eaa/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f6c6963656e73652f6d6172636f636573617261746f2f7068702d636f6e76656e74696f6e616c2d6368616e67656c6f673f7374796c653d666f722d7468652d6261646765)[![GitHub](https://camo.githubusercontent.com/79a7a0225dda64f2d718544f148d7b4347db3395a37a6ff37c86ac00df981a64/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4769744875622d5265706f2d3666343263313f7374796c653d666f722d7468652d6261646765)](https://github.com/marcocesarato/php-conventional-changelog)

#### If this project helped you out, please support us with a star ⭐

[](#if-this-project-helped-you-out-please-support-us-with-a-star-star)

[![](docs/images/logo.png)](docs/images/logo.png)

Description
-----------

[](#description)

When a new release of a software project is announced, it is convenient to generate documents that let the project users know what were the changes and other relevant notes about the new project release.

This package can help to automatically generate changelog and release note files, so the developers of the project reduce the work that is necessary to finalize and check the new release of the project.

This package can generate a changelog from a project's committing history messages and metadata using composer and automate versioning with [**semver**](https://semver.org) and [**conventional-commits**](https://conventionalcommits.org).

It provides a command that can be run from the terminal, or using composer scripts, to generate a changelog file in **markdown** for the current project.

The command may take parameters that define the releases of the project that will be considered to extract the changes from the git history to generate the file. The package uses a configuration system with that permit to customize the settings you may want to have your desired changelog generated.

Look at our [CHANGELOG](CHANGELOG.md) file if you are looking for an example of a possible final result.

### How to contribute

[](#how-to-contribute)

Have an idea? Found a bug? Please raise to [ISSUES](https://github.com/marcocesarato/php-conventional-changelog/issues)or [PULL REQUEST](https://github.com/marcocesarato/php-conventional-changelog/pulls). Contributions are welcome and are greatly appreciated! Every little bit helps.

📘 Requirements
--------------

[](#-requirements)

- [php](https://www.php.net) &gt;= 7.1.3
- [git](https://git-scm.com) &gt;= 2.1.4

📖 Installation
--------------

[](#-installation)

You can install it easily with composer

`composer require --dev marcocesarato/php-conventional-changelog`

#### Scripts *(Optional)*

[](#scripts-optional)

For easy use the changelog generator or release faster your new version you can add to your `composer.json` the scripts:

> **Notes:** you can customize it according to your needs

```
{
  ...
  "scripts": {
    "changelog": "conventional-changelog",
    "release": "conventional-changelog --commit",
    "release:patch": "conventional-changelog --patch --commit",
    "release:minor": "conventional-changelog --minor --commit",
    "release:major": "conventional-changelog --major --commit"
  },
  ...
}

```

Now you can just run `composer changelog` or `composer release` (the last one will autobump the version code and commit changes) to generate your changelog.

📘 Configuration
---------------

[](#-configuration)

> **Notes:** this procedure is *optional* and permit to overwriting/merging the default settings

For customize settings you just needs to create a file named `.changelog` on the root of your project/on the working dir or use the `--config` option to specify the location of your configuration file.

> **Notes:**
>
> - When a setting on the configuration file is not necessary just omit it
> - The default ignored types are: `build`, `chore`, `ci`, `docs`, `perf`, `refactor`, `revert`, `style`, `test`
> - To allow all types just keep empty `types` and set empty `ignoreTypes`

You can have more info about reading the [config documentation](./docs/config.md).

💻 Usage
-------

[](#-usage)

The changelog generator will generate a log of changes from the date of the last tag to the current date, and it will put all commit logs in the latest version just created.

[![](docs/images/usage.gif)](docs/images/usage.gif)

> **Notes:**
>
> - Some of these options listed on examples could be used together at the same time (ex. `--first-release --commit`)
> - Auto bump of version code using the [Semantic Versioning](https://semver.org) (`MAJOR.MINOR.PATCH`) is enabled by default if not specified the release method.
>     - `MAJOR`: At least one breaking change.
>     - `MINOR`: At least one new feature.
>     - `PATCH`: Default
> - Use these options to specify the release method: `--major`, `--minor`, `--patch`, `--rc`, `--beta`, `--alpha`.

### Examples

[](#examples)

#### First version

[](#first-version)

> **Notes:** use this option only if you don't need all history changes or is the first version, else run with `--history` option

To generate your changelog for the first version run:

```
php vendor/bin/conventional-changelog --first-release
```

#### New version

[](#new-version)

To generate your changelog *(without committing files)*

```
php vendor/bin/conventional-changelog
```

#### New release (with commit and tag)

[](#new-release-with-commit-and-tag)

To generate your changelog with auto commit and auto versioning tagging run:

```
php vendor/bin/conventional-changelog --commit
```

or to amend at an existing commit you can run:

```
php vendor/bin/conventional-changelog --amend
```

#### Annotated and Signed Tags

[](#annotated-and-signed-tags)

By default, the tool creates lightweight tags. You can create annotated or GPG-signed tags:

**Create an annotated tag:**

```
php vendor/bin/conventional-changelog --commit --annotate-tag
```

**Create a GPG-signed tag** (requires GPG configuration):

```
php vendor/bin/conventional-changelog --commit --sign-tag
```

**Create an annotated tag with a custom message:**

```
php vendor/bin/conventional-changelog --commit --annotate-tag="Release version"
```

You can also configure this in your `.changelog` configuration file:

```
return [
    'annotateTag' => true,  // Create annotated tags by default
    'signTag' => true,      // Create GPG-signed tags by default
];
```

> **Note:** GPG-signed tags (`--sign-tag`) are automatically annotated, so you don't need to use both options together.

#### History

[](#history)

To generate your changelog with the entire history of changes of all releases

> **Warn:** this operation will overwrite the `CHANGELOG.md` file if it already exists

```
php vendor/bin/conventional-changelog --history
```

#### Date range

[](#date-range)

To generate your changelog from a specified date to another specified date

```
php vendor/bin/conventional-changelog --from-date="2020-12-01" --to-date="2021-01-01"
```

#### Tag range

[](#tag-range)

To generate your changelog from a specified tag to another specified tag

```
php vendor/bin/conventional-changelog --from-tag="v1.0.2" --to-tag="1.0.4"
```

#### Specific version

[](#specific-version)

To generate your changelog with a specific version code

```
php vendor/bin/conventional-changelog --ver="2.0.1"
```

### Commands List

[](#commands-list)

> **Info:** You can have more info about running `php vendor/bin/conventional-changelog --help`

```
Description:
  Generate changelogs and release notes from a project's commit messagesand metadata and automate versioning with semver.org and conventionalcommits.org

Usage:
  changelog [options] [--] []

Arguments:
  path                               Specify the path directory where generate changelog

Options:
      --config=CONFIG                Specify the configuration file path
  -c, --commit                       Commit the new release once changelog is generated
  -a, --amend                        Amend commit the new release once changelog is generated
      --commit-all                   Commit all changes the new release once changelog is generated
      --first-release                Run at first release (if --ver isn't specified version code it will be 1.0.0)
      --from-date=FROM-DATE          Get commits from specified date [YYYY-MM-DD]
      --to-date=TO-DATE              Get commits last tag date (or specified on --from-date) to specified date [YYYY-MM-DD]
      --from-tag=FROM-TAG            Get commits from specified tag
      --to-tag=TO-TAG                Get commits last tag (or specified on --from-tag) to specified tag
      --major                        Major release (important changes)
      --minor                        Minor release (add functionality)
      --patch                        Patch release (bug fixes) [default]
      --rc                           Release candidate
      --beta                         Beta release
      --alpha                        Alpha release
      --ver=VER                      Specify the next release version code (semver)
      --history                      Generate the entire history of changes of all releases
      --no-verify                    Bypasses the pre-commit and commit-msg hooks
      --no-tag                       Disable release auto tagging
      --no-change-without-commits    Do not apply change if no commits
      --annotate-tag[=ANNOTATE-TAG]  Make an unsigned, annotated tag object once changelog is generated [default: false]
      --sign-tag                     Make a GPG-signed tag object once changelog is generated
      --merged                       Only include commits whose tips are reachable from HEAD
  -h, --help                         Display help for the given command. When no command is given display help for the changelog command

```

###  Health Score

64

—

FairBetter than 99% of packages

Maintenance83

Actively maintained with recent releases

Popularity59

Moderate usage in the ecosystem

Community43

Growing community involvement

Maturity63

Established project with proven stability

 Bus Factor1

Top contributor holds 83% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~31 days

Recently: every ~287 days

Total

60

Last Release

118d ago

PHP version history (3 changes)v1.0.0PHP &gt;=5.5

v1.1.0PHP &gt;=7.2.5

v1.4.3PHP &gt;=7.1.3

### Community

Maintainers

![](https://avatars.githubusercontent.com/u/36447518?v=4)[Marco Cesarato](/maintainers/marcocesarato)[@marcocesarato](https://github.com/marcocesarato)

---

Top Contributors

[![marcocesarato](https://avatars.githubusercontent.com/u/36447518?v=4)](https://github.com/marcocesarato "marcocesarato (278 commits)")[![Copilot](https://avatars.githubusercontent.com/in/1143301?v=4)](https://github.com/Copilot "Copilot (17 commits)")[![renovate[bot]](https://avatars.githubusercontent.com/in/2740?v=4)](https://github.com/renovate[bot] "renovate[bot] (9 commits)")[![aprat84](https://avatars.githubusercontent.com/u/39481795?v=4)](https://github.com/aprat84 "aprat84 (3 commits)")[![juckerf](https://avatars.githubusercontent.com/u/7573298?v=4)](https://github.com/juckerf "juckerf (3 commits)")[![jaymeh](https://avatars.githubusercontent.com/u/18261676?v=4)](https://github.com/jaymeh "jaymeh (2 commits)")[![william-suppo](https://avatars.githubusercontent.com/u/6459452?v=4)](https://github.com/william-suppo "william-suppo (2 commits)")[![attiks](https://avatars.githubusercontent.com/u/105144?v=4)](https://github.com/attiks "attiks (2 commits)")[![brunob](https://avatars.githubusercontent.com/u/418064?v=4)](https://github.com/brunob "brunob (2 commits)")[![ChrisToxz](https://avatars.githubusercontent.com/u/28065282?v=4)](https://github.com/ChrisToxz "ChrisToxz (2 commits)")[![gitrequests](https://avatars.githubusercontent.com/u/12627650?v=4)](https://github.com/gitrequests "gitrequests (2 commits)")[![kachnitel](https://avatars.githubusercontent.com/u/4067705?v=4)](https://github.com/kachnitel "kachnitel (2 commits)")[![aatumaykin](https://avatars.githubusercontent.com/u/704282?v=4)](https://github.com/aatumaykin "aatumaykin (1 commits)")[![kishieel](https://avatars.githubusercontent.com/u/49162745?v=4)](https://github.com/kishieel "kishieel (1 commits)")[![Likhachev](https://avatars.githubusercontent.com/u/5443837?v=4)](https://github.com/Likhachev "Likhachev (1 commits)")[![guanguans](https://avatars.githubusercontent.com/u/22309277?v=4)](https://github.com/guanguans "guanguans (1 commits)")[![mottihoresh](https://avatars.githubusercontent.com/u/1007293?v=4)](https://github.com/mottihoresh "mottihoresh (1 commits)")[![fabianoroberto](https://avatars.githubusercontent.com/u/1713601?v=4)](https://github.com/fabianoroberto "fabianoroberto (1 commits)")[![romm](https://avatars.githubusercontent.com/u/6342901?v=4)](https://github.com/romm "romm (1 commits)")[![Sh4dow](https://avatars.githubusercontent.com/u/507683?v=4)](https://github.com/Sh4dow "Sh4dow (1 commits)")

---

Tags

autoversionautoversioningchangelogcommitcommitscomposerconventionconventionalconventional-changelogconventional-changelog-presetconventional-commitconventional-commitsgenerationgithistoryphpphp-conventional-changelogphp-convetional-commitsemvertoolphphistorygittaggenerationcommitchangelogcommitsconventional-commitsconventionreadmeconventionalconventional-changelogconventional-commitconventionalcommitsconventional-changelog-preset

###  Code Quality

TestsPHPUnit

Code StylePHP CS Fixer

### Embed Badge

![Health badge](/badges/marcocesarato-php-conventional-changelog/health.svg)

```
[![Health](https://phpackages.com/badges/marcocesarato-php-conventional-changelog/health.svg)](https://phpackages.com/packages/marcocesarato-php-conventional-changelog)
```

###  Alternatives

[ramsey/conventional-commits

A PHP library for creating and validating commit messages according to the Conventional Commits specification. Includes a CaptainHook action!

1931.2M122](/packages/ramsey-conventional-commits)[guanguans/ai-commit

Automagically generate conventional git commit message with AI. - 使用 AI 自动生成约定式 git 提交信息。

39231.2k10](/packages/guanguans-ai-commit)[nilportugues/php_backslasher

Adds all PHP internal functions to its namespace by adding backslash to them. Improves the application's performance when OPCache is on.

889.3k18](/packages/nilportugues-php-backslasher)[nilportugues/php_todo

Looks into the code using a user-defined list of to-do phrases and stops commit if the total amount increased or is above a threshold.

1210.0k](/packages/nilportugues-php-todo)[wcm/git-php-hooks-library

A collection of Git PHP Hooks

1210.1k3](/packages/wcm-git-php-hooks-library)[salehhashemi/laravel-intelli-git

An intelligent Git helper package for Laravel applications. It utilizes OpenAI's GPT to analyze your Git repository, providing features such as automatic generation of commit messages based on staged changes.

131.5k](/packages/salehhashemi-laravel-intelli-git)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
