Neatbo.

Source map stack mapper

Map explicit generated stack frames or coordinates through an ordinary v3 source map, preserving unmapped frames and column bases.

Browser-local processingInputSource map v3 + framesOutputJSON / CSV / mapped textUp to 5 MiB per file · File limit: 1
  1. 1Add input
  2. 2Adjust settings
  3. 3Get your result

Tool input and files are processed in this browser without being uploaded.

Your input

Inputs are kept temporarily in this tab when switching tools. Refreshing or closing clears them; large results may need to be regenerated.

⌘ / Ctrl + Enter to run

or drag and drop it here

Files stay on this device. Your originals stay unchanged.

.map · .json

Up to 5 MiB per file · File limit: 1

    0 characters · 0 bytes
    Options

    Complete the required options first. You can keep the defaults for the rest.

    Preparing the tool…

    Before you start

    Recover original source positions from a local generated stack. Supply its matching map and exact generated filename, then inspect each mapped, unmapped or other-file frame.

    How to use this tool

    1. Open a local ordinary .map file, or paste its JSON, and enter the exact generated file/URL that appears in the stack.
    2. Paste a stack or choose coordinate JSON. Set its generated-column basis before mapping.
    3. Inspect mapped status and original zero-based columns. Download the complete report and retained unmapped text.

    Supported inputs and limits

    One UTF-8 source-map file or pasted map plus stack/coordinate input, combined up to 5 MiB. At most 10,000 frames, 10,000 source/name entries, 100,000 generated mapping lines and 100,000 segments. Selected file takes precedence.

    Accepts ordinary version-3 maps only; indexed sections are rejected. Strictly checks VLQ segment shapes, source/name indices, ordered unique generated columns and nonnegative original positions. VLQ values and positions are bounded to the compatible signed 32-bit decoder range. Duplicate/normalized-colliding source names are rejected.

    Generated lines are one-based. Choose zero-based or one-based generated columns visibly; original columns are always zero-based. Matching uses the explicit generated filename exactly and the greatest-lower-bound segment on the same generated line. No filename guessing, network fetching or source execution. sourceRoot and source names remain visible.

    Supports finite Chrome-style at file:line:column / at name (file:line:column), Firefox name@file:line:column and bare coordinates, or JSON arrays of {file?,line,column}. Unparsed lines, unmapped positions and frames from other files remain in the report. Preview shows 200 rows; complete JSON/CSV and mapped text are downloadable.

    Worked example

    Example input

    {"version":3,"file":"bundle.js","sourceRoot":"/app/","sources":["src/a.ts"],"names":["greet"],"mappings":"AAAAA;AACA"}
    Example options
    {"secondary": "Error: example\n    at greet (bundle.js:1:1)\n    at bundle.js:2:1\n    at bundle.js:3:1\n    at vendor.js:1:1", "params": {"generatedFile": "bundle.js", "inputFormat": "stack", "columnBasis": "one"}}

    Example output

    {
      "generatedFile": "bundle.js",
      "inputColumnBasis": "one",
      "originalColumnBasis": "zero",
      "sourceRoot": "/app/",
      "mappings": 2,
      "records": [
        {
          "raw": "Error: example",
          "file": null,
          "line": null,
          "column": null,
          "function": null,
          "index": 1,
          "status": "unparsed",
          "original": null
        },
        {
          "raw": "    at greet (bundle.js:1:1)",
          "function": "greet",
          "file": "bundle.js",
          "line": 1,
          "column": 1,
          "index": 2,
          "status": "mapped",
          "original": {
            "source": "/app/src/a.ts",
            "line": 1,
            "column": 0,
            "name": "greet"
          }
        },
        {
          "raw": "    at bundle.js:2:1",
          "function": null,
          "file": "bundle.js",
          "line": 2,
          "column": 1,
          "index": 3,
          "status": "mapped",
          "original": {
            "source": "/app/src/a.ts",
            "line": 2,
            "column": 0,
            "name": null
          }
        },
        {
          "raw": "    at bundle.js:3:1",
          "function": null,
          "file": "bundle.js",
          "line": 3,
          "column": 1,
          "index": 4,
          "status": "unmapped",
          "original": null
        },
        {
          "raw": "    at vendor.js:1:1",
          "function": null,
          "file": "vendor.js",
          "line": 1,
          "column": 1,
          "index": 5,
          "status": "other-file",
          "original": null
        }
      ]
    }

    When something does not work

    Check the generated filename/URL exactly and select the correct column basis. Fix malformed mappings or use an ordinary map. Reduce large frame lists; unsupported stack syntax can be supplied as explicit coordinate JSON.

    Frequently asked questions

    Does it fetch a map or its source files?

    No. Only the supplied map and frames are processed locally.

    Why is my vendor frame unchanged?

    Its filename differs from the explicit generated file. Supply the correct map/file pair rather than guessing from a basename.

    Can it expand sections in an indexed map?

    No. Convert to a verified ordinary v3 map first; this tool rejects sections instead of silently mapping part of the file.

    Documentation & further reading

    Related tools