Skip to content

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 browser

Results update as you type.

Examples
ReadyJavaScript trace with 5 parsed frames. Start at /app/src/payments/currency.ts:48.
Runtime
JavaScript
Frames
5
App frames
3
Parsed frames, in the order they appear in the trace
FrameKind
parseCurrencyStart here/app/src/payments/currency.ts:48:21App code
createOrder/app/src/checkout/order.ts:112:9App code
async POST/app/src/app/api/checkout/route.ts:27:18App code
async Server.handleRequest/app/node_modules/next/dist/server/base-server.js:1487:9Dependency
process.processTicksAndRejectionsnode:internal/process/task_queues:105:5Dependency

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.
How error monitoring works
app.squasher.ai/acme/checkout-api/logs

errorcheckout-api14:06:13.246

TypeError: Cannot read properties of undefined (reading 'amount')

Stack frames

/app/src/payments/currency.ts:48:21 in parseCurrency
Open in GitHub
/app/src/checkout/order.ts:112:9 in createOrder
Open in GitHub
/app/src/app/api/checkout/route.ts:27:18 in POST
Open in GitHub

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.