Paste JavaScript error stacks to list functions, files, lines and columns, then group repeated errors by their stack signatures.
Runs locally in your browserPaste error output from Node.js, a browser console or a log file. The page splits the paste into traces, prints every recognised frame as function, file, line and column, and groups traces that share the same first three frames.
Formatting runs in this tab. Nothing is uploaded, and no request leaves the page while you work.
A trace starts at the line that names the failure: TypeError: with a message, a console wrapper such as Uncaught (in promise) TypeError:, UnhandledPromiseRejectionWarning:, DOMException:, AggregateError:, or any identifier that ends in Error, Exception, Warning or Rejection. A line that begins with a timestamp and a level (2026-09-17T10:00:00Z ERROR TypeError: ...) or with a bracketed level ([error] TypeError: ...) counts as a header too.
A header opens a new trace when the previous line was a frame or when a blank line separates the two. Node writes a wrapped error as [cause]: Error: ..., and that line becomes a trace of its own so the cause keeps its frames.
Both common frame shapes are read: V8 and Node write at function (file:line:column); Firefox and Safari write function@file:line:column. Windows paths such as C:\app\index.js:42:11 stay in one piece, and the short forms at file:line:column and at file:line are read as well.
Frames that carry no source location are kept instead of dropped: at foo (native), at Array.forEach (<anonymous>), at async Promise.all (index 0), at eval (eval at <anonymous> (file.js:1:1), <anonymous>:1:1). Terminal colour codes are removed from the paste, and a trailing brace from Node cause blocks does not break the frame it is written on.
A runtime banner such as Node.js v20.11.0, the continuation of a multi-line message or a framework warning such as [Vue warn]: ... is not a frame, so it is printed unchanged under its trace and counted in the report.
Traces from other runtimes are not parsed as their own format: a Java or .NET frame may match by accident because it looks like at name (file:line), a Python traceback usually does not match at all, and in every case the lines stay in the output.
When the paste contains neither a header nor a frame, the page says so and returns the text unchanged instead of inventing a result.