Tell your users what you shipped

rollout puts your release notes where people already are: a What's new feed inside your product, a public changelog on your site, and an email to your list. Write it once, publish it everywhere.

app.acme.comLive example, try it

The example feed needs JavaScript.

One announcement, three places

In your product

A What's new feed with an unread badge, as a ready-made widget or your own UI. Show an announcement to everyone, or only to the customers it concerns.

On your website

A public changelog as an API you render in your own design, plus RSS and JSON Feed for people who follow along.

In their inbox

rollout writes the campaign draft in Loops and keeps it up to date as you edit. You review it and press send; opens and clicks come back to rollout.

From merged to announced

  1. Write as you ship

    Each change gets a short snippet, tagged new, improved or fixed. Snippets wait in a backlog until you're ready.

  2. Bundle them

    Pick snippets for an announcement, put them in order and add an intro and a cover image. Paste Markdown if that's where your notes live.

  3. Publish or schedule

    It goes live everywhere at once, or at the time you set. Fixing a typo later doesn't mark it unread again, unless you want it to.

A few lines in your app

The widget is a custom element that works with any framework and fits your design: colours, fonts, radius and every part can be restyled. Or build your own feed on the headless client.

  • Signed identities. Your server signs who the user is, or you bring your auth provider's tokens.
  • Server API. Read state and feeds for your users from your backend, by your own user ids.
  • Small. The headless client is about 16 KB; the widget is a separate import.
Quickstart →
npm i @rollout/js

import { defineFeedElement } from '@rollout/js/ui'

defineFeedElement()

// <rollout-feed project-key="pk_live_…"></rollout-feed>
const feed = document.querySelector('rollout-feed')
// A signed token for the signed-in user, from your server:
feed.token = () =>
  fetch('/api/rollout-token').then((r) => r.text())

Your assistant drafts the release notes

rollout's MCP server lets Claude Code, Codex and Claude.ai work in your project: turn merged pull requests into snippets, draft the announcement, and publish it once you've agreed, if you allow that.

Set up the MCP server →
claude mcp add --transport http rollout https://api-staging.rollout.so/mcp \
  --header "Authorization: Bearer $ROLLOUT_API_KEY"

> Add backlog snippets for the pull requests I merged this week

Ship it, then say so