Use case
Stack traces from real users, without asking anybody to open the console.
“Could you press F12, click Console and send me a screenshot?” is a request most customers cannot complete, and the ones who try send a picture of the Network tab. The error is already in the browser when they decide to report the problem — the widget just has to have been listening.
Start freeNo credit card required.
what actually arrives
TypeError: Cannot read properties of undefined (reading 'total')
at CartSummary (app.4f2c1.js:284:19)
at renderWithHooks (vendor.8a1e.js:11121:18)
Chrome 131 · macOS 15.1 · 1440 × 900 @2x · Europe/Madrid
1 /cart → 2 click "Apply code" → 3 submit form#discountThe difference
Same bug, two reports
Nothing about the customer changed between these. The second one simply had somewhere to press that was already collecting.
Without the widget
From: a.customer@example.com
Subject: doesn't work
hi, the page just goes blank when i try to pay.
i'm on a mac. thanksWith it
TypeError: Cannot read properties of undefined (reading 'total')
at CartSummary (app.4f2c1.js:284:19)
at renderWithHooks (vendor.8a1e.js:11121:18)
Chrome 131 · macOS 15.1 · 1440 × 900 @2x · Europe/Madrid
1 /cart → 2 click "Apply code" → 3 submit form#discountHow it works
Two standard browser events, from page load
The collectors attach when the script runs, not when the widget opens — by the time somebody decides to report a problem, the thing worth reporting has already happened. It listens to
window.onerror and unhandledrejection, so an async failure is not invisible, and keeps the ten most recent. Nothing leaves the page unless the person presses send. The full field list is on the widget data page.Then hand it to your agent
A stack trace is most useful somewhere other than your inbox
Reading the trace is not the job; fixing the line it points at is. The MCP server hands the whole report — frames, browser, viewport, numbered steps and screenshot link — to Claude Code or Cursor in one call, so the agent starts from the same evidence you would have.
FAQ
Questions
- How do you get a stack trace without an SDK?
- The widget listens for window.onerror and unhandledrejection from the moment the script runs. Both are standard browser events, so no instrumentation of your own code is needed and nothing enters your build.
- Will the frames be minified?
- They arrive exactly as the browser reported them, truncated at two thousand characters. If your bundle is minified you get minified frames, so ship source maps to your production build if you want readable file names.
- How is this different from Sentry?
- Sentry catches every exception whether or not anybody noticed. This only sees errors on reports a person chose to file, and adds what they were trying to do. They answer different questions and pair well.
- How many errors come with a report?
- Up to ten, kept as a ring buffer so you get the most recent ten rather than the first ten from a tab that has been open all day. Each one carries its source file, line and column.
Break something on purpose.
Throw an error in your console, then file a report from the widget on this page and watch the frames come with it.