ReleasePad
Features
In-App Widget · 4.3kb

Your changelog,
right inside your app.

Stop hoping users find your update emails. Drop a tiny widget into your product and every customer sees what's new the moment they log in — no extra tab, no extra effort, no extra tools.

app.yourproduct.com/dashboard
3 WHAT'S NEW
What's New
New Today

Slack integration is live

Post every release straight to your team's channel automatically.

Improved 2 days ago

Faster dashboard rendering

4.3kb
Widget size
gzipped, that's it
30s
Setup time
paste & ship
0
Dependencies
vanilla JS
2x
Styles available
bubble & tab
Definition

What is an in-app changelog widget?

An in-app changelog widget is a small, embeddable UI element — usually a floating bubble or side tab — that surfaces your latest product updates directly inside your application. Instead of relying on emails, tweets, or blog posts to reach customers, the widget meets users where they already are: logged in and using the product. One snippet of HTML installs it, and an unread badge tells each user when something new has shipped.

The problem

You ship updates. Nobody notices.

You spend weeks building. You ship. Then it's silent. The email gets archived, the tweet scrolls past, the Slack message disappears under three more messages. The feature exists — but for most of your users, it doesn't.

Email open rate: 22%

Most release emails get buried. Even when people open them, they skim past the update they actually needed.

Your blog has 50 readers

Your blog reaches a tiny fraction of your users. The ones who'd benefit most from knowing what's new are working inside your product, not browsing your marketing site.

Support inbox repeats

"Does it do X?" "When will Y come out?" Half your tickets are about features you already shipped. The information existed — they just never saw it.

💡 There's exactly one place every user already is: your app.
How it works

Three lines of HTML. That's the whole install.

Copy the snippet from your dashboard, paste it wherever you want the widget to appear, and you're done. No npm, no build step, no framework lock-in.

your-app.html
paste
<!-- Paste anywhere in your app -->
<div id="rp-widget" class="rp-container"
  data-param="YOUR_JWT_TOKEN"
  widget-style="tab"
  widget-position="right"
  widget-label="What's new"></div>

<script src="https://widget.releasepad.io/releasepad-bundle.js"></script>
<link rel="stylesheet" href="https://widget.releasepad.io/releasepad-bundle.min.css">
1

Copy from dashboard

Your snippet is generated automatically and includes your JWT token.

2

Paste in your app

React, Vue, Rails, plain HTML — anything that renders a DOM works.

3

Ship as usual

Every new release shows up automatically. Nothing else to maintain.

Two styles

Pick the look that matches your app.

Both styles support left/right positioning, light or dark mode, and your brand color. Switch them with a single attribute.

3

Bubble

widget-style="bubble"

A floating circular button in the corner of your app. Subtle when there's nothing new, eye-catching when there is — with a notification badge that counts unread releases.

  • Stays out of the way until needed
  • Optional shake animation draws the eye
  • Best for chat-style or consumer apps
Popular
3 WHAT'S NEW

Tab

widget-style="tab"

A vertical tab that lives flush against the side of your app. Always visible, always inviting, with your own label — "What's new", "Updates", "Changelog", anything you want.

  • Higher discoverability than bubble
  • Custom label in your own voice
  • Best for dashboards & B2B SaaS
Why an in-app widget wins

Reach users where they already are.

Email, blog posts, and tweets compete with everything else for attention. The widget meets users at the only place they're 100% focused on your product — inside it.

Catch users at their most receptive moment

When a customer logs in to your product, they're already in your world. That's when telling them about a new feature actually makes them want to try it — not when they're triaging email or scrolling Twitter. Context turns updates into discoveries.

Drive feature adoption that you can measure

You shipped it — now make sure it gets used. Customers who see a release inside the product are dramatically more likely to actually click into the new feature than those who only see it in an email. The widget closes the gap between "we shipped X" and "they're using X".

Reduce repetitive support tickets

"Does this support X?" "When are you going to add Y?" Half your support load is about features that already exist. The widget surfaces every change automatically — see our setup guide for placement tips that maximize visibility.

Make momentum visible — and reduce churn

Users churn from products that feel stagnant. When every login shows fresh activity — a new feature, a fix that affects them, an improvement they asked for — your product feels alive. That perception of momentum is one of the cheapest retention tools you have.

A built-in marketing channel you already own

Every login is an impression. Every release is a touchpoint. You don't pay for the distribution, you don't fight an algorithm, you don't need anyone's permission — your highest-intent audience is already inside your app, ready to be told what's new.

Build trust through visible progress

Customers want to know the product they bought is still being improved. The widget is proof, on every screen: this team ships, this team listens, this team is investing in what I'm using. That trust pays back in renewals, referrals, and forgiveness when something goes wrong.

Make it yours

Looks like part of your product. Because it is.

Every visual decision is up to you. Match your brand, your tone, your placement, your language — without writing a line of custom CSS.

Your brand color

Set a single hex value and the widget header, accents, and badge adapt instantly. No themes to maintain.

Light
Dark

Light or dark mode

Toggle dark mode from your dashboard — perfect for IDEs, analytics tools, and any product where dark is the default.

Left or right side

Some apps have a left rail, some a right. The widget plays nice with both — just flip the position attribute.

EN ES + more soon

Built-in translations

UI strings ship in English and Spanish out of the box. Set lang and the widget speaks your users' language.

! When something's new

Optional attention nudge

A subtle bounce or shake when unread posts exist. Pulls the eye without being annoying — disable any time.

What's new Updates Changelog

Custom tab label

Use your own words. Whatever your users already know — "Updates," "Release Notes," "Shipped," "Patch Notes" — works.

New Improved Fix

Filter by category

Show only the categories you want at a given placement. New features in your marketing site, all categories inside the app — your call.

Multiple products

One per product, side by side

Run separate widgets for separate products with separate tokens — each with its own brand, label, and feed.

3 Smart unread count

Per-user unread badge

Each visitor sees a count of posts they haven't opened yet. Clears automatically when they engage, comes back when you ship the next one.

Built like a guest, not an intruder

Tiny footprint. Zero baggage.

We obsess over the widget's bundle size because nobody should have to choose between communicating with users and a fast app. 4.3kb gzipped — lighter than most logo files — and it loads asynchronously, so it never blocks anything in your product.

  • No frameworks. No dependencies. No build step.

    Vanilla JavaScript that runs anywhere — React, Vue, Angular, Rails, WordPress, plain HTML. It doesn't care.

  • JWT-secured, scoped to your product.

    Each widget uses a signed token that scopes it to your data only. Token and user metadata are never written to cookies.

  • Loads from a CDN, cached aggressively.

    Served from widget.releasepad.io — cached at the edge, instant on repeat visits.

  • Infinite scroll, no API fatigue.

    Pagination is built in — fetches more posts on scroll, never loads everything at once. Stays fast at 1 release or 1,000.

Bundle size comparison gzipped
ReleasePad widget 4.3 kb
Typical favicon 15 kb
Average web font 45 kb
Competing changelog widgets ~106 kb
Loading sequence
  1. GET releasepad-bundle.js 200 12ms
  2. GET releasepad-bundle.min.css 200 8ms
  3. GET api/v1/get-widget 200 42ms
  4. GET api/v1/index-public-post 200 35ms

All async — never blocks your app's first paint.

Where it shines

Made for teams who ship more than they market.

If your product has a logged-in surface, the widget belongs in it.

B2B SaaS dashboards

Your power users live in the dashboard. Telling them what shipped is one paste away.

Admin & internal tools

Operations teams notice every change. Put updates in the admin panel where they'll see them first.

Developer tools & APIs

Devs love a clean changelog. Surface SDK changes, new endpoints, and breaking-change warnings inline.

Consumer apps & PWAs

The bubble style fits cleanly next to chat widgets and in-app menus on consumer-facing products.

Versus everything else

Why not just send an email?

Email, Slack, blog posts, and tweets all have their place — but for getting users to actually see what you shipped, the widget wins on every metric.

Channel Reaches every user In-product context Searchable history Effort per release
ReleasePad widget None
Email newsletter Partial Partial Hours
Blog post Hours
Slack / Discord post Minutes
Twitter / LinkedIn Minutes
Beamer widget None
Headway widget None

Other in-app widgets (Beamer, Headway) cover the same channel — but typically ship larger bundles (~80–110kb), per-seat pricing, and more setup. See our breakdown of Beamer alternatives for the full comparison.

Widget FAQ

Common questions

Built and maintained by the ReleasePad team · Last updated

Anywhere inside the <body> of any page where users are logged in — your dashboard, settings, app shell, anywhere. The widget renders itself at a fixed position on the screen, so it doesn't matter where in the DOM it lives. Most teams paste it into their main layout file so it shows up automatically on every page of the product. See the setup guide for framework-specific tips.

No. The widget is 4.3kb gzipped — smaller than most favicons — and loads asynchronously from a CDN. It can't block your first paint, your hydration, or anything else. We measure this on every release and we'd never ship a version that regressed on bundle size.

Yes — and you don't need to install anything from npm. The widget is vanilla JS with zero dependencies, so framework-agnostic by design. Render the container <div> in your component, include the script tag once at the layout level, and the widget mounts itself.

Absolutely. Each product in your ReleasePad account gets its own JWT token — drop a separate widget block on each surface and they'll each show the correct feed, brand color, and label. Some teams even run two widgets side by side on the same page (e.g., one for the customer-facing product, one for the admin tool).

If the user has already opened the latest post, the badge disappears and the widget sits quietly in the corner — still accessible if they want to scroll through past releases. The badge only reappears when you publish something new that they haven't seen.

It stores the ID of the most recent post the user has opened in a first-party cookie tied to the widget container. We deliberately do not persist the JWT token or any user metadata in cookies — only the minimum needed to compute the unread badge. If you pass data-user-metadata, that's used in-memory for analytics but never written to the client.

Brand color, position, label, light/dark mode, and animation are all controlled from your dashboard — no code changes. For deeper visual customization, the widget's CSS classes are stable and documented, so you can override any rule from your app's stylesheet.

Yes. The widget's UI strings ship in English (lang="en") and Spanish (lang="es") — your release content itself can be written in any language you want. We're actively adding more locales.

Stop hoping users find your updates.

Put your changelog inside your product in the next 30 seconds. Free to start, $35/mo per product when you're ready to ship without limits.

Try me now!