One script tag. No framework. No build step. Works on plain HTML pages.
For static sites, classic server-rendered apps, WordPress themes, or anywhere a build step would be overkill. Drop two script tags into your HTML and the widget appears.
<!doctype html>
<html lang='en'>
<body>
<!-- your page -->
<script src='https://unpkg.com/@usero/sdk'></script>
<script>
Usero.initUseroFeedbackWidget({
clientId: 'YOUR_CLIENT_ID',
})
</script>
</body>
</html>Replace YOUR_CLIENT_ID with the id from your Usero dashboard.
Built for Vanilla JS
Paste two script tags. No npm, no bundler, no toolchain. Works in any HTML page on any host.
unpkg and jsDelivr both serve the IIFE bundle automatically. Pin a version and it never changes underneath you.
The vanilla build never imports React. Plain HTML pages pay zero framework overhead.
WordPress, Ghost, Webflow, Squarespace, any platform that lets you paste raw HTML. The widget installs the same way.
Canny still requires an account dance and a 200kb iframe. Usero is a 12kb script with no iframe and no auth bridge.
Verify
Load the page in your browser with the script tags in place.
Confirm the feedback bubble appears in the bottom-right corner.
Click it and check the panel opens over your page.
Submit a test message and confirm the row appears in your Usero inbox.
Open the console and check there are no "Usero is not defined" errors.
Troubleshooting
Your init script runs before the SDK script has loaded. Put the <script src> tag before the inline init script, and place both just before </body>, or add defer to the SDK script tag.
Make sure the init runs after the DOM is ready. If you put the snippet in the <head>, wrap the init in a DOMContentLoaded listener or move both script tags to the end of <body>.
The init ran more than once. If your site loads partials or pages over AJAX, the snippet is being re-included on each fragment. Include it once on the full-page shell, not in every partial.
Check the clientId in the init call matches the id in your Usero Settings, with no stray quotes or whitespace. A wrong id silently drops submissions.
Pin a version in the script src (for example https://unpkg.com/@usero/sdk@latest) and confirm the URL returns 200 in the Network tab. A blocked or 404 script means the global never loads.
FAQ
Yes. The script tag installs a global Usero object on window. Call Usero.initUseroFeedbackWidget(...) from any script.
Yes. Download the IIFE bundle from unpkg or npm and serve it from your own domain.
Yes. Paste the script tags into your theme footer or a "code injection" field. Every page picks up the widget.
The widget tolerates deferred and async loading. It boots whenever the script finishes parsing.
Free tier. No credit card. Two-minute install. Cancel by deleting two lines of code.
Install guides