Drop one script into your Blade layout. Works with Blade, Livewire, Inertia.
Laravel renders HTML server-side through Blade, and the widget is a client script that rides along. Put it in your root Blade layout before the closing body tag and every view that extends the layout gets the widget.
<body>
@yield('content')
<script src="https://unpkg.com/@usero/sdk"></script>
<script>
Usero.initUseroFeedbackWidget({
clientId: "YOUR_CLIENT_ID",
metadata: { userId: "{{ auth()->id() }}" }
});
</script>
</body>Replace YOUR_CLIENT_ID with the id from your Usero dashboard.
Built for Laravel
Views extend a root layout like layouts/app.blade.php. Adding the script there once puts the widget on every page that uses the layout.
Interpolate auth()->id() or the user email into the metadata, so feedback arrives attributed to the logged-in Laravel user.
Livewire keeps the page mounted, and the widget sits outside its DOM. With Inertia, place the init in the root Blade view so it survives client navigations.
The CDN script needs no Laravel Mix or Vite build entry. If you do bundle, you can npm install @usero/sdk and import it from resources/js instead.
Canny needs its own account plus a 200kb iframe. Usero is one 12kb script in your Blade layout, with the draft-PR pipeline behind it.
FAQ
Your root layout, commonly resources/views/layouts/app.blade.php, before </body>. Views that @extends that layout then include the widget.
Yes. Interpolate Blade into the metadata, for example metadata: { userId: "{{ auth()->id() }}", email: "{{ auth()->user()?->email }}" }.
Yes. With Livewire the widget sits outside the component DOM. With Inertia, init from the root Blade view so the single instance survives Inertia navigations.
Optional. npm install @usero/sdk and import initUseroFeedbackWidget from resources/js/app.js if you prefer bundling over the CDN tag.
Free tier. No credit card. Two-minute install. Cancel by deleting two lines of code.
Install guides