Feedback Widget
Collect feedback without pulling users out of your product. The widget adds a floating button to your site that opens a feedback panel where users can browse, search, vote, and submit posts.
How it works
The widget is a lightweight JavaScript SDK (~10 KB) that loads an iframe from your Quackback instance. It handles all rendering, authentication, and communication with your feedback portal.
The widget stays hidden until you call identify() from your app. This gives you full control over when the widget appears and who can use it. You can identify logged-in users with their details, or pass { anonymous: true } to show the widget to unauthenticated visitors.
On desktop, the widget opens as a 400 x 600px popover panel anchored to the bottom corner of the screen. The trigger button stays visible and toggles between open and close states.
On mobile (under 640px), it opens as a full-screen overlay that slides up from the bottom with a close button and backdrop. The transition between desktop and mobile layouts happens automatically based on viewport width.
Enable the widget
- Go to Admin → Settings → Widget
- Toggle the widget on
- Configure placement (bottom-right or bottom-left) and an optional default board
- Copy the embed snippet into your site
Start with the default settings. You can customize placement and restrict to a specific board later.
What users can do
From the widget panel, users can:
- Browse posts on your feedback boards, with board filter pills to narrow by category
- Search for existing feedback
- Vote on posts they care about
- Submit new posts when no existing feedback matches, with rich text formatting and images
- Read your changelog without leaving your app
- Browse your roadmap to see what's planned
When you identify users, votes and submissions are attributed to them automatically. You can also show the widget to unauthenticated visitors with anonymous identification, and control what anonymous users can do via anonymous permissions.
Integrate with your app
The SDK goes beyond embedding - you can hook into what happens inside the widget:
- Events - Subscribe to
post:created,vote,comment:created, and other events to trigger analytics, show confirmations, or sync state. See Listen to widget events. - Metadata - Attach session context (page URL, app version, user plan) that gets stored with every post submitted through the widget. See Attach session metadata.
- Programmatic control - Open the widget to a specific view with a pre-filled title, or hide the default trigger button and use your own UI. See the
opencommand andtriggeroption.
Localization
The widget supports English, French, German, Spanish, and Arabic (including full RTL layout). By default, the widget auto-detects the user's language from their browser. You can override this with the locale init option or the ?locale= URL parameter.
Quackback("init", { locale: "fr" });See Install the widget for all init options.
Mobile SDKs
Embed the widget natively in iOS and Android apps with the official mobile SDKs. See Mobile SDKs for installation and usage.
Configuration
Configure the widget from Admin → Settings → Widget:
| Setting | Description |
|---|---|
| Enabled | Turn the widget on or off globally |
| Position | Bottom-right (default) or bottom-left |
| Default board | Restrict the widget to a single board, or show all boards |
Next steps
- Install the widget - Add the embed snippet and SDK commands
- Identify users - Control who sees the widget and how
- Listen to widget events - React to posts, votes, and comments
- Attach session metadata - Send app context with feedback
- Mobile SDKs - Embed the widget in iOS and Android apps