
A changelog is a curated, reverse-chronological record of notable changes to a product or project—usually grouped by version (or date) and categorized so technical readers can see what was added, changed, fixed, or removed.
It is the technical ledger; customer-facing release notes summarize user impact in plainer language. Many teams keep both. See release notes vs. changelog for when each one fits.
Prefer customer release notes (or both) when the goal is adoption, benefit language, or GTM alignment. Audience routing → audiences.
| Component | Role | Notes |
|---|---|---|
| Version or date heading | Anchors the release | SemVer (MAJOR.MINOR.PATCH) or a clear ship date for CD trains |
| Release date | Recency | Use an explicit date (e.g. 2026-09-21)—avoid placeholder month/year samples that go stale |
| Categorized entries | Scanability | Keep a Changelog-style headings (below) |
| Scope filter | Signal-to-noise | User- or integrator-visible changes only—not every typo commit |
A widely used structure (Keep a Changelog) groups entries under:
The Keep a Changelog convention goes beyond categories. Its core rules:
2026-09-15) so dates read the same everywhere.MAJOR.MINOR.PATCH) tells integrators that a MAJOR bump may break things.[Unreleased]
Added
- Bulk-archive for projects
[2.4.0] - 2026-09-15
Added
- Webhook retries with exponential backoff for failed deliveries
Fixed
- Dashboard filter no longer resets when switching saved views
Deprecated
- Legacy v1 export endpoint (removal planned for 2026-12-01; see migration guide)
[2.3.1] - 2026-09-02 [YANKED]| Location | Typical audience | Notes |
|---|---|---|
CHANGELOG.md in the repository | Contributors, library users | The classic home for open-source projects and SDKs; versioned with the code |
| GitHub or GitLab Releases | Developers installing a specific version | Tied to tags; GitHub can auto-generate a draft from merged pull requests |
| Developer docs changelog | API and integration customers | Usually grouped by API version; the natural home for deprecation notices |
| Public product changelog page | Customers and prospects | Often a hybrid of technical changelog and release notes. If non-technical readers use it, write entries for them (how to write) |
Pick one canonical location per audience and link to it from the others, rather than maintaining several copies that drift.
Customer-facing wording patterns → how to write.
Skip the blank file: copy a ready-made Markdown and customer-facing version from our changelog template.
[Unreleased] section.feat:, fix:, BREAKING CHANGE:) so tools can sort entries into categories.No. A changelog is the technical record; release notes are the user-impact narrative. Full comparison → vs changelog.
Helpful when compatibility matters (APIs, libraries). Product-led SaaS UIs sometimes use dated releases instead—consistency matters more than dogma.
No. Notable, user- or integrator-visible changes only. Dumping every commit trains people to ignore the file.
Under Deprecated (and later Removed), with dates and migration paths. Playbook → breaking changes.
CHANGELOG.md at the root of the repository is the most widely recognized convention, and it's the name Keep a Changelog recommends. For product changelogs published on the web, /changelog or /releases are the paths readers most often expect.
Use clear versions or dates, honest categories, and CD-aware batching. Pair with release notes when adoption is the goal. LaunchNotes can publish a customer-facing updates page alongside a technical track. Worth a look if your “changelog” is still a raw commit export nobody trusts.