Release notes formatter
Paste your notes, one change per line. They are tidied right here on this page, and nothing is sent anywhere.
Try an example:
What it does
Every update needs a few lines saying what changed, and most Mac apps need them in more than one place: the What's New text in App Store Connect, the release notes Sparkle shows in its update window, and a GitHub release or a changelog page. This tool takes whatever you have, such as rough notes, a list, or the lines git log --oneline prints, and sorts each line into New, Improved or Fixed. It strips commit hashes, prefixes like feat: and fix: and pull request numbers, leaves out lines that only matter to you, like chore, ci, docs, test and merge commits, and writes three copies you can paste. Then it reads the result the way App Review might.
Where each copy goes
| Copy | Where it goes |
|---|---|
| App Store | What's New in This Version, in App Store Connect. Plain text, up to 4,000 characters. Required for every version after the first. |
| Sparkle | Inside the description of the release in your appcast, wrapped in CDATA, or on a page that sparkle:releaseNotesLink points to. |
| Markdown | A GitHub release, a CHANGELOG.md, or Sparkle 2.9 and later on macOS 12 and later, with sparkle:format="markdown". |
Commands to run
git log --oneline v2.0..HEAD git log --pretty=format:"%s" v2.0..HEAD
Both list the commits since your last release tag, here v2.0, one per line. The second leaves out the hashes. Paste either one here, then rewrite any line that still reads like a note to yourself.
What each result means
| Mark | What it means |
|---|---|
| Fix | App Store Connect won't take it, such as What's New over 4,000 characters. |
| Look | It will paste, but a line may confuse people or get a question in review, like a ticket number, a file name or another platform's name. |
| OK | It fits and says what changed. |
| Note | What was kept, what was left out, and where each copy goes. |
Sources: App Store Connect Help, Platform version information, App Review Guidelines (2.2, 2.3.10 and 2.3.12) and Sparkle, Publishing an update, all read November 13, 2026.
How it works
It is a few plain text rules running on this page. It sorts a line by its first word or its prefix, so "Add" and feat: go under New, "Fix" and fix: under Fixed, and anything it can't place under Improved. A heading in your notes, like "Fixed:", sorts the lines under it. It doesn't rewrite your sentences, and it can't tell whether a line is true or clear: that part is still yours. Nothing you paste is saved or sent.
Questions
How long can App Store release notes be?
What's New in This Version in App Store Connect takes up to 4,000 characters of plain text. It is required for every version after the first one.
Can I just write bug fixes and performance improvements?
For a simple bug fix, security or performance update, yes. App Review Guideline 2.3.12 says bigger changes and new features must be listed in the notes.
How do I add release notes to a Sparkle appcast?
Put HTML inside the description element of the release, wrapped in CDATA, or host a page and point sparkle:releaseNotesLink at it. Sparkle 2.9 and later can also read Markdown with sparkle:format set to markdown.
Can I paste git log output?
Yes. Commit hashes, prefixes like feat: and fix:, and pull request numbers are removed, and chore, ci, docs, test and merge lines are left out.
Are my notes sent anywhere?
No. They are tidied on this page and nothing is sent or stored.