Keep a Changelog · SemVer · compare links

Build a CHANGELOG.md

Keep-a-Changelog formatted releases with Added / Changed / Deprecated / Removed / Fixed / Security buckets. Compare links auto-generated.

Quick Start

How to maintain a changelog

Add releases newest-first, drop entries under the right category, link to the tag.

  1. 01

    Project + repo

    Repo URL drives the auto-generated compare/tag links at the bottom.

    Parsing runs through marked with GFM extensions enabled — tables, task lists, strikethrough, and fenced code blocks all match GitHub’s rendering.

    metaGFMmarkedCommonMarklive
    input · markdownrepo · GFM
    github.com/acme/cli
    loaded · GFMGFM · ready
  2. 02

    Add a release

    Version and date. Top-most release is the latest.

    Soft-break behaviour is configurable: by default a single newline becomes a space (CommonMark), toggle on for chat-style <br> insertion.

    releasesoft-breaksoptionsconfiglive
    version · options2.0.0 · live
    ## [2.0.0] - 2026-04-15
    options applied · livelive
  3. 03

    Buckets

    Added / Changed / Deprecated / Removed / Fixed / Security — drop bullets in the right one.

    The preview is scoped under a .mde class so its CSS doesn’t bleed into the rest of the page. Output HTML is whitespace-controlled for clean diffs.

    entriespreviewscoped CSSrenderstable
    added · renderedfixed · ready
    ### Added
    - Plugin API
    rendered · liverendered
  4. 04

    Copy file

    Drop CHANGELOG.md at repo root — release tooling picks it up automatically.

    Export covers both raw Markdown and rendered HTML; downloads stream as text/markdown or text/html via Blob + object URL.

    exportclipboard.md.htmlblob
    ✓ · exportedready · done
    ✓ Copied CHANGELOG
    shipped · ready to shipsuccess
Pro tips

Author Markdown that renders everywhere

GFM is the safe default

GitHub-Flavored Markdown is the de-facto baseline (tables, task lists, strikethrough). CommonMark is stricter but ubiquitous as a fallback.

Soft-break behaviour varies

A single newline is a space in CommonMark, a <br> in GFM. Toggle soft breaks when source matters.

Escape inside code fences

Backticks inside fenced blocks need a longer fence — three becomes four. Use ~~~ if your content has many backticks.

Anchors are slugified

GitHub lowercases, strips punctuation, and joins with hyphens. Duplicate headings get -1, -2 suffixes.

Tables need a header row

The dash row sets alignment (:---, :-:, ---:). Use Table Aligner for diff-friendly columns.

Front matter is YAML

Triple-dash blocks at the top of files are parsed by static-site generators. Use the Front-Matter Validator to catch syntax errors.

Use Cases

When to keep a changelog

Libraries, SaaS releases, CLIs.

Library releases

Users need to know what breaks before they bump. Render path uses marked with GFM extensions enabled (tables, task lists, strikethrough, autolinks), so what you preview matches what GitHub publishes bit-for-bit. Soft-break behaviour is configurable for chat-style vs prose Markdown.

GFM-compliant

Internal services

Track deploys with the same Added/Changed/Fixed shape. Pairs cleanly with the Markdown Cheatsheet for syntax you can't quite remember — callout blocks, footnotes, definition lists. Output stays diff-friendly so style-only changes don't drown out real edits in PRs.

GitHub-perfect

CLI tools

Help users understand what new flags they get on upgrade. Cross-platform safe: anchors, code fences, and tables behave identically on GitHub, GitLab, Bitbucket, and Gitea. Heading-anchor slugs follow GitHub's lowercase-and-hyphenate rules so deep links survive a docs migration.

diff-friendly

Release tooling input

release-please / semantic-release / changesets read CHANGELOG.md. No server roundtrip — perfect for proprietary content you can't paste into a public tool. The full marked + GFM bundle ships with the page, so it works offline once loaded.

render-stable

Backfill history

Reconstruct missing changelog from git tags. Front matter (YAML / TOML / JSON) passes through unchanged so static-site pipelines (Jekyll, Hugo, Astro, Eleventy) read it correctly. Pair with the Front-Matter Validator to catch syntax errors before deploy.

cross-platform

Security advisories

The Security bucket pairs nicely with GHSA links. Output is reproducible: identical input always produces identical Markdown, so doc-generation scripts can rely on it for snapshot tests and embedded into release workflows.

SEO-friendly
FAQ

Frequently asked questions

It's the de-facto standard — release-please, semantic-release, and changesets all understand the format.
Add a release with version 'Unreleased' at the top — Keep a Changelog convention.
From your Repo URL — adjacent releases get /compare/prev...current, the oldest gets /releases/tag/version.
Yes — mark them with the yanked checkbox; the [YANKED] tag is appended to the header per Keep a Changelog spec.
No — everything is built locally and runs locally in your browser.
Suggest a tool

Something missing?

Tell us what you need. We ship the top requests every two weeks.

Sent straight to the maintainers · no account needed
47 in queue·8 shipped this month
Request queued. Thanks!