Add one partial to your baseof.html layout. Zero runtime, static output.
Hugo builds static HTML, so the widget is purely a client-side script you drop into the layout. Add it to baseof.html before the closing body tag and every generated page ships with it.
<body>
{{ block "main" . }}{{ end }}
<script src="https://unpkg.com/@usero/sdk"></script>
<script>
Usero.initUseroFeedbackWidget({ clientId: "YOUR_CLIENT_ID" });
</script>
</body>Replace YOUR_CLIENT_ID with the id from your Usero dashboard.
Built for Hugo
baseof.html wraps every page Hugo renders, so a single edit there puts the widget on every post, page, and section list.
The script is loaded from a CDN, so you do not run it through resources.Get or Hugo Pipes. Add the tag and rebuild.
Hugo emits the script tag into the HTML unchanged. There is no server runtime, the widget is the only JS you added.
If your theme ships its own baseof.html, copy it into your project layouts to override, then add the script. Hugo prefers your copy.
Frill embeds an iframe that fights a static site's lean output. The vanilla SDK is one 12kb script that keeps Hugo output close to static.
FAQ
layouts/_default/baseof.html, before </body>. It is the base template every page extends, so the widget then appears site-wide.
No. The CDN script tag needs no asset pipeline. If you want to self-host the bundle, drop it in static/ and reference that path instead.
Copy the theme's baseof.html into your project's layouts/_default/ to override it, then add the script. Hugo's lookup order prefers your project copy.
Yes. The widget is independent of how your templates are sourced. Module-based or local, the script tag behaves the same.
Free tier. No credit card. Two-minute install. Cancel by deleting two lines of code.
Install guides