sourcemap‑unmin
Turn at a (app.min.js:1:9214) back into real code.
.map files from that same build
Label each map with the bundle filename the stack mentions (e.g. app.min.js), then paste that bundle’s .map JSON. Or drop .map files onto this panel — they are read locally.
Paste a stack trace on the left and the result appears here live — per frame: original file, function and line:column, plus which map decided it. There is no Generate button and nothing is uploaded.
Your stack trace and source maps never leave this browser. All source-map decoding runs locally, so nothing you paste is ever sent anywhere and it works on proprietary code. The page’s only network use is a single anonymous, self-hosted page-view count.
Honest limits & reason codes
- You need the actual
.mapfile(s) from the exact build that produced this stack — this tool cannot fetch, guess, or reconstruct them. - Frames match maps per frame, by filename: exact label first, then basename (a map labelled
app.min.jscatcheshttps://cdn…/app.min.js?v=9). A wrong label meansno-map-for-filefor that frame. - The original code snippet appears only when the map embeds
sourcesContent; otherwise you still get exact file · line:column, just no source line. - V8-shaped stacks only (Chrome, Node, Edge). Firefox/Safari lines, eval and native frames pass through untouched rather than being guessed at.
- Index maps (top-level
sections) and columns past a line’s last mapping come back unresolved with a reason instead of a fabricated location.
What this tool does — and its honest limits
What it does. A production error report usually arrives as a minified V8
stack trace — at t (app.min.js:1:9214) tells you almost nothing. Paste that
stack plus the .map file(s) the same build produced, and each frame is decoded
back to its original file, function name and line:column; when the map embeds
sourcesContent, the actual original source line is shown too. Multi-bundle
stacks work: each frame is matched to its map per frame, so a stack that crosses
app.min.js and vendor.min.js resolves both. The result copies out
as a readable stack for the bug report.
Why paste here instead of uploading? A source map with
sourcesContent embeds your entire original source — it is your
code. Services that fetch or upload the map to a server to translate the stack ask you to
hand that over. Here the vendored Mozilla source-map 0.6.1 decoder runs
entirely in this tab, so the map works on proprietary code without leaving your machine.
Honest limits — read before trusting the output.
(1) You need the actual .map file(s) from the exact build that produced the
stack; nothing is fetched, guessed, or reconstructed — no map means
no-map-for-file, not magic un-mangling.
(2) Original source snippets appear only when the map embeds
sourcesContent; otherwise you still get the exact file · line:column,
just no source text.
(3) Frames match maps by filename, exact label first then basename — a map
labelled app.min.js catches https://cdn…/app.min.js?v=9, but
two bundles sharing a basename need exact labels to disambiguate.
(4) V8 stack shapes only (Chrome, Node, Edge); Firefox/Safari lines, eval and native
frames pass through unparsed rather than being guessed at.
(5) Index maps (top-level sections) are detected but not remapped —
those frames come back index-map-not-supported, because applying a wrong section
offset would fabricate a location, and a wrong location is worse than none. The same
honesty rule applies to a column past a line’s last mapping: it reports
column-past-last-mapping instead of snapping to the nearest earlier mapping.
The library ships with the page. All remapping runs on an MIT-licensed
CommonJS core (src/core.js) over the vendored Mozilla
source-map 0.6.1 decoder (BSD‑3‑Clause) — there is no package
to install; the exact code that renders these frames is the library.