Free
Free, forever.
$0/ month
What's included
- Unlimited posts
- Unlimited users
- 3 admin roles
- 2 feedback boards
- Feedback widget
- Public roadmap
- Public changelog
In-app feedback widget
Drop one line of script into your product and your users can submit ideas, vote on what's planned, and see what just shipped, without ever leaving the page. Matches your theme, knows who your users are, and stays out of the way until they need it.
Share your ideas and suggestions
Can we get a dark mode?
Similar suggestions
A proper dark mode would help a lot, especially for late-night work. The current all-white theme gets harsh on the eyes and most modern tools offer both.
Shipping inside product-led companies
Outcomes
When feedback lives inside your product, users don't go anywhere to share it. You get more submissions, sharper ones, less support load, and a ready audience for every feature you ship.
The less friction between having an idea and sharing it, the more ideas you get. Teams see roughly 40% more submissions once the widget is live.
Users submit while the idea is fresh, from exactly the screen they were on. You get less 'it doesn't work' and more 'this button on pricing should do X.'
The widget shows the roadmap and changelog too. Questions like 'is this planned?' and 'did you ship X?' answer themselves without hitting support.
When a requested feature ships, active users see a fresh-update badge the moment they open your app. No email required to bring them back.
Installation
Paste the loader in your head, call uj.init with your project ID, and the widget is live. Once your user signs in, pass their details to uj.identify and every action they take is tied back to them.
<!-- 1. Load the widget SDK -->
<script>
window.$ujq=window.$ujq||[];
window.uj=window.uj||new Proxy({},{
get:(_,p)=>(...a)=>window.$ujq.push([p,...a])
});
document.head.appendChild(Object.assign(
document.createElement('script'),{
src:'https://cdn.userjot.com/sdk/v2/uj.js',
type:'module',async:!0
}));
</script>
<!-- 2. Initialize the widget -->
<script>
window.uj.init('YOUR_PROJECT_ID', {
widget: true,
theme: 'auto',
position: 'right'
});
// 3. Identify your user (if signed in)
window.uj.identify({
id: 'user_123',
email: 'marcus@acme.com',
firstName: 'Marcus',
lastName: 'Rivera'
});
</script>That's the whole integration. Framework-agnostic, SPA-friendly, and no SDK package to manage. Full reference in the widget SDK docs.
What's inside
The widget opens to three sections your users can move between. New ideas and voting on the feedback side. A live roadmap of what's being built. The changelog for what just shipped. One integration, one experience, one loop.
Feedback, roadmap, and updates. Users tap between them without context switching, and the widget remembers where they left off.
Light, dark, or auto-matching your product's current theme. Set once at init, or change it programmatically as your theme changes.
Show, hide, or navigate the widget from your own code. Open feedback from a 'Report an issue' button, jump to updates from a bell icon.
URLs like ?openFeedback open the submission modal on page load. Link from empty states, error banners, or onboarding tours.
Use the corner bubble, embed the widget inline in a panel, or trigger it from any button in your UI. The widget fits your app.
Responsive, keyboard-accessible, and fast. Works on desktop browsers, mobile browsers, and inside mobile webviews like Capacitor or React Native.
We've shipped a set of improvements focused on making UserJot easier to manage day to day, especially for teams handling feedback at scale.
You can now ban users from posting feedback, giving teams a straightforward way to handle abuse, spam, or repeat bad actors.
Teams can now keep private internal notes on public board requests. That means you can discuss context, edge cases, and internal decisions without exposing those conversations to customers.
We also improved request management with a Kanban board for tracking work, making it easier to move through feedback and keep progress visible.
On top of that, merge activity now appears in the feedback activity section, so when requests get combined, the history is clearer and conversations make more sense afterward.
Auto-login
A feedback widget is only as useful as the context it has. Without user identity, every submission is anonymous, every vote is untethered, and you have no way to follow up when the thing a user asked for actually ships 01.
The UserJot widget takes one call 02. Pass your authenticated user's id, email, and name to uj.identify, and every action they take is tied back to them. Votes count toward their history. Submissions show up under their name. Launch emails land in the right inbox the day a feature ships.
For sensitive products, sign each identity on your server with HMAC-SHA256 and UserJot verifies the signature before trusting the session 03. Your users get a fully authenticated feedback experience with no second login, no second password, and no trip to a separate site 04.
Pricing
The widget is included free, forever, on every plan. You upgrade for advanced features like custom domains, signed user identity, and unlimited integrations, never because your team or your user base grew.
Free, forever.
$0/ month
What's included
For small teams.
$29/ month
Everything in Free, plus
For growing teams.
$59/ month
Everything in Starter, plus

