Most changelogs are ignored. Not because users do not care about product updates — they do — but because most changelogs are written for the development team, not the customer. They are dense, jargon-heavy, and structured like a git log rather than a communication to a human being.
A great changelog does something different: it makes users feel like partners in the product's evolution. It answers the question every user is actually asking — "how does this change affect me?" — rather than cataloguing implementation details no one outside engineering will ever care about.
This guide covers everything you need to write changelogs that people actually read: the right format, templates for every entry type, real examples of good and bad changelogs, automation tools, and distribution strategies that get your updates in front of users. If you are building a new product, pair this with our guide on how to build a SaaS product to see how changelogs fit into your broader launch and growth strategy.
What Is a Changelog (and Why Most Are Terrible)
A changelog is a running, human-readable record of notable changes made to a product over time. It is typically organized in reverse chronological order — newest entries first — so users can quickly find what changed recently without scrolling through years of history.
The concept comes from software development, where CHANGELOG.md files in open source repositories let contributors track the project's evolution. But the principles apply equally to any product with a user base: SaaS apps, mobile apps, browser extensions, developer tools, and even physical products with firmware updates.
So why are most changelogs terrible? A few reasons:
- Written for engineers, not users. "Refactored authentication middleware to improve token validation latency" means nothing to the marketing manager using your tool. "Login is now 40% faster" does.
- Buried in a hard-to-find location. A changelog no one can find is a changelog no one reads. Most products hide their changelog under a Help menu or a developer docs subdomain users never visit.
- Published too infrequently. A changelog updated twice a year trains users to stop checking it. By the time they look, the wall of changes is overwhelming.
- Missing context about why things changed. "Fixed bug in export workflow" is technically accurate but useless. Users want to know what was broken, how it affected them, and whether they need to do anything differently now.
- Treating bad news as fine print. Burying deprecations and breaking changes in a list of minor fixes is a trust violation. Users who notice will assume you did it deliberately.
The good news: fixing all of these problems is straightforward once you understand what a changelog is actually for. It is not a technical audit trail — that is what git history is for. It is a communication tool. Write it like one.
Changelog vs Release Notes vs Patch Notes
These three terms are often used interchangeably, but they refer to different things. Understanding the distinction helps you decide what to write, how often to write it, and where to publish it.
| Format | Best For | Audience | Examples |
|---|---|---|---|
| Changelog | Ongoing, comprehensive update history maintained in reverse chronological order | Power users, developers, integrators, support teams | Stripe, Notion, Linear, GitHub |
| Release Notes | Polished, one-time document for a specific version or major release | General users, customers, press, enterprise buyers | Apple iOS notes, Adobe Creative Cloud, Salesforce |
| Patch Notes | Quick, list-style summary of bug fixes and balance tweaks in a specific patch | Power users tracking incremental changes, especially in games and tools with frequent patches | League of Legends, Figma, Slack desktop |
| What's New Page | Marketing-oriented page highlighting the best new features from a major release | New and prospective users evaluating the product | Airtable, Webflow, HubSpot product announcements |
Most SaaS products need both a changelog (for ongoing reference) and a "What's New" section or in-app announcement (for surfacing updates to users who do not proactively seek them out). For products with a developer audience, a dedicated changelog page plus API versioning notes covers both bases. For consumer products, in-app notifications and email digests typically drive more engagement than a standalone changelog page.
What Makes a Great Changelog
Write in User-Facing Language
The most important rule of changelog writing is also the most frequently violated: describe changes in terms of what the user experiences, not what the engineer implemented. This is not just about dumbing things down — it is about respecting your reader's time and answering the only question they are actually asking: "what does this mean for me?"
Resolved race condition in async queue processing that caused intermittent failures in webhook delivery pipeline when throughput exceeded 500 req/s.
Fixed: Webhooks were sometimes not delivered during high-traffic periods. If you noticed missing webhook events over the last two weeks, this is resolved — no action needed on your end.
The good version tells users what was broken, acknowledges they may have been affected, and explicitly tells them they do not need to do anything. That is three pieces of genuinely useful information. The bad version tells the same user nothing actionable.
Use Clear Category Labels
Group changelog entries into labeled categories so readers can instantly scan for what matters to them. The standard categories, popularized by Keep a Changelog, are:
- Added — New features or capabilities
- Changed — Changes to existing functionality
- Deprecated — Features that will be removed in a future version
- Removed — Features that have been removed in this version
- Fixed — Bug fixes
- Security — Security patches and vulnerability fixes
For consumer SaaS products, you may prefer slightly friendlier labels: "New," "Improvements," "Fixes," and "Breaking Changes." The exact labels matter less than using them consistently so your audience learns what to expect in each section.
Semantic Versioning and Date Labeling
Every changelog entry needs a version identifier or date so users can orient themselves in time. Semantic versioning (MAJOR.MINOR.PATCH) is the standard for any product with an API, SDK, or third-party integrations — the version number itself carries meaning about the scope of change. For consumer SaaS with no public API, date-based labeling (2026-03-27) is simpler and works equally well.
For products that need to communicate urgency, you can also add a release type label alongside the version: "Major Release," "Minor Update," or "Hotfix." This helps users quickly decide whether a changelog entry warrants their immediate attention or is safe to skim later.
Changelog Format Options
There is no single right format for a changelog — the best format depends on your audience, release cadence, and tooling. Here is a breakdown of the most common options:
| Format | Best For | Audience | Examples |
|---|---|---|---|
| CHANGELOG.md | Open source projects, developer tools, API products | Developers, contributors, integrators | React, Stripe API, Next.js |
| Hosted changelog page | SaaS products wanting a public-facing, branded update hub | All users — both technical and non-technical | Linear, Notion, Loom |
| In-app widget / modal | Products wanting to reach users who never visit the website | Active users inside the product | Intercom, Figma, Airtable |
| Email digest | Products with engaged email lists; monthly or quarterly update batches | Subscribers, paying customers | Superhuman, Basecamp |
| Blog post per release | Major feature releases that deserve their own SEO-indexed announcement | Broad audience including prospective customers | Vercel, GitHub, Shopify |
For most SaaS products, the answer is a combination: a public changelog page for ongoing reference, an in-app widget to surface updates passively, and email for major releases. You do not need all of these from day one — start with a public page and add distribution channels as your user base grows.
Writing Changelog Entries: Templates for Every Type
Good changelog entries follow a consistent structure. Here are ready-to-use templates for the four most common entry types, with the reasoning behind each element.
Template 1: New Feature
### Added **[Feature Name]** — One sentence describing what it does in plain language. What you can do now that you couldn't before, in 1-3 sentences. Optionally: who asked for this, or what workflow it improves. Link to documentation or a short demo if available.
Example:
Bulk export to CSV — You can now export up to 50,000 records at once from any table view.
Select any table, click Export, and choose CSV. For large exports, the file will be emailed to you when ready. This was the #1 requested feature from your feedback — thank you for your patience.
View documentation →
Template 2: Bug Fix
### Fixed **[What was broken]** — What the user experienced vs. what they should have expected. Optionally: when this started, whether they need to take any action, and how to verify the fix if applicable.
Example:
Dashboard charts not loading on Safari 17 — Charts were displaying as blank white boxes in Safari 17 and later. This is now fixed across all chart types.
If you were affected, a hard refresh (Cmd + Shift + R) will load the updated version immediately.
Template 3: Improvement
### Changed **[Feature or area]** — What changed and why it's better now. Focus on the user-perceivable benefit (speed, reliability, UX clarity) rather than the implementation change. Include before/after if quantifiable.
Example:
Search is now 3x faster — We rewrote the search index to handle large workspaces. Searches that previously took 2-4 seconds on accounts with 10,000+ records now return results in under 700ms.
Template 4: Breaking Change or Deprecation
### Breaking Change / Deprecated **[Feature or endpoint]** — What is changing and when. What the user or developer needs to do before the deadline. Link to migration guide. Be explicit about the timeline. Never bury this in a long list of minor fixes.
Example:
Legacy API v1 endpoints will be removed on June 1, 2026. If you are still using /api/v1/ endpoints, you must migrate to /api/v2/ before June 1st or your integration will stop working.
We have sent an email to all accounts using v1 in the last 90 days. Migration guide → — estimated effort is 1-2 hours for most integrations.
Changelog Examples: Good vs. Bad Side-by-Side
The difference between a helpful changelog and a useless one often comes down to a single editorial choice: who is the entry written for? Here are real-world style comparisons showing what that looks like in practice.
Example 1: A Bug Fix Entry
- Patched null pointer exception in UserSession.destroy() called during concurrent logout events
- Fixed memory leak in background job queue
- Resolved issue with state management in Redux slice
- Fixed: Users were occasionally logged out unexpectedly during active sessions. This is now resolved
- Fixed: Dashboard was slowing down over long sessions. Performance is now consistent regardless of session length
- Fixed: Undo/redo in the editor sometimes reverted to the wrong state. This is now reliable
Example 2: A Feature Launch Entry
- Implemented OAuth 2.0 PKCE flow for third-party authentication providers
- Added SSO support via SAML 2.0
- Migrated session tokens to JWT with RS256 signing
- New: Sign in with Google and GitHub — no password required
- New: Enterprise SSO — connect your company's identity provider so your team logs in with their work accounts (docs)
- Improved: Login sessions are now more secure and no longer expire unexpectedly
Example 3: A Full Changelog Entry (Stripe's Style)
Stripe's API changelog is widely cited as a gold standard for developer-facing changelogs. Each entry follows a tight format: version, date, what changed, and a direct link to the relevant documentation. Here is an example following that pattern:
v2.8.0 — March 27, 2026
Added Team workspaces — Invite collaborators with role-based permissions (Admin, Editor, Viewer). Workspaces are available on all paid plans. Setup guide →
Improved File uploads — Maximum file size increased from 25MB to 100MB. Supported formats now include HEIC and WebP.
Fixed Date picker — Dates near daylight saving time boundaries were sometimes off by one day. Resolved for all time zones.
Breaking Webhook payload format change — The user_id field in all webhook payloads now returns a UUID string instead of an integer. Update your webhook handlers before May 1, 2026. Migration guide →
Ready to Launch Your Product?
Pair your changelog strategy with a strong launch email. Our guide covers every element of a product launch email that actually converts.
Read: How to Write a Product Launch EmailAutomating Your Changelog
Manual changelogs are better than no changelogs, but for teams shipping frequently, automation removes the friction that causes changelogs to fall behind. The key is adopting a structured commit message convention that gives your tools enough information to generate draft entries automatically.
Conventional Commits
Conventional Commits is a lightweight specification for writing structured git commit messages. The format is: <type>[(scope)]: <description>. The most common types are:
feat:— A new feature (maps to a MINOR version bump in semantic versioning)fix:— A bug fix (maps to a PATCH bump)docs:— Documentation changes onlyrefactor:— Code change that neither fixes a bug nor adds a featureperf:— A performance improvementBREAKING CHANGE:— Included in the commit footer for any commit that introduces a breaking API change (maps to a MAJOR bump)
# Examples of conventional commits feat(auth): add Google OAuth sign-in fix(dashboard): correct date offset near DST boundaries perf(search): rewrite index for 3x faster queries on large workspaces feat(api)!: change user_id field from integer to UUID # Breaking change with footer feat(webhooks): update payload schema BREAKING CHANGE: user_id is now a UUID string. Update webhook handlers before May 1, 2026.
Once your team adopts this convention consistently, tools like standard-version, semantic-release, and Release Please (Google's GitHub Action) can automatically generate CHANGELOG.md entries and bump version numbers based on your commit history. You review and edit the draft — the tool does the collection and formatting work.
Semantic Versioning Automation
Semantic versioning is easiest to automate when your commit messages follow the Conventional Commits spec. The rule is straightforward: any BREAKING CHANGE footer triggers a MAJOR bump, any feat: commit triggers a MINOR bump, and any fix: commit triggers a PATCH bump. Everything else (docs, refactor, perf, style, test) triggers no automatic version bump.
For teams using GitHub, Release Please by Google is the simplest path to full automation — it opens a pull request automatically whenever it detects releasable commits, with a pre-populated CHANGELOG.md entry and updated version number. You review the PR, merge it when you want to ship, and a GitHub Release is created automatically.
Free Changelog Tools
You do not need expensive software to publish a good changelog. These five free tools cover most use cases.
1. GitHub Releases
FreeGitHub Releases turns your git tags into published release pages with formatted changelogs. You can write entries manually in Markdown or auto-generate a draft from commit messages and merged pull requests. Every release gets a permanent URL, RSS feed, and can trigger notifications to users who "watch" your repository. For open source projects and developer tools, this is the most natural home for a changelog.
- 100% free, no limits
- Integrates natively with your git workflow
- Auto-generates draft from PR history
- RSS feed for subscribers
- Only useful if your code is on GitHub
- No in-app widget or email digest
- Limited branding customization
2. Changelogfy
Free plan availableChangelogfy is a purpose-built changelog tool with a hosted public page, an in-app widget you can embed with a JavaScript snippet, and a simple editor for writing entries. The free plan supports one project with unlimited entries and the widget. It is the fastest way to get a polished, embeddable changelog without any infrastructure work. The in-app widget shows a notification badge when there are unread updates, which is one of the highest-engagement distribution mechanisms available.
- In-app widget with unread badge
- Hosted public changelog page
- Simple, clean editor
- Free for one project
- Limited customization on free plan
- Changelogfy branding on free tier
3. Headway
Free for small teamsHeadway is one of the most popular dedicated changelog tools, used by companies like Buffer and Hotjar. It offers a hosted changelog page, an embeddable in-app widget, and an email digest for subscribers. The free plan covers teams up to a certain monthly active user threshold, making it suitable for early-stage products. Headway's widget is particularly polished — it slides out as a sidebar overlay that feels native inside a SaaS app.
- Polished in-app widget
- Email subscriber digest
- Segments updates by label
- Used by well-known SaaS companies
- Free plan has MAU limits
- Paid plans are not cheap at scale
4. Notion Public Page
Free plan availableNotion's free plan allows you to publish any page as a public web page with a shareable URL. A Notion changelog is just a database with a date, version, and body field — you can use the gallery, timeline, or list view to present entries cleanly. This is the lowest-friction option for early-stage teams that already use Notion and want a changelog fast. The limitation is that you lose the in-app widget and email digest features of dedicated tools.
- Zero setup if already using Notion
- Flexible formatting with rich Markdown
- Free tier covers most early teams
- Easy to add images and videos
- No in-app widget or email digest
- Notion branding on public pages
- Limited SEO control
5. Beamer (Free Plan)
Free for low-traffic productsBeamer is a full-featured changelog and announcement platform with an in-app sidebar widget, push notifications, emoji reactions, and a public changelog page. The free plan includes all core features but has limits on monthly unique visitors. For products in early traction with fewer than a few thousand monthly users, Beamer's free plan is extremely capable — you get a professional-grade experience that would cost hundreds of dollars per month on competitor tools at scale.
- Emoji reactions and user engagement metrics
- Push notification support
- Segmented announcements by user plan
- Full-featured free plan for small products
- Visitor limits on free tier
- Paid plans escalate quickly at scale
Want to Turn Updates Into Email Campaigns?
A changelog entry is the seed for a great product update newsletter. Our guide on building an email newsletter covers list-building, frequency, and what to include.
Read: How to Create an Email NewsletterDistribution Strategies: Getting Users to Actually See Your Changelog
Writing a great changelog is only half the work. The other half is making sure users see it. Here are the most effective distribution channels, roughly ordered by engagement rate.
In-App Widget (Highest Engagement)
An in-app widget — a bell icon or "What's New" button in your app's navigation — is the highest-reach distribution channel for most SaaS products because it meets users where they already are. Tools like Headway, Beamer, and Changelogfy make this a 5-minute implementation with a JavaScript snippet. A notification badge showing the number of unread updates drives click-through rates significantly higher than passive links.
Best practice: surface the widget in a consistent, findable location (the top navigation bar is standard) and show the unread count badge only for entries published in the last 30 days. After 30 days, consider the update "seen" and reset the badge. Over-badging trains users to ignore it.
Email Digest
For major releases, an email to your active user list consistently outperforms passive discovery channels. The key is to make the email feel like a curated highlight reel rather than a changelog dump — pick the two or three most significant changes, explain the user benefit of each, and link to the full changelog for readers who want the rest. Keep it short. A good product update email is scannable in under 60 seconds.
For the template and structure of a strong product announcement email, see our guide on how to write a product launch email — the principles transfer directly to regular update emails.
Dedicated Public Changelog Page
A public changelog page serves as the long-term reference destination for all your updates. It has SEO value (users searching for recent changes to your product will find it), gives enterprise buyers confidence that your product is actively maintained, and provides a link you can include in your support documentation, onboarding emails, and product footer.
Use a clean URL like yourproduct.com/changelog or changelog.yourproduct.com. Include a link to it in your main navigation or footer so it is findable. If you host it on a third-party tool like Headway or Beamer, consider setting up a canonical redirect from your own domain so the URL reflects your brand.
Social Media
Sharing changelog highlights on LinkedIn, X (Twitter), and relevant community forums (Product Hunt, Hacker News Show HN, your niche Slack or Discord groups) amplifies reach to people who are not yet users but are evaluating your product. The key is to frame updates as value delivered, not features shipped — "we just made search 3x faster" is a better social post than "v2.8.0 is now live."
For high-profile releases, consider a short demo video (Loom works well) showing the new feature in action. Video posts consistently outperform text-only announcements on every major social platform in 2026.
Blog Post for Major Releases
A dedicated blog post for a major release gives you full creative control over framing, storytelling, and SEO targeting. It also lets you go deep — you can include screenshots, a customer story about why you built the feature, and a technical deep dive for power users. Pair a blog post with a push through all your other channels (in-app, email, social) for maximum impact on launch day.
If you are building a SaaS product and want to understand how blog posts fit into a broader growth strategy, our guide on how to build a SaaS product covers content marketing and SEO-driven growth from first principles.
Frequently Asked Questions
A changelog is a running, human-readable log of all notable changes to a product, maintained in reverse chronological order and intended for ongoing reference. Release notes are typically published as a one-time document accompanying a specific release and may include more marketing language, screenshots, and calls to action.
Changelogs tend to be more technical and comprehensive; release notes tend to be more polished and promotional. For a SaaS product, you often need both: a changelog for power users and developers who want the full history, and release notes for in-app announcements targeting general users. The two formats complement each other rather than replace each other.
Publish a changelog entry every time you ship something users would care about. For most SaaS teams shipping continuously, that means batching small fixes into a weekly or bi-weekly digest and publishing major features immediately when they ship. Avoid publishing so infrequently that entries become overwhelming walls of text, and avoid publishing so frequently (every minor bug fix) that users tune out.
A good baseline: one weekly or bi-weekly entry covering fixes and improvements, plus individual entries for any significant new feature. If you are on a scheduled release cycle (monthly releases), publish on each release date. Consistency matters most — an irregular changelog that goes silent for months trains users to stop reading.
A good changelog omits internal refactoring that does not affect user-facing behavior, dependency version bumps (unless they fix a user-visible bug), infrastructure changes users cannot perceive, and failed experiments that were reverted before release. Also avoid marketing language in the changelog itself — save the promotional framing for your in-app announcement or email.
Never use the changelog to bury bad news: if you removed a feature or changed pricing, state it clearly rather than hiding it under vague language. A changelog is a trust document. Users who catch you minimizing or concealing breaking changes will lose confidence in everything else you publish.
Semantic versioning (MAJOR.MINOR.PATCH, e.g. 2.4.1) is strongly recommended for any product with an API, SDK, or integration dependencies — it gives developers a machine-readable signal about the scope of changes without reading the full entry. For consumer SaaS products with no public API, date-based versioning (e.g. 2026-03-27) is often simpler and equally effective, since most end users do not reason in version numbers.
The most important thing is to be consistent: pick a versioning scheme and stick to it. Never reuse or skip version numbers. If you use semantic versioning, increment MAJOR only for breaking changes, MINOR for new backwards-compatible features, and PATCH for bug fixes — and document this convention in your changelog so readers understand what each increment signals.
The best free options for publishing a changelog are: GitHub Releases (free, integrates with your git workflow, supports Markdown, ideal for open source and developer tools), Notion (free tier covers most small teams, flexible formatting, easy to share as a public page), Changelogfy (free plan includes a hosted changelog page with a customizable widget), Headway (free plan for small teams, includes an in-app widget and email digest), and Beamer (free plan for low-traffic products, supports in-app notifications and emoji reactions).
For teams following conventional commits, tools like standard-version and Release Please can auto-generate draft changelogs from your git history, dramatically reducing the manual work of keeping a changelog up to date.
Build a Product Worth Announcing
A great changelog is only as good as the product behind it. If you are still building your SaaS foundation, our complete guide walks you through every stage from idea to launch.
Read: How to Build a SaaS Product