A changelog tool for dev tool and API companies.
A changelog that closes the loop.
Your users ask for something. Your team ships it. The person who asked gets told. Entries are drafted from merged pull requests, held for your review, and published to a JSON feed or a two-line widget inside your product.
Free for one repository. No card required.
Dark mode is here
Turn it on in Settings, or let it follow your system theme.
Posted to issue #482, where it was asked for
Webhooks retry for 24 hours
Failed deliveries retry with backoff, and every attempt shows in the dashboard.
CSV exports keep your time zone
Timestamps in an export now match the ones in the app.
What your users read. Drafted from the merged pull request, published once you approve it.
- Public JSON feed on every plan
- Widget embed is two lines
- Drafts wait for review by default
- Free for one repository, no card
Your changelog, rendered by your own code
The feed is a plain public endpoint with CORS open to any origin, so you can read it from a page, a build step or curl. Ten lines of React and your changelog is part of your product instead of a link away from it.
- Filter by repository, page with a cursor, up to 50 entries a call
- Strong ETag and a 60 second Cache-Control, so an unchanged feed answers 304
- A roadmap feed too, in three fixed columns: planned, building, shipped
const ID = 'YOUR_ID'; const API = 'https://api.changeloop.dev'; export function Changelog() { const [entries, setEntries] = useState([]); useEffect(() => { fetch(`${API}/v1/public/${ID}/changelog.json`) .then((r) => r.json()) .then((feed) => setEntries(feed.data)); }, []); return entries.map((e) => <Entry key={e.id} {...e} />); }
Or embed it in two lines
A custom element that renders into a shadow root, so it neither inherits your styles nor leaks into them. It carries three tabs: your updates, your roadmap, and a box your users can write in.
- Two attributes, your feed id and the API origin
- Pin a version and its bytes never change, or take the newest build automatically
- No npm package, no build step, no key to rotate
Drafted on merge, held for a human
A pull request merges into your default branch. Changeloop reads its title and description and writes an entry for the people who use your product. Your source code is never part of that.
- Dependency bumps, CI work and refactors are filtered out before anything is drafted
- Drafts sit in the review inbox, where you edit the wording, approve, or discard
- Auto-publish is there per repository, off until you switch it on
Dark mode is here
Turn it on in Settings, or let it follow your system theme.
A request arrives as an issue and leaves as an entry
On GitHub, the widget's feedback box opens a labelled issue in your own repository, so it lands in the triage you already do. Merge a pull request that says fixes #12, approve the entry, and we comment on that issue with a link to what shipped.
- Three labels on every issue: bug or feature-request, a priority, and from-widget
- The sender's email address never reaches the issue, or the model that classifies it
- They check the status themselves in the widget. We do not send them an email yet.
Dark mode, please
Filed automatically from the feedback widget.
Shipped: Saved views on the inbox
What every plan includes
Changelog JSON feed
Published entries, newest first, filterable by repository and paged with an opaque cursor.
Roadmap JSON feed
Planned, building and shipped, always in that order, driven by labels on your own GitHub issues.
Embeddable widget
A custom element in a shadow root, with updates, roadmap and feedback in three tabs.
A hosted page, as a fallback
A plain page for your feed, for before you have built your own and for the links we leave on issues.
Drafted from merged pull requests
The title and description of a merge become a customer-facing entry. Not the code.
Review inbox
Edit the wording, approve, or discard. A discarded draft can be restored later.
Internal changes filtered out
Dependency bumps, CI changes, refactors and typo fixes never reach the queue.
Feedback in your own GitHub repository
On GitHub, widget submissions open labelled issues in your repo, with the sender's email address stripped out. GitLab and Bitbucket projects feed the changelog only.
Flat team pricing
One price for unlimited repositories on the Team plan. No per-repository tax.
Questions an engineer asks first
Can I render the changelog in my own UI?
Yes, and that is the point. Every published entry is served from a public JSON feed with CORS open to any origin, no key and no sign-in, so ten lines of React is enough to render it in your own components. The developer docs carry every endpoint, field and status code.
What does the widget need from me?
A script tag and one element with two attributes, your feed id and the API origin. It renders into a shadow root, so your CSS and its CSS never meet. It shows updates, roadmap and a feedback box.
What does Changeloop read from my repository?
On GitHub, the title and description of pull requests that merge into your default branch, plus repository metadata. The GitHub App has no permission to read your repository's files, every Changeloop build is checked to make sure it never requests a diff, and anything that looks like a secret is removed before a draft is written. It works through short-lived installation tokens rather than a personal access token. GitLab and Bitbucket send the same kind of data through a webhook you add.
Does anything publish without me?
Not unless you ask for it. Drafts wait in the review inbox until someone approves them, and auto-publish is a per-repository switch that stays off until you turn it on.
What happens to feedback my users send?
On GitHub, it opens a labelled issue in your own repository, tagged bug or feature-request with a priority and a from-widget label, so it lands in the triage you already do. A GitLab or Bitbucket project feeds your changelog, but not this. Filing an issue needs an access token we deliberately do not ask for, and Bitbucket removed its issue tracker in August 2026. The sender's email address is stripped before the message reaches that issue or the model that classifies it. When you approve the entry that ships it, we comment on the issue with a link to what shipped, and the sender can see the status in the widget. We do not send them an email, that part is not built yet.
What is free and what is paid?
The free plan covers one repository with 20 AI generations a month, and it includes the changelog feed, the roadmap feed, the widget and the hosted page. The Team plan is one flat price for unlimited repositories.
FROM THE BLOG
Notes on the practice
Release notes practice
How to write release notes people actually read
API changes
What is a breaking change, and how to ship one
Feedback loop
Closing the customer feedback loop from the changelog side
Put your changelog inside your product.
Create a free account, connect one repository, and point your own UI at the feed.