Our strategy is to stay close to our users and obsess over quality. UserJot makes that easy: one place to listen, build what users want, and keep the feedback loop short.
Getting started
Create a UserJot workspace in 30 seconds. Your project ID is waiting on the dashboard the moment you land.
The loader fetches the SDK. The init call brings the widget to life. Two tags, no SDK package to install, no build step.
Call uj.identify with your user object once they authenticate. Every vote, comment, and submission now ties back to the right person.
Works with React, Vue, Svelte, Angular, Next.js, Remix, and anything else that runs in a browser.
Ship the widget
Paste the loader, call init, and your users have feedback, roadmap, and changelog right inside your product. No separate site. No second login. No context switch between their idea and your team.
The whole loop, in one script tag.
Free forever · No credit card · Works with any framework
Questions
Installation, identity, customization, pricing, and how the widget holds up across frameworks, themes, and devices.
An in-app feedback widget is a small piece of UI you embed inside your product so users can submit feedback, see the roadmap, and read the changelog without leaving your app. It's the difference between sending someone to a separate feedback site and letting them share an idea while they're still on the screen that prompted it.
Paste the loader script in your document head, call window.uj.init with your UserJot project ID, and the widget is live. Two lines of code, no backend changes, no SDKs to manage. If your users sign in, add a single uj.identify call so every submission and vote is tied to the right person.
Yes. The widget is included on every plan, including the free one. You get unlimited users, unlimited posts, and the full widget experience at $0. You only pay when you want advanced features like custom domains, private boards, or additional integrations.
Yes. The widget is framework-agnostic. Drop the loader into your index.html or root layout, call uj.init once the DOM is ready, and you're set. For SPAs, client-side route changes work out of the box. React, Vue, Svelte, Angular, Next.js, and Remix apps all handle it the same way.
Yes. Set a theme (light, dark, or auto-matching), pick a position (bottom-right, bottom-left, or inline), and configure your brand color, logo, and favicon in the dashboard. Every surface the widget shows (the bubble, the modal, and the emails it triggers) picks up your branding automatically.
Yes, through a single uj.identify call. Once your user signs into your app, pass their id, email, and name and UserJot ties every feedback action to them. No second login, no password, no confusing sign-in flow inside the widget.
For sensitive products, you can sign each user's identity on your server with an HMAC-SHA256 signature and pass it to uj.identify. UserJot verifies the signature before trusting the session, which makes it impossible for someone to impersonate another user from the browser. The signature feature is optional and available on paid plans.
The widget still works. Anonymous users can submit feedback through guest posting (available on paid plans), or you can require an email before submission. You control which behavior fits your product.
Yes. Configure the widget with trigger: 'custom' and call window.uj.showWidget() from any button in your UI. You can also open a specific section directly, for example uj.showWidget({ section: 'feedback' }) to jump straight to the submission form from a 'Report an issue' link.
No. The loader script is a few kilobytes, async, and lazy-loads the full SDK only when the widget is opened. Your Lighthouse score will not notice the difference. No blocking renders, no layout shift.
Yes. The widget is responsive, keyboard-accessible, and built mobile-first. It works in desktop browsers, mobile browsers, and inside mobile webviews (Electron, Capacitor, React Native WebView, and similar).
Yes. The widget supports an inline mode that renders directly into a DOM element of your choice. Good for a dedicated 'Feedback' page, a sidebar, or a dashboard panel. The corner-bubble mode is the default because it fits most SaaS apps, but inline is there when you need it.
Yes. The widget supports nine languages out of the box and can pick up the user's locale automatically, or you can pin a specific locale at init time. All copy, buttons, labels, and time formatting localize together.
A form collects. The widget collects, ranks, routes, notifies, and shows progress back to users. You would have to build a board, a voting system, duplicate detection, a roadmap view, a changelog, and an email engine to match what's already done here. Most teams find the widget is live in an afternoon instead of a quarter.