Ember

Feedback widget
for Ember.

Init in an Application Route or an instance-initializer. Octane-friendly.

Ember apps are long-lived single pages, so the widget wants to boot once at app start. An instance-initializer is the cleanest hook: it runs after the app boots in the browser and gives you a place to tear down on teardown.

~12kb
gzipped
0
config
MIT
license
Install2 steps
> ~ install· bash
npm install @usero/sdk
> app/instance-initializers/usero.js· js
import { initUseroFeedbackWidget } from '@usero/sdk'

export function initialize(appInstance) {
  const widget = initUseroFeedbackWidget({ clientId: 'YOUR_CLIENT_ID' })
  appInstance.reopen({ willDestroy() { widget.destroy(); this._super(...arguments) } })
}

export default { initialize }

Replace YOUR_CLIENT_ID with the id from your Usero dashboard.

Built for Ember

Why teams shipping with Ember pick Usero.

Instance-initializer runs once per boot

It fires after the app instance is created in the browser, the right moment to mount a widget that should live for the whole session.

No Ember addon to install

The vanilla SDK is plain JS, so it goes straight into your app tree. There is no ember-usero addon to keep in sync with Ember releases.

Octane and classic both work

Instance-initializers predate Octane and still work in it. Glimmer components and tracked properties never interact with the widget.

Teardown on app destroy

Hooking willDestroy means FastBoot reboots and tests that recreate the app instance do not leak triggers into the DOM.

Productboard expects a hosted portal page. The vanilla SDK is a 12kb script that sits on top of your existing Ember UI.
vs Productboard portal

FAQ

Quick answers, Ember edition.

Initializer or instance-initializer?

Instance-initializer. A plain initializer runs during FastBoot SSR too, where window does not exist. The instance variant runs per app instance, which in the browser is what you want.

Is there an Ember addon?

No, and it is not needed. The vanilla SDK is a single import and a single call, which is less surface than an addon would add.

Does it work with FastBoot?

Keep the init in an instance-initializer and guard with a typeof window check if you render server-side. The SDK reads window, so it must only run client-side.

Where does the widget render?

At the end of document.body, outside your Ember application root, so the Glimmer rendering layer never touches it.

Ship a feedback widget in your Ember app today.

Free tier. No credit card. Two-minute install. Cancel by deleting two lines of code.

Get started free