Release Notes Generator
Turn commits, pull requests, or release bullets into audience-ready Markdown with grouped changes, parser warnings, and publication checks.{{ summaryTitle }}
{{ summaryLine }}
{{ draftExportStatus }}
{{ computation.values.markdown }}
The chart renderer is unavailable. Category counts remain available in the ledgers.
| Section | Release note | Audience signal | Release signal | Source | Copy |
|---|---|---|---|---|---|
| {{ row.section }} | {{ row.note }} | {{ row.audience }} | {{ row.signal }} | {{ row.source }} |
| Gate | Status | Evidence | Next action | Copy |
|---|---|---|---|---|
| {{ row.gate }} | {{ row.status }} | {{ row.evidence }} | {{ row.action }} |
Release notes translate a set of software changes into decisions for customers, developers, or an internal rollout team. A useful note names the release, summarizes its effect, separates new work from fixes, and makes breaking changes, upgrade work, security changes, and known problems hard to miss.
Raw commit messages and pull request titles are valuable evidence, but they are rarely ready to publish. They may use internal scope names, mix several audiences, repeat the same change, or hide required action behind a short technical phrase. Editing should preserve traceability while replacing repository shorthand with consequences the intended reader can understand.
- Customers need outcomes, behavior changes, limitations, and any action they must take.
- Developers need compatibility details, migration steps, security implications, and references to relevant changes.
- Internal teams need rollout status, ownership, known risk, and follow-up work.
Version syntax can help classify change, but it does not prove that the note is complete. A valid version and date can still accompany missing migration guidance or an unclear breaking change. Publication readiness requires a human review of both the grouped draft and the source changes it represents.
How to Use This Tool:
Start with one change per line and choose the reader before polishing the wording.
- Paste release changes or load a text file under 512 KiB. Choose Auto detect when the lines consistently resemble categorized entries, Conventional Commits, GitHub pull requests, or plain bullets; pin a format when the input is mixed.
- Enter the release title, version, date, audience, status, and publication format. Add a short reader-facing summary rather than repeating the section list.
- Put migration steps in Upgrade or compatibility notes and unresolved problems in Known issues. Those lines are added to their own sections even when the main source contains no matching category.
- Review Release draft for wording and Change ledger for how each source line was classified. Correct ignored lines or unexpected categories at the source.
- Resolve every Blocker and relevant Review item in Readiness review, then compare the final note with the actual release before publishing it.
Interpreting Results:
The grouped Markdown is a draft, not an authoritative changelog. Check that Breaking Changes, Upgrade Notes, Security, and Known Issues match the release and use language suited to the chosen audience.
Ready means a specific automated check found its expected evidence. Review asks for human confirmation or missing optional context. Blocker is reserved for no parsed changes or a yanked release that lacks replacement, rollback, and impact guidance. Parser warnings also deserve review because ignored headings, malformed lines, or collapsed duplicates can hide information.
Technical Details:
Release-note generation is a text transformation rather than a numeric calculation. The central mechanism detects or accepts a source grammar, converts each valid line into a normalized change record, groups records in a fixed publication order, and builds both Markdown and review evidence from the same records.
Transformation Core:
| Source format | Recognized shape | Result |
|---|---|---|
| Categorized | Markdown headings or labels such as added, fixed, security, or upgrade | Lines inherit the recognized heading or prefix; uncategorized lines become Improvements with a warning. |
| Conventional Commits | type(scope): summary, optional breaking marker, or BREAKING CHANGE footer | Types map to release sections; technical voice retains the scope in brackets. |
| GitHub pull requests | Pull request number followed by a summary and optional author | The summary is parsed again as a conventional message when possible; otherwise it becomes an Improvement. |
| Plain bullets | One change per nonblank line | Every line becomes a Highlight. |
Auto detection checks for pull request rows first, then Conventional Commits, then categorized headings or prefixes; anything else is plain text. Mixed input can therefore follow the first strong repeated cue rather than the intent of every line, which is why a pinned source format is safer for irregular data.
After parsing, upgrade and known-issue lines are appended. Duplicate records are collapsed only when their section and normalized note text match case-insensitively. Sections then appear in this order when populated: Breaking Changes, Highlights, What is New, Improvements, Fixes, Security, Upgrade Notes, Known Issues, Deprecated, Removed, Documentation, and Other Notes.
Rule Core:
| Check | Rule | Meaning |
|---|---|---|
| Version | Present and shaped like MAJOR.MINOR.PATCH, with optional pre-release or build metadata | A missing or nonmatching value is a review item, not an automatic rewrite. |
| Date | A real calendar date in YYYY-MM-DD form | An invalid or missing date is flagged before publication. |
| Change coverage | At least one parsed record | Zero records creates a blocker. |
| Yanked status | Release status equals Yanked | Creates a blocker and asks for replacement, rollback, and impact guidance. |
| High-attention sections | Breaking, upgrade, security, or known-issue records are present | Creates targeted review actions rather than silently treating the draft as complete. |
A repository URL plus current version produces a release link; adding a previous version produces a comparison link. These links are assembled from the entered values and still need to be opened and checked. Empty sections are omitted unless explicitly requested.
Privacy and Accuracy Notes:
Pasted text and loaded files are processed in the browser. Do not include secrets, private vulnerability details, customer data, or internal references in a draft intended for public release. Classification follows visible text patterns and cannot determine whether a source claim is true, complete, approved, or safe to disclose.
Worked Examples:
Breaking developer release
The line feat(api)!: require export.read scope becomes a Breaking Changes entry. With technical voice, its scope is retained as [api]; separate upgrade and known-issue lines appear in their own sections. The readiness review asks for explicit migration wording and security or compatibility confirmation before publication.
References:
- Keep a Changelog, Keep a Changelog, version 1.1.0.
- Semantic Versioning 2.0.0, Semantic Versioning.
- Conventional Commits 1.0.0, Conventional Commits.
- How to create a Git release tag, Simplified Guide.
- How to run a feature branch release flow in Git, Simplified Guide.