An elegant changelog generator.

Focus on Elegant/Simple/Efficient/Scalable

Feel the magic online


  • [x] Cross-platform support
  • [x] Generation for local/Remote git repositories
  • [x] Preset template for generation
  • [x] Custom template file
  • [x] Conventional Commits Parser
  • [x] Generate multiple versions of change logs
  • [x] Github Action


$ whatchanged --help
whatchanged - a cli to generate changelog from git project

  whatchanged [OPTIONS] [version...]

  [version...]  Optional version or version range.
                  If you do not specify the version, then it will automatically
                  generate a change log from "HEAD~<latest version>" or
                  "HEAD~<earliest commit>" or "<latest version>-<last version>"
                2.single version. eg. "v1.2.0"
                  Generate a specific version of the changelog.
                3.multiple versions. eg. "v2.0.0 v1.0.0"
                4.version range. eg v1.3.0~v1.2.0
                  Generate changelog within the specified range.
                  For more details, please check the following examples.

  --help        Print help information.
  --version     Print version information.

  --project     Specify the project to be generated. It can be a relative path.
                or an absolute path or even a remote Git URL. eg.
                Defaults to "--project=$PWD".
  --output      Write output to file. default write to stdout.

  --fmt         Specify the changelog format. Available options:
                Defaults to "--fmt=md".
  --preset      Cli built-in markdown template. Available options:
                Only available when --fmt=md and --tpl is nil.
                Defaults to "--preset=default".
  --tpl         Specify the template file for generating. Only available when
  --skip-format Skip the formatting process, which is very useful for keeping the
                original format.

  # generate changelog from HEAD to <latest version>.
  # if HEAD is not the latest tag. then this should be a unreleased version
  # otherwise it should be the latest version
  $ whatchanged

  # generate changelog of the specified version
  $ whatchanged v1.2.0

  # Generate the specified two versions
  # Separate by a comma, and only generate these two versions
  # the middle version will not be generated
  $ whatchanged v2.0.0 v1.0.0

  # generate HEAD to latest tag and <Nth tag>
  $ whatchanged [email protected] @1 @2

  # generate changelog within the specified range
  $ whatchanged v1.3.0~v1.2.0

  # generate changelog from HEAD to <Nth tag>
  $ whatchanged [email protected]

  # generate changelog from <0th tag> to <2th tag>
  $ whatchanged @[email protected]

  # generate changelog from HEAD to specified version
  $ whatchanged HEAD~v1.3.0

  # generate all changelog
  $ whatchanged HEAD~

  # generate changelog from two commit hashes
  $ whatchanged 770ed02~585445d

  # Generate changelog for the specified project
  $ whatchanged --project=/path/to/project v1.0.0

  # Generate changelog for the remote project
  $ whatchanged --project=https://github.com/axetroy/whatchanged.git v0.1.0



Install via npm

# install in global
npm install -g @axetroy/whatchanged
# run the command once
npx @axetroy/whatchanged

Install via shell

If you are using Linux/macOS. you can install it with the following command:

# install latest version
curl -fsSL https://raw.githubusercontent.com/axetroy/whatchanged/master/install.sh | bash
# or install specified version
curl -fsSL https://raw.githubusercontent.com/axetroy/whatchanged/master/install.sh | bash -s v0.3.6
# or install from gobinaries.com
curl -sf https://gobinaries.com/axetroy/[email protected] | sh

Install from Github release page

Download the executable file for your platform at release page and put the executable file to $PATH then try it.

$ whatchanged --help

Build from source code

Make sure you have [email protected] and goreleaser installed.

$ git clone https://github.com/axetroy/whatchanged.git $GOPATH/src/github.com/axetroy/whatchanged
$ cd $GOPATH/src/github.com/axetroy/whatchanged
$ make build


$ make test