data-theme
auto | light | dark
Defaults to auto, which follows the visitor's system setting. Pin it if your app doesn't.
Widgets
A public page only reaches the people who go looking. The widgets put the same changelog, the same board and the same uptime inside the product your users are already in — one script tag, then an attribute wherever you want something to appear.
<script src="https://feedfa.st/embed.js" data-project="your-project" defer></script>That’s the whole installation. Everything below is one more attribute.
Feedback
<button data-feedfast="feedback">
Send feedback
</button>
<!-- Any element works, styled however you like -->
<a href="#" data-feedfast="feedback">Report a bug</a>Nobody has to make an account
Changelog
<div data-feedfast="changelog"
data-variant="card"
data-limit="2"></div><div data-feedfast="changelog"
data-variant="inline"
data-limit="4"></div>Uptime
<div data-feedfast="uptime" data-days="60"></div><div data-feedfast="uptime"
data-compact="true"
data-overall="false"></div>What's new badge
The floating badge is switched off on this page — this site runs its own in the same corner. On your site it appears by itself.
<!-- On by default. To move it: -->
<script src="https://feedfa.st/embed.js"
data-project="your-project"
data-position="bottom-left"
defer></script>
<!-- Or turn it off and open it yourself: -->
<script ... data-badge="false" defer></script>
<button onclick="Feedfast.openChangelog()">What's new</button>Make it yours
data-theme
auto | light | dark
Defaults to auto, which follows the visitor's system setting. Pin it if your app doesn't.
data-accent
#4F46E5
Overrides your project's accent for this embed. Label contrast is recalculated from it, so text on the button stays readable whatever you pick.
data-position
bottom-right | bottom-left
Where the floating badge sits. Set data-badge="false" to remove it entirely.
data-limit / data-days
5 / 90
How many changelog entries, and how many days of uptime history. Both clamp to what the plan allows rather than erroring.
Every attribute, including the ones this page skips, is listed in the docs — along with the JSON payload the widgets read, so you can build your own.
Identity
<script src="https://feedfa.st/embed.js"
data-project="your-project"
data-user-id="4821"
data-user-name="Ada Lovelace"
data-user-email="[email protected]"
data-user-signature="${hmac}"
defer></script>Unsigned identities work and are attributed — they just carry no more weight than a typed name, because anyone can edit your HTML. Sign the identity with your project secret and the post renders with a verified badge.
Why the distinction matters
What it costs your page
defer, so it never blocks rendering.Feedfast.mount() after a client-side route change.Questions
About 14 KB gzipped, served with a five-minute edge cache and a day of stale-while-revalidate. It has no dependencies and no framework — it is one file of plain JavaScript that you load with defer, so it never blocks your page.
No. Every widget renders inside a shadow root, so your styles cannot reach in and its styles cannot leak out. That is also why it looks the same on a Tailwind site and a Bootstrap one.
No cookies at all. The only client storage is one localStorage key remembering which changelog entry you last read, so the unread dot knows whether to show. There is no analytics, no fingerprinting and no third-party request.
Your page is unaffected. The script loads with defer and renders nothing until its data arrives, so a failed request leaves the mount points empty rather than breaking layout or throwing into your console.
Yes. Pass their id or email on the script tag and posts arrive attributed without anyone typing their name. Sign that identity with your project secret and it renders with a verified badge, so you can tell an assertion from a fact. Unsigned identities still work — they just don't get the badge.
Yes. The script exposes window.Feedfast with openFeedback, openChangelog, close, refresh and mount. Use the data attribute for the common case and the JavaScript API when you need it from a menu item, a keyboard shortcut, or after a route change in a single-page app.
Free for one project, widgets included on every plan. The badge starts working the moment you publish your first entry.
A note about cookies
We use a couple of cookies to keep you signed in, and optionally one to remember your timezone. No analytics, no advertising, nothing shared with anyone.