Embed the feedback widget in your app
The Featul widget lets customers submit feedback, vote, and read updates without leaving your product.
On this page
More in Core Features
- Manage feedback boards
- Use the roadmap
- Publish changelog entries
- Embed the feedback widget in your app
- Branding and customization
- Guest and anonymous feedback
- Internal comments and team collaboration
- Collect feedback with boards
- Move feedback through statuses
- Voting and comments
- Merge duplicate feedback posts
- Private boards
- Identify signed-in users in the widget
- Widget configuration options
- Widget JavaScript API reference
The widget brings your feedback portal, roadmap, and changelog directly into your app so customers never have to navigate away.
What the widget shows
The widget displays the same content as your public portal: feedback boards, roadmap, and changelog. If you hide a section in workspace settings, it also disappears from the widget.
Finding your credentials
Go to Settings → Workspace → Embed widget to find your Workspace ID and signing secret. Featul creates the signing secret automatically when your workspace is created.
Basic setup
Add the widget loader script to your app.
Call
featul.initwith your Workspace ID.Set options like
theme,position(left or right), anddefaultSection.
The loader is asynchronous. Any calls made before it finishes are queued automatically.
Configuration options
theme–"light","dark", or"auto"(follows your workspace branding)position–"left"or"right"(default is right)defaultSection–"home","feedback","roadmap", or"changelog"trigger– use"custom"if you want your own button to open the widget
Identifying signed-in users
To attribute posts and votes to a specific user, generate a signed identity object on your server after login and pass it to featul.identify(). Clear the identity when the user logs out by calling featul.identify(null).
Never include the widget secret in browser code or public environment variables.
Controlling the widget programmatically
featul.showWidget()– open the widgetfeatul.hideWidget()– close the widgetfeatul.destroy()– remove the widget entirely
Was this helpful?