Changelog Generator
Generate a changelog entry from categorized notes or Conventional Commits with Keep a Changelog sections, SemVer signal, audit rows, and copy-ready Markdown.{{ result.summaryTitle }}
- {{ warning }}
{{ result.markdown }}
| # | Category | Change | Source | SemVer signal | Copy |
|---|---|---|---|---|---|
| No change entries parsed yet. | |||||
| {{ row.index }} | {{ row.category }} | {{ row.change }} | {{ row.source }} | {{ row.semver }} | |
| Check | Status | Detail | Action | Copy |
|---|---|---|---|---|
| {{ row.check }} | {{ row.status }} | {{ row.detail }} | {{ row.action }} |
Introduction
A changelog is a release-facing record of notable software changes. It gives users, maintainers, support teams, and auditors a compact answer to what changed, what was fixed, what might break, and what needs attention before an upgrade.
Good changelog entries separate feature additions from fixes, removals, deprecations, and security work. That separation matters because readers scan release notes for different reasons. A product owner may look for new capability, an operations team may look for upgrade risk, and a security reviewer may look for patched exposure.
Keep a Changelog gives the record a familiar Markdown shape with headings such as Added, Changed, Deprecated, Removed, Fixed, and Security. Semantic Versioning adds a second signal by linking release numbers to compatibility intent: major for incompatible changes, minor for compatible additions, and patch for compatible fixes.
A generated changelog draft still needs human review. Category names and commit markers can organize release evidence, but they cannot prove that a change was described clearly, that migration notes are complete, or that a version number matches the real public API impact.
Technical Details:
Keep a Changelog format is built around release headings and named change sections. A release heading normally carries a version and date, while an Unreleased heading holds work that has not yet been tagged. The section names help readers distinguish new behavior from maintenance fixes and risk-bearing changes.
Conventional Commits can supply the same intent from commit subjects. A header such as feat(api): add retry policy exposes a type, optional scope, and description. A bang before the colon or a BREAKING CHANGE: footer marks compatibility risk and should be treated more seriously than ordinary feature or fix wording.
Transformation Core:
The generated entry follows an ordered parsing path. Lines are normalized, optional bullets are stripped, a category or commit type is detected, then the change text is placed into the standard changelog section order.
| Source Pattern | Parsing Behavior | Output Effect |
|---|---|---|
Category prefix such as added:, fixed:, or security: |
The prefix maps to Added, Fixed, Security, or another supported Keep a Changelog category. | The cleaned change appears under that Markdown section. |
Markdown heading such as ### Added |
The heading sets the current category for following bullet or plain-text lines. | Following entries inherit the heading category until another recognized heading appears. |
Conventional Commit header such as feat(ui): add filters |
The type maps to a category, and the optional scope is kept in brackets before the change text. | The ledger records the original source type, category, change text, and SemVer signal. |
| Uncategorized non-empty line | The line is accepted and mapped to Changed. | A warning explains how many lines were defaulted so the draft can be tightened. |
| Duplicate category and change pair | Duplicates are removed only when duplicate collapsing is enabled. | The warning block and audit row report the collapsed count. |
Release Signal Rules:
The SemVer signal is a review hint, not an automatic version decision. In release-note category mode, the category controls the signal. In strict Conventional Commits mode, only feat, fix, and breaking markers affect the signal.
| Condition | Release-Note Categories | Conventional Strict | Review Meaning |
|---|---|---|---|
Breaking marker or BREAKING CHANGE: footer |
Major |
Major |
Confirm migration notes and public compatibility impact. |
| Removed entry | Major |
Depends on commit marker | Removal often needs a major-release review unless project policy says otherwise. |
| Added, Changed, or Deprecated entry | Minor |
Minor only for feat |
Compatible additions and deprecations usually deserve release-note attention. |
| Fixed or Security entry | Patch |
Patch only for fix |
Compatible corrections and security fixes usually fit patch release notes. |
| Documentation, build, CI, chore, test, style, refactor, or performance type | Mapped by generated category | No bump |
These lines may still belong in a changelog, but strict Conventional Commits does not make them version-bump signals. |
Version headings accept a release version, a leading v tag style, or Unreleased. Published releases should use an ISO date in the heading. Reference compare links are emitted only when a repository URL is supplied and version links are enabled.
Everyday Use & Decision Guide:
Start with Source format set to Categorized entries when the release notes already have words like added, changed, fixed, or security at the start of each line. Use Conventional commits when the source is a list of commit subjects such as feat(exports): add markdown download or fix(parser): keep scoped commits.
Use Release entry only when you are updating an existing changelog. Use Full CHANGELOG.md when you need a starter file with the standard title, explanatory note, and optional Unreleased section. Add Project name only when that full-file heading or exported document title needs project context.
- Keep
Release dateasYYYY-MM-DDfor tagged releases. SetVersiontoUnreleasedwhen the entry is still a holding area. - Choose
Release-note categorieswhen removed, deprecated, security, and changed entries should affect the SemVer signal. - Choose
Conventional Commits strictwhen the SemVer signal should follow onlyfeat,fix,!, andBREAKING CHANGE. - Enable
Reference compare linksonly whenRepository URLandPrevious versionare ready for compare links. - Turn on
Empty sectionsfor checklist-driven releases; leave it off when readers should see only sections that contain entries. - Turn on
Duplicate entriesonly when repeated lines are accidental. Leave duplicates visible when repeats came from separate reviewers. - Use
Yanked releaseonly for a version that was withdrawn after publication.
A warning does not always mean the changelog is unusable. It may mean a non-category heading was skipped, one line was mapped to Changed, or a repository URL is missing for compare links. Read Release Audit before copying the final Markdown so the warning and action row are reviewed together.
A clean generated entry does not prove the release is ready. It means the pasted source was parsed into a coherent changelog structure. Compare Change Ledger with the actual release diff before publishing a tag, especially when the summary shows a Major or Minor SemVer signal.
Step-by-Step Guide:
Work from release identity to source parsing, then check the audit before using the generated Markdown.
- Enter
Version. Use values such as2.4.0,v2.4.0,2.4.0-rc.1, orUnreleased. IfRelease Auditsays the version is not fullMAJOR.MINOR.PATCHsyntax, fix the version before publishing. - Set
Release date. For a published version, the audit expectsYYYY-MM-DD; forUnreleased, the date check is treated as ready. - Choose
Source format. PickCategorized entriesfor category prefixes or Markdown headings, andConventional commitsfor one commit subject per line. - If
Conventional commitsis selected, setSemVer signalto eitherRelease-note categoriesorConventional Commits strict. The summary badge should change if the strongest signal changes. - Choose
Output scope.Release entry onlyfillsChangelog Markdownwith one release block;Full CHANGELOG.mdadds the file heading and optional Unreleased section. - Paste release lines into
Release changes, drop a TXT, MD, or LOG file, or useBrowse TXT. If the file is larger than 512 KB, use a smaller source or paste the relevant excerpt. - Use
Normalize lineswhen copied text has mixed line endings or trailing spaces. The source status should confirm that line endings and trailing spaces were normalized. - Open
AdvancedforVersion links,Repository URL,Previous version, empty sections, duplicate handling, or yanked release status. - Read the summary box and any
Changelog notes. Warnings such as uncategorized lines, ignored non-commit lines, bad dates, or missing repository URLs should be resolved or intentionally accepted. - Review
Change Ledger. TheCategory,Change,Source, andSemVer signalcolumns should match the release story you want readers to see. - Open
Release Auditbefore copyingChangelog Markdown. The rows for version heading, release date, category coverage, source parsing, version links, and duplicate entries should show the expected status.
Interpreting Results:
Read the summary as a compact release check. The notable-change count should match the rows you expected to publish, the section count should match the categories you intended to include, and the SemVer signal should match the strongest release risk found in the parsed rows.
Changelog Markdown is the copy-ready draft. Change Ledger explains how each line was classified. Release Audit explains what should be reviewed before publishing. JSON is useful when another process needs the same structured result.
| Result Cue | What It Means | What to Verify |
|---|---|---|
Major signal |
A breaking marker or removed entry raised the strongest SemVer signal. | Confirm migration notes, removed behavior, and version plan before tagging. |
Minor signal |
Added, changed, deprecated, or feat evidence is the strongest signal. |
Check whether the planned version and release notes reflect compatible new capability or deprecation. |
Patch signal |
Fix or security evidence is the strongest signal under the chosen policy. | Confirm the change is compatible and that security wording is neither vague nor overexposed. |
Review in Release Audit |
A field or parsing condition needs attention, such as a blank version, non-ISO date, missing repository URL, or collapsed duplicate. | Use the audit row's action before copying the final Markdown. |
Mapped uncategorized line(s) to Changed |
At least one line had no recognized category or commit shape. | Add an explicit category prefix if Changed is not the right section. |
A ready audit row means the draft is structurally consistent under the selected settings. It does not mean the release notes are complete, the SemVer version is correct for the real API change, or the wording is safe to publish without maintainer review.
Worked Examples:
Category-prefixed patch release. With Version set to 2.4.1, Release date set to 2026-05-06, and Source format set to Categorized entries, lines such as fixed: Preserve blank lines when copying release notes and security: Redact token values in audit exports should appear under Fixed and Security in Changelog Markdown. Change Ledger should show two rows, and the summary should report a Patch SemVer signal.
Conventional Commit feature release. A source list with feat(exports): add changelog markdown download, fix(parser): keep scoped commits in the change ledger, and docs: refresh examples should classify the feature as Added, the fix as Fixed, and the documentation row as Changed. Under Conventional Commits strict, Release Audit should recommend a Minor signal because feat outranks fix and docs has no strict SemVer bump.
Breaking release review. A line such as perf!: remove legacy changelog cache should place BREAKING: at the start of the generated change text and raise the summary to a Major SemVer signal. The Markdown can be structurally ready while the release still needs migration wording and a version-number check.
Troubleshooting an unclear paste. A pasted line like Updated the export buttons has no category prefix and no Conventional Commit type. In categorized mode, the warning block should say one uncategorized line was mapped to Changed. Rewriting the line as changed: Update export button labels removes that warning and makes the Source column easier to audit.
Compare links missing a repository URL. If Version links is set to Reference compare links but Repository URL is blank, Release Audit should show Version links as Review. Add the repository URL or switch Version links to No version links before copying the Markdown.
FAQ:
Why did my line go into Changed?
In categorized mode, a non-empty line without a recognized category prefix, Markdown category heading, or Conventional Commit shape is accepted as Changed. Add a prefix such as added:, fixed:, or security: when another section is more accurate.
Why does strict Conventional Commits ignore docs or chore for the SemVer signal?
Strict mode gives SemVer weight to feat, fix, !, and BREAKING CHANGE. Other valid types can still appear in the changelog, but they do not raise the strict bump signal unless they carry a breaking marker.
Can I generate an Unreleased entry?
Yes. Set Version to Unreleased. The generated heading becomes ## [Unreleased], and the release date audit treats the missing date as ready for an unreleased holding section.
Why did my file fail to load?
The file reader accepts TXT, MD, and LOG-style text sources up to 512 KB. Use a smaller file, paste the relevant release lines, or remove binary content before trying again.
Does the SemVer signal choose my final version?
No. The signal reports the strongest parsed release note or commit marker under the selected policy. The final version still depends on the actual public API change, project policy, and maintainer review.
Does pasted release text leave the page during parsing?
The Markdown, ledger, audit, CSV, and JSON results are produced in the page from the text you paste or load. DOCX export uses the site's document export path, so use the text and CSV outputs when release text must stay within page-generated files.
Glossary:
- Changelog
- A release record that lists notable changes by version or Unreleased section.
- Keep a Changelog
- A common changelog format using named sections such as Added, Changed, Deprecated, Removed, Fixed, and Security.
- Conventional Commit
- A commit header with a type, optional scope, optional breaking marker, and description.
- SemVer signal
- The Major, Minor, Patch, or No bump hint inferred from categories or commit markers.
- Unreleased
- A changelog section for changes that are recorded but not yet assigned to a released version.
- Yanked release
- A release that was published and later withdrawn, marked in the heading with
[YANKED]. - Reference compare link
- A Markdown reference link that points from the previous version to the current version or from the current version to HEAD.
References:
- Keep a Changelog 1.1.0, Keep a Changelog.
- Semantic Versioning 2.0.0, Semantic Versioning.
- Conventional Commits 1.0.0, Conventional Commits.