jekyll-keepachangelog
jekyll-keepachangelog — parse Keep a Changelog format into structured site data.
Open Source Plugin

jekyll-keepachangelog

Parse your CHANGELOG.md into structured Jekyll data — version history, dates, and sections available as site.data.changelog for use in any template.

jekyll-keepachangelog reads a CHANGELOG.md file in Keep a Changelog format and makes the entire version history available as structured data at site.data.changelog. Build a proper version history page for your project site without manually writing HTML.

No existing Jekyll plugin does this. The few changelog-adjacent plugins either require a custom collection or manually maintained YAML — this one parses the markdown you already maintain.

Keep a Changelog Format

The plugin parses the standard format:

## [1.2.0] - 2024-03-15
### Added
- New feature A
- New feature B
### Fixed
- Bug fix C

## [Unreleased]
### Changed
- Work in progress

Data Structure

Each version becomes a hash in site.data.changelog:

- version: "1.2.0"
  date: "2024-03-15"
  unreleased: false
  sections:
    Added: ["New feature A", "New feature B"]
    Fixed: ["Bug fix C"]

Installation

Add to your Gemfile:

gem "jekyll-keepachangelog"

Add to plugins: in _config.yml:

plugins:
  - jekyll-keepachangelog

Template Usage

{% for version in site.data.changelog %}
  <h2>
    {{ version.version }}
    {% if version.date %}<span>{{ version.date }}</span>{% endif %}
  </h2>
  {% for section in version.sections %}
    <h3>{{ section[0] }}</h3>
    <ul>
      {% for item in section[1] %}
        <li>{{ item }}</li>
      {% endfor %}
    </ul>
  {% endfor %}
{% endfor %}

Configuration

Override the default file path if your changelog lives elsewhere:

changelog:
  file: CHANGELOG.md  # default

Source

Available on GitHub and RubyGems.

Live Demo

This site uses jekyll-keepachangelog to render its own version history. View the generated changelog →

gem install jekyll-keepachangelog