Stack trace parser. Find the frame to fix.
Paste a stack trace from Node.js, a browser, Python, Java, Ruby, or Go. The parser separates your code from dependencies and marks the first frame to open.
Free plan. No credit card required.
Stack trace parser
In your browserResults update as you type.
- Runtime
- JavaScript
- Frames
- 5
- App frames
- 3
| Frame | Kind |
|---|---|
| parseCurrencyStart here/app/src/payments/currency.ts:48:21 | App code |
| createOrder/app/src/checkout/order.ts:112:9 | App code |
| async POST/app/src/app/api/checkout/route.ts:27:18 | App code |
| async Server.handleRequest/app/node_modules/next/dist/server/base-server.js:1487:9 | Dependency |
| process.processTicksAndRejectionsnode:internal/process/task_queues:105:5 | Dependency |
Runs locally in your browser. Pasted stack traces are analyzed in memory and are not sent to Squasher.
How to read the result.
The parser reads five frame formats. Each row says how it decides, and what to watch for.
Runtime
- How it decides
- A Traceback header means Python. Exception in thread or .java frames mean the JVM. goroutine or .go lines mean Go. .rb:line:in means Ruby. at file:line:col means JavaScript.
- Watch for
- Unknown runtime: no rule matched. The frames can still parse.
Frames
- How it decides
- Each line in a known frame format, split into function, file, line, and column.
- Watch for
- No frames: the text is only the error message, or a Firefox or Safari trace (fn@file:line:col), which it does not read yet.
App code or dependency
- How it decides
- Paths with node_modules, .pnpm, site-packages, dist-packages, vendor, gems, pkg/mod, node:internal, or webpack/bootstrap are dependencies. The rest is app code.
- Watch for
- Java frames name a file, not a path, so they all count as app code. So do standard library files outside those folders.
Start here
- How it decides
- The first app frame, in the order the trace was printed.
- Watch for
- Python prints the latest call last. The line that raised is the last app frame.
Bundled frames
- How it decides
- Lines with <anonymous>, eval, or webpack-internal.
- Watch for
- The code was bundled or minified. Check the build's source map.
Every captured error arrives parsed.
Squasher's SDKs capture each error with its frames. Open one in Logs to read them beside its trace and the lines around it.
- The JavaScript and Rust SDKs parse frames when the error is thrown.
- Repeats of the same error become one issue.
- Open a frame's line in GitHub once your repository is linked.
- Python and OpenTelemetry errors keep the stack trace as sent.
errorcheckout-api14:06:13.246
TypeError: Cannot read properties of undefined (reading 'amount')
Stack frames
/app/src/payments/currency.ts:48:21 in parseCurrency
/app/src/checkout/order.ts:112:9 in createOrder
/app/src/app/api/checkout/route.ts:27:18 in POST

Example error in Logs.
Questions, answered.
What is a stack trace?
A stack trace is the list of function calls that were running when an error was thrown. Each frame names a function, a file, and a line. Most runtimes print the newest call first; Python prints it last.
How do I find the cause of an error in a stack trace?
Start at the first frame from your own code, not from a library, and read it with the error message. Then walk down the frames to see how the bad value got there. The parser marks that first app frame for you.
Which stack trace formats does the parser read?
V8 traces from Node.js, Chrome, and Edge; Python tracebacks; Java and other JVM traces; Ruby backtraces; and Go panics. Firefox and Safari traces, which use fn@file:line:col, are not read yet.
Why does every frame show as a dependency?
Every path matched a dependency folder such as node_modules or site-packages, so the error surfaced inside a library. Look at what your code passed into it, or catch the error closer to your own call.
Is my stack trace sent anywhere?
No. The parser runs in your browser, and the trace is not sent to Squasher. The tool is also left out of this site's session replay, so what you paste is not recorded.
Does Squasher parse stack traces for me?
Yes, for errors from the Squasher JavaScript SDKs (browser, Node.js, Next.js, Cloudflare Workers) and the Rust SDK: they send each error with its parsed frames, and the Logs view lists them next to the error's trace and related logs. Python and OpenTelemetry errors keep the stack trace text as sent.
Stop pasting traces by hand.
Send errors to Squasher once. Each one arrives with its stack trace, next to its trace and logs.
Free plan. No credit card required.


