# UserWants > A bug report and feedback widget you add to a website with one line of script. Visitors report a bug or send an idea without creating an account, and every bug report arrives with the screenshot, the JavaScript error, the browser and the last few things the person clicked. Reports can be read by an AI coding agent — Claude Code, Cursor, VS Code, Zed — through a built-in MCP server, so the agent fixes the bug from the editor without anyone opening a browser. UserWants is aimed at the people who ship the product: solo developers and small product teams who want the evidence needed to reproduce a bug to arrive with the bug, instead of writing back to ask which browser the person was on. ## What it does - [How it works](https://userwants.app#collect): what a report contains — browser, operating system, screen size, the last three steps, and the uncaught JavaScript error with its stack frame. - [MCP server](https://userwants.app#agent): connect UserWants to Claude Code, Cursor, VS Code or Zed and ask the agent to fix the newest bug. It reads the whole report, including the stack trace and the steps. - [The inbox](https://userwants.app#inbox): bugs and ideas land in one list with a status — Pending, Planned, In progress, Shipped, Rejected — and the person who reported gets an email when the status moves. - [Install](https://userwants.app#install): one script tag before the closing body tag. No package, no build step, nothing added to your bundle. About 12 KB over the wire, loaded deferred, rendered inside a shadow root. - [Pricing](https://userwants.app#pricing): the first reports are free with no time limit and no credit card; the paid plan is one plan with unlimited projects, widgets and reports, and no per-seat charge. ## Docs - [Installing the widget](https://userwants.app/docs/installing-the-widget): One script tag, the domains it is allowed to run on, and what each report carries. - [MCP server](https://userwants.app/docs/mcp): The endpoint, connecting an editor to it, how the OAuth consent works, and the three tools your agent gets. - [Troubleshooting](https://userwants.app/docs/troubleshooting): The cases where the widget, the screenshot or the MCP server behave in a way that looks like a bug and is not. ## Features - [JavaScript errors and stack traces](https://userwants.app/features/javascript-errors): up to 10 uncaught errors and rejected promises, with their stack frames, collected from page load. - [Screenshots](https://userwants.app/features/screenshots): captured in the browser, shown back before sending, never taken without the person asking. - [Steps to reproduce](https://userwants.app/features/steps-to-reproduce): the last 50 clicks, form submissions and page changes, plus browser, screen and time zone. Never the contents of a field. - [Close the loop](https://userwants.app/features/close-the-loop): five statuses, and an email to whoever reported it when one moves — in their language, with no public board. - [Feature requests](https://userwants.app/feature-requests): ideas through the same button as bugs, with no account for the person asking. - [MCP server](https://userwants.app/mcp): three tools over OAuth — list_bugs, get_bug, set_bug_status — for Claude Code, Cursor, VS Code and Zed. ## Guides - [How to write steps to reproduce a bug](https://userwants.app/blog/steps-to-reproduce-a-bug): Why reproduction steps are the part that goes wrong, what a usable one looks like, and how to stop asking for them. - [How to get better bug reports from users](https://userwants.app/blog/better-bug-reports-from-users): Why bug report forms produce vague reports, which questions to delete, and what to collect automatically instead of asking. - [What to do when you cannot reproduce a user bug](https://userwants.app/blog/cannot-reproduce-user-bug): The five things that usually differ between your machine and theirs, and how to capture them before the report reaches you. - [How to get console errors from users](https://userwants.app/blog/get-console-errors-from-users): Why asking a customer to open DevTools does not work, and the two browser events that collect the error for you instead. - [Closing the feedback loop with your users](https://userwants.app/blog/closing-the-feedback-loop): Why most feedback tools stop at collection, what silence costs you, and the smallest system that tells people what happened. - [Screenshot or console log: which one do you actually need?](https://userwants.app/blog/screenshot-vs-console-log): What each artifact proves, where each one misleads, and why the argument between them is the wrong argument. - [MCP servers for customer feedback: what they are for](https://userwants.app/blog/mcp-servers-for-customer-feedback): What MCP changes about the gap between a user bug report and a fix, and what a feedback MCP server should and should not expose. - [Usersnap vs BugHerd vs Marker.io: which one fits your team](https://userwants.app/blog/usersnap-vs-bugherd-vs-marker-io): Three visual feedback tools that look identical on a feature grid, and the two questions that actually separate them. - [Free bug reporting tools: what the free tier actually costs](https://userwants.app/blog/free-bug-reporting-tools): Where free plans in this category run out, which limits bite first, and how to tell a free tier from a trial with no end date. - [Bug report widget vs error monitoring: you need both](https://userwants.app/blog/bug-widget-vs-error-monitoring): What Sentry sees that a feedback widget never will, what a widget sees that no APM can, and why the overlap is smaller than it looks. ## Platforms - [Next.js](https://userwants.app/install/nextjs): At the end of the in your root layout, so it loads once and survives client-side navigation. - [React](https://userwants.app/install/react): In public/index.html (Create React App) or index.html (Vite), just before the closing body tag — outside the div React mounts into. - [Vue](https://userwants.app/install/vue): In index.html at the root of your Vite project, just before the closing body tag and after the #app div. - [SvelteKit](https://userwants.app/install/svelte): In src/app.html, just before the closing body tag — the template SvelteKit renders every page into. - [Astro](https://userwants.app/install/astro): In the base layout under src/layouts, just before the closing body tag, with the is:inline directive so Astro leaves it alone. - [Angular](https://userwants.app/install/angular): In src/index.html, just before the closing body tag and after the app-root element. - [WordPress](https://userwants.app/install/wordpress): In the footer of every page — added with wp_enqueue_script from your child theme, or pasted into a header-and-footer code plugin. - [Webflow](https://userwants.app/install/webflow): Site Settings → Custom Code → Footer Code, which Webflow injects before the closing body tag on every published page. - [Shopify](https://userwants.app/install/shopify): In layout/theme.liquid, immediately before the closing body tag — the layout every storefront page renders through. - [Squarespace](https://userwants.app/install/squarespace): Settings → Developer Tools → Code Injection → Footer, which Squarespace inserts before the closing body tag site-wide. - [Wix](https://userwants.app/install/wix): Settings → Custom Code → Add Custom Code, set to load on all pages, placed in Body – end. - [Framer](https://userwants.app/install/framer): Site Settings → General → Custom Code → End of tag, which Framer injects on every published page. - [Bubble](https://userwants.app/install/bubble): Settings → SEO & metatags → Script/meta tags in body, which Bubble renders on every page of the app. - [Laravel](https://userwants.app/install/laravel): In your base Blade layout, usually resources/views/layouts/app.blade.php, just before the closing body tag. - [Ruby on Rails](https://userwants.app/install/rails): In app/views/layouts/application.html.erb, just before the closing body tag. - [Django](https://userwants.app/install/django): In your base template, usually templates/base.html, just before the closing body tag. ## Use cases - [Solo developers](https://userwants.app/for/solo-developers): Bug reporting for solo developers: one script tag, a report that already contains the stack trace, and an MCP server your coding agent can read it from. - [Indie hackers](https://userwants.app/for/indie-hackers): A feedback tool for indie hackers: bug reports and feature requests from users with no account, one flat price, and unlimited projects on the same plan. - [Small SaaS teams](https://userwants.app/for/saas-teams): A user feedback tool for small SaaS teams: in-app bug reports with the stack trace attached, feature requests in the same inbox, and no per-seat pricing. - [Beta testing](https://userwants.app/for/beta-testing): A beta testing feedback tool your testers can use without an account: reports arrive with the screenshot, the console error and the steps already attached. - [Staging sites](https://userwants.app/for/staging-sites): Collect feedback on a staging site without giving reviewers accounts: one script tag, per-environment projects, and reports with the console error attached. - [UAT](https://userwants.app/for/uat): A UAT feedback tool business users can actually use: no account, no tracker licence, and every report carries the browser, the error and the steps taken. - [Support teams](https://userwants.app/for/support-teams): Bug reporting for support teams: every escalation arrives with the browser, the JavaScript error and the steps, so engineering stops asking for them. - [Agencies](https://userwants.app/for/agencies): A client feedback tool for agencies: one widget per client site, no accounts for reviewers, and unlimited projects on a single flat plan. ## Comparisons Each page states what the other tool does better, first. - [vs Marker.io](https://userwants.app/alternatives/marker-io) - [vs BugHerd](https://userwants.app/alternatives/bugherd) - [vs Usersnap](https://userwants.app/alternatives/usersnap) - [vs Jam.dev](https://userwants.app/alternatives/jam-dev) - [vs Userback](https://userwants.app/alternatives/userback) - [vs Ybug](https://userwants.app/alternatives/ybug) - [vs Gleap](https://userwants.app/alternatives/gleap) - [vs Canny](https://userwants.app/alternatives/canny) - [vs Featurebase](https://userwants.app/alternatives/featurebase) - [vs UserJot](https://userwants.app/alternatives/userjot) - [vs Frill](https://userwants.app/alternatives/frill) - [vs Sentry User Feedback](https://userwants.app/alternatives/sentry-user-feedback) - [vs Bird Eats Bug](https://userwants.app/alternatives/birdeatsbug) - [vs Disbug](https://userwants.app/alternatives/disbug) - [vs Feedbucket](https://userwants.app/alternatives/feedbucket) - [vs MCPFeedback](https://userwants.app/alternatives/mcpfeedback) - [vs FasterFixes](https://userwants.app/alternatives/fasterfixes) - [vs Quackback](https://userwants.app/alternatives/quackback) ## Reference - [What the widget collects](https://userwants.app/legal/widget-data): the exact field list, for citing in your own privacy policy. - [Privacy policy](https://userwants.app/legal/privacy) - [Terms of service](https://userwants.app/legal/terms) ## Optional - [Full text](https://userwants.app/llms-full.txt): the same pages as prose, for answering questions without fetching each one.