Source map validator. Check the map before you ship.
Paste a .map file and the last lines of its bundle. The validator checks the fields error tools need and whether the bundle points at this map.
Free plan. No credit card required.
Source map validator
In your browserInclude the sourceMappingURL comment if the bundle has one. Results update as you type.
| Result | Check |
|---|---|
| Pass | Source Map v3The map declares version 3. |
| Pass | SourcesAt least one original source path is present. |
| Pass | MappingsMappings are present for generated-to-original frame lookup. |
| Pass | Names arrayThe names array is present, even if it is empty. |
| Pass | sourcesContentOriginal source content is embedded for each source path. |
| Pass | Bundle footerFound sourceMappingURL=checkout.js.map. |
| Pass | File linkageThe bundle footer and source map file field line up. |
Validation runs locally in your browser. Bundle snippets and source map JSON are not uploaded or stored.
Eight checks, and why they fail.
A fail blocks the map. A warning means it may work, but something tools often rely on is missing.
Parse source map JSON
- Passes when
- The text parses as JSON with the expected field types.
- Flags
- Fail. Nothing else is checked.
- Usual cause
- The server answered the .map URL with your app's HTML page, or the copy is cut off.
Source Map v3
- Passes when
- version is 3.
- Flags
- Fail
- Usual cause
- A hand-written map, or very old tooling.
Sources
- Passes when
- sources lists at least one original file.
- Flags
- Fail
- Usual cause
- A map for an empty chunk, or one that was edited after the build.
Mappings
- Passes when
- mappings is a non-empty string.
- Flags
- Fail
- Usual cause
- An empty chunk. Without mappings, no position can point back to source.
Names array
- Passes when
- names is present, even when empty.
- Flags
- Warn
- Usual cause
- Some minifiers leave it out, so frames keep minified function names.
sourcesContent
- Passes when
- Every source has its original code embedded.
- Flags
- Warn
- Usual cause
- The build turned sourcesContent off, or a list entry is null.
Bundle footer
- Passes when
- The bundle has a sourceMappingURL comment.
- Flags
- Warn
- Usual cause
- A hidden source map build (Vite sourcemap: 'hidden', webpack hidden-source-map), or a step that strips comments.
File linkage
- Passes when
- The footer's file name matches the map's file field.
- Flags
- Warn
- Usual cause
- The map comes from another build, or the bundler left out the file field.
Keep every release's maps in one place.
Upload maps from CI with one command. Squasher stores them by release and file name, for you and your agent.
- squasher sourcemaps upload takes the release and the .map files.
- Add --service when two apps share a release name.
- List or delete maps from the CLI, and list them over the REST API or MCP.
# SQUASHER_API_KEY and SQUASHER_PROJECT_ID come from CI secretssquasher sourcemaps upload --service web --release a41c dist/assets/*.mapUploading index-4f1c2a.js.map...Uploading checkout-9b8e1d.js.map...Uploading vendor-c21f07.js.map...Uploaded 3 file(s) for release a41c
Example CI step.
Questions, answered.
What is a source map?
A source map is a JSON file that maps each position in bundled or minified JavaScript back to the original file, line, and column. Browsers and error tools use it to show the code you wrote instead of the bundle.
What does a valid source map need?
version 3, a sources list with at least one file, and a mappings string. names and sourcesContent are optional, but without sourcesContent a tool needs your original files to show code.
Why is my source map not working?
The usual causes: the .map URL returns HTML instead of JSON, the bundle has no sourceMappingURL comment because the build made a hidden map, the map comes from a different build than the bundle, or sourcesContent is empty.
Should I serve source maps in production?
You don't have to. A hidden source map (Vite sourcemap: 'hidden', webpack hidden-source-map) is built without the sourceMappingURL comment, so browsers never ask for it. You keep the file and upload it where you need it.
Does Squasher use my source maps on stack traces?
Not yet. Today Squasher stores the maps you upload, by release and file name, and lists them from the CLI, the REST API, and MCP. Stack frames in Squasher show what your SDK sent.
Is my source map uploaded when I use this tool?
No. Validation runs in your browser; the bundle and the map stay on this page. The tool is also left out of this site's session replay, so what you paste is not recorded.
Ship the map with the release.
Add one upload step to CI, and every release keeps its maps next to its errors.
Free plan. No credit card required.


