Client-only plugin. SSR-safe, auto-imported, works with Nitro.
Nuxt's plugin system makes this a single file. Mark the plugin client-only so it never runs during SSR, then auto-import handles the rest. Compatible with Nuxt 3 and Nuxt 4.
npm install @usero/sdkimport { initUseroFeedbackWidget } from '@usero/sdk'
export default defineNuxtPlugin(() => {
const widget = initUseroFeedbackWidget({
clientId: 'YOUR_CLIENT_ID',
})
if (import.meta.hot) {
import.meta.hot.dispose(() => widget.destroy())
}
})Replace YOUR_CLIENT_ID with the id from your Usero dashboard.
Built for Nuxt 3
The plugin filename suffix tells Nuxt to skip it during SSR. Server bundles stay free of widget code.
No registration step. Drop the file into plugins/ and Nuxt picks it up.
The widget tears down cleanly during hot reload so you do not pile up triggers in dev.
Cloudflare, Vercel, Netlify, Bun. The widget runs only in the browser, so the server target does not matter.
Canny ships a Vue module that adds a runtime config requirement. Usero is one client plugin, no config file changes.
FAQ
No. The .client.ts filename tells Nuxt to bundle the plugin for the browser only. SSR pages render without it.
At the end of document.body, outside your Nuxt app root. It is unaffected by page transitions.
Yes. The widget has its own scoped styles. It does not pick up your Tailwind classes or design tokens unless you pass a theme.
Pass metadata: { userId: useUser().value?.id } when initializing the widget after login.
Free tier. No credit card. Two-minute install. Cancel by deleting two lines of code.
Install guides