Free tool · no sign-up

Changelog validator, for Keep a Changelog.

Paste a CHANGELOG.md or a GitHub link. Every problem gets its line number and a one-sentence fix, and you get a corrected copy with the safe fixes already made. Checked against Keep a Changelog 2.0.0.

Your changelog isn't stored.

What it checks

The format, rule by rule.

The structure people, release tools and coding agents rely on. Your wording is yours; the check never judges it.

Version headings

## [1.2.0] - 2024-05-01 at level 2, the version in square brackets, no duplicates, newest first.

Release dates

YYYY-MM-DD only. Dates that can be read one way are rewritten; ambiguous ones, missing ones and dates in the future are flagged.

Types of change

Added, Changed, Deprecated, Removed, Fixed and Security, spelled that way, at level 3, with every entry under one and none empty or repeated.

Breaking changes and deprecations

2.0.0's in-place “**Breaking:**” marker instead of a separate section, and the version that will remove each deprecated item.

Unreleased and [YANKED]

An Unreleased section at the top, and pulled releases marked [YANKED] the way the format writes it.

Links and the file itself

A link for every version (written for you when it knows the repository), no stray links, a # Changelog title, a preamble and the CHANGELOG.md name.

ErrorsTools that read Keep a Changelog will get these wrong. Only errors make a changelog invalid, and only errors fail the CI check.
WarningsDepartures from the format: people can still read the file, but parsers and agents may skip or misfile entries.
TipsWhat the guidance recommends, like a preamble or a removal version for deprecations. Nice to have.

In CI and from agents

Catch it before it ships.

One step in your pipeline runs the same free check on every pull request. No key, no account.

  • Prints every findingWith its line number and fix, right in the job log.
  • Fails only on errorsWarnings and tips are shown, never block. A busy or rate-limited service lets the job pass.
  • Agents ask directlyCoding agents connected to the LogPulse MCP server call validate_changelog.
Check CHANGELOG.md on every pull request
# .github/workflows/changelog.yml
name: Changelog
on: [pull_request]
jobs:
  check:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v7
      - name: Check CHANGELOG.md
        run: |
          curl -sS -X POST "https://release-ripple-roadmap.lovable.app/api/public/v1/validate" -H "Content-Type: text/markdown" --data-binary @CHANGELOG.md -o report.json
          jq -r '.error.message // (.issues[]? | "\(.severity) line \(.line // "-"): \(.message) Fix: \(.fix)")' report.json
          jq -e '.valid != false' report.json > /dev/null
A local file, as a text report
curl -X POST "https://release-ripple-roadmap.lovable.app/api/public/v1/validate?format=text" \
  -H "Content-Type: text/markdown" \
  --data-binary @CHANGELOG.md
Claude Code
claude mcp add --transport http logpulse https://release-ripple-roadmap.lovable.app/mcp

# then ask:
# "Check our CHANGELOG.md against
#  Keep a Changelog and fix it"

Endpoint: https://release-ripple-roadmap.lovable.app/api/public/v1/validate · POST JSON { markdown | url } or a raw text/markdown body · format=text for a readable report. Read the docs.

Questions

How the validator works