Guide

How to embed a public changelog in your SaaS product

If your users do not know what changed, they assume nothing changed. A public changelog fixes that. The hard part is not writing the entries. The hard part is plumbing the publishing flow so it actually keeps up with your release cadence.

This guide shows the cleanest setup for a small SaaS team.

The three pieces you need

A changelog system has three parts.

1. A place to write entries (Markdown, Notion, or an admin panel).

2. A public page that shows them.

3. A way to surface new entries inside your product (an in app widget or a notification dot).

Most teams hand roll all three. The result is usually a Markdown file on GitHub Pages, a custom admin endpoint, and a half built widget that breaks when the layout changes.

A better path is to use a dedicated changelog tool that gives you all three out of the box and exposes an API so you can publish from your CI pipeline.

Step 1: Create a changelog account

Sign up at https://changelog.dranco.uk. The free tier gives you one changelog with a public URL like https://changelog.dranco.uk/c/yourcompany.

You will get an API key in your inbox.

Step 2: Publish entries from your release pipeline

This is where most changelogs die. People mean to write one when they ship a feature. Then they ship the feature, the meeting happens, the changelog never gets written.

Solve it by automating publishing as part of your release.

GitHub Actions example:

name: Publish changelog entry

on:
  release:
    types: [published]

jobs:
  publish:
    runs-on: ubuntu-latest
    steps:
      - name: Send to changelog
        run: |
          curl -X POST https://changelog.dranco.uk/api/entries \
            -H "X-API-Key: ${{secrets.CHANGELOG_API_KEY }}" \
            -H "Content-Type: application/json" \
            -d '{
              "title": "${{github.event.release.name }}",
              "content": ${{toJSON(github.event.release.body) }},
              "version": "${{github.event.release.tag_name }}",
              "type": "feature"
            }'

Now every time you cut a GitHub release, the body becomes a published changelog entry. No human writes the entry separately. You get one source of truth.

Step 3: Embed the widget in your app

Drop a single script tag in your app shell.

<script
  src="https://changelog.dranco.uk/widget.js"
  data-changelog="yourcompany"
  data-trigger=".changelog-button"
  async></script>

Then add a button anywhere in your UI with the class changelog-button. The widget pops a panel of recent entries when the user clicks. Auto includes a notification dot when there are unread entries.

Step 4: Offer an RSS feed

Every changelog gets an RSS feed at https://changelog.dranco.uk/c/yourcompany/rss. Power users will subscribe in Slack channels, in Feedly, in their own internal tooling.

Link it from your changelog footer. Half a line of HTML.

Why not just write Markdown to a repo

The Markdown file approach works for the first ten entries. Then you discover:

Three months of part time work to rebuild something you could have wired in twenty minutes.

What good changelog entries look like

Independent of the tool, good entries do three things.

They name the user benefit, not the feature. "Dark mode now follows your system preference" beats "Implemented theme detection logic."

They explain why. A one line context sentence turns a release note into a story. "Customers asked for this so often we just shipped it."

They link to the docs. Every entry should link to either the relevant doc page or the support article. Otherwise you get the same support ticket five times.

What it costs

changelog.dranco.uk is free for one changelog. £9/mo for ten changelogs with custom branding. Headway charges $29/mo for the same surface.

Bottom line

A public changelog is the cheapest piece of marketing your engineering team can ship. It tells your users you are alive. It gives sales something to point at. It compounds over time as your entry history becomes evidence that you actually ship.

Sign up at https://changelog.dranco.uk and wire it into your CI before lunch.

Try the Changelog Tool free

Public changelog, RSS feed, embeddable widget. Free for one changelog.

Get started