In-app feedback widget

The in-app feedback widget your users actually use.

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.

Submit Feedback

Share your ideas and suggestions

Can we get a dark mode?

Similar suggestions

Dark theme support for the dashboard

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

Tally
OpenPanel
Scite
TensorDock
Drippi
Ghostbase
Throne
Nuelink
SuperWhisper
Drizzle
LitCommerce
StoryCut
GoodBarber
TeamBuildr
Tally
OpenPanel
Scite
TensorDock
Drippi
Ghostbase
Throne
Nuelink
SuperWhisper
Drizzle
LitCommerce
StoryCut
GoodBarber
TeamBuildr
Tally
OpenPanel
Scite
TensorDock
Drippi
Ghostbase
Throne
Nuelink
SuperWhisper
Drizzle
LitCommerce
StoryCut
GoodBarber
TeamBuildr

Outcomes

What you get for one script tag.

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.

  • More ideas submitted

    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.

  • Better feedback

    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.'

  • Fewer support pings

    The widget shows the roadmap and changelog too. Questions like 'is this planned?' and 'did you ship X?' answer themselves without hitting support.

  • Visible follow-through

    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

One script to embed. One call to identify.

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.

index.html
<!-- 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

Feedback, roadmap, and changelog, in one widget.

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.

  • Three sections in one

    Feedback, roadmap, and updates. Users tap between them without context switching, and the widget remembers where they left off.

  • Theme-aware

    Light, dark, or auto-matching your product's current theme. Set once at init, or change it programmatically as your theme changes.

  • Programmatic control

    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.

  • Deep links

    URLs like ?openFeedback open the submission modal on page load. Link from empty states, error banners, or onboarding tours.

  • Trigger anywhere

    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.

  • Built for mobile

    Responsive, keyboard-accessible, and fast. Works on desktop browsers, mobile browsers, and inside mobile webviews like Capacitor or React Native.

Better moderation, smoother workflows, and more

Shayan Taslim
Founder

We've shipped a set of improvements focused on making UserJot easier to manage day to day, especially for teams handling feedback at scale.

More control over users and profiles

You can now ban users from posting feedback, giving teams a straightforward way to handle abuse, spam, or repeat bad actors.

Better internal workflows for teams

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

The widget already knows who your users are.

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 .

The UserJot widget takes one call . 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 . Your users get a fully authenticated feedback experience with no second login, no second password, and no trip to a separate site .

Pricing

Free widget on every plan.

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

    Free, forever.

    $0/ month

    What's included

    • Unlimited posts
    • Unlimited users
    • 3 admin roles
    • 2 feedback boards
    • Feedback widget
    • Public roadmap
    • Public changelog
  • Starter

    For small teams.

    $29/ month

    Everything in Free, plus

    • Custom domain
    • Guest posting
    • Automatic login
    • 5 feedback boards
    • Private boards
    • One integration
  • Professional

    For growing teams.

    $59/ month

    Everything in Starter, plus

    • Unlimited boards
    • Advanced search
    • Single sign-on
    • Unlimited integrations
    • Unlimited admin roles
    • Signed user identity

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.

Filip Minev

Cofounder, Tally

Getting started

Live inside your app this afternoon.

  1. Sign up and grab your project ID

    Create a UserJot workspace in 30 seconds. Your project ID is waiting on the dashboard the moment you land.

  2. Paste two tags into your head

    The loader fetches the SDK. The init call brings the widget to life. Two tags, no SDK package to install, no build step.

  3. Identify your users when they sign in

    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

A full feedback loop. One script tag.

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.

Create your workspace

Free forever · No credit card · Works with any framework

Questions

Frequently asked, plainly answered.

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.