Releaseo

The Releaseo widget: what it shows and how to install it

What the embeddable Releaseo widget shows, how to install it with one script tag or npm, how to identify users, and what it does to your bundle and cookies.

The widget is how a release reaches people inside your product. It is one script tag, 2,530 bytes gzipped, and its UI runs in an iframe so it never enters your bundle and sets no cookies. This guide covers what the widget shows, how to install it, and how to drive it from your own code. The SDK API reference lists every method.

What the widget shows

The widget reads its shape from your dashboard settings. Which tabs appear, what they are called and which icons they carry are all configured there, never hardcoded in the SDK.

  • Changelog. Published release notes and announcements, with unread state so a launcher badge can show how many the viewer has not seen.
  • Feature requests. List, search, detail, create, comments and voting. Only approved requests are public; new submissions start as pending until you review them in the dashboard. Creating, commenting and voting can require a signed-in viewer.
  • Roadmap. Items grouped by the columns you defined, with follow and unfollow. Visibility is set per item, so internal-only work never renders publicly.
  • Contact. A form whose fields you define: text, email, textarea, select and checkbox. Submissions land in the Contact Inbox, encrypted at rest.
  • Home Hub. A landing tab with a title, the latest announcements, a request-a-feature call to action, up to eight quick links and up to ten social links. Home actions can open the contact form, open the feature-request flow, open a safe external URL, or trigger a host action your app registered.

The dashboard never stores raw JavaScript, and the SDK only runs host actions that were registered through the public runtime API. Custom HTML, custom JavaScript and custom SVG payloads are rejected at the backend. Read more in Widget surfaces.

Installing it

Two script tags, no build step

The fastest install. Paste this once, before </body>, and a floating launcher appears on the page:

<script src="https://cdn.releaseo.io/sdk/v0/loader.js"></script>
<script>
  window.releaseo.init({ publishKey: "pk_live_xxx" });
</script>

The CDN quick start walks through a complete page, identifying users, wiring your own buttons and non-blocking async loading.

From npm

For JavaScript and TypeScript applications, install the typed facade and call init() once in browser-side code. The compatible runtime loads from the Releaseo CDN automatically, so runtime fixes arrive without reinstalling the package:

npm install @releaseo/sdk
import releaseo from "@releaseo/sdk";

releaseo.init({ publishKey: "pk_live_xxx" });

React and Vue teams can use the headless adapters, @releaseo/react and @releaseo/vue, which expose provider state, unread count and widget actions as hooks and composables. Applications that must pin the runtime inside their own bundle use @releaseo/sdk-core. The installation guide compares the paths.

Identifying signed-in users

After your own app signs a user in, pass a stable id and safe traits so the contact form can prefill and so segments can target them:

await releaseo.identify("viewer_123", {
  tenantId: "tenant_456",
  email: "viewer@example.com",
  name: "Demo User",
  userHash: "server-generated-hmac",
});

Fields stay editable in the contact form even when the SDK has prefilled them.

Opening it from your own button

You do not have to use the floating launcher. Any element on your page can open the widget, straight to a tab:

await releaseo.open();

In the header of this site, the “What’s new” button does exactly that and reads the unread count into its badge. In-app launches, by contrast, render on the host page itself rather than inside the widget: see In-app Launches.

What it does to your page

  • Bundle. Nothing. The loader is 2,530 bytes gzipped and the UI runs in an iframe.
  • Cookies. None.
  • Privacy. A GDPR erasure API deletes a single end user on request, and consent controls are part of the public runtime API.
  • Theming. Navigation tab style, colour mode and tokens are stored in the widget theme JSON and set from the dashboard. On Pro, the widget wears your brand instead of ours.

Where to go next