Documentation
Source maps & symbolication
Map minified production stack traces back to your real files, lines and functions.
Minified production bundles turn every stack trace into noise like app.4f3a.js:1:48210. Upload your build's source maps and JAMP maps each frame back to the real file, line and function, so the same crash reads handleSubmit · Checkout.tsx:88:12.
Maps are private. We read them server-side only to symbolicate, and never serve them to browsers. Generate a per-site upload key under Settings → Source maps, then upload from CI after your production build.
1 · Save the uploader
Drop this small script into your repo (e.g. scripts/upload-sourcemaps.mjs). It recursively finds every .js.map under a directory and posts them for one release:
# after your production build, with maps emitted to ./dist
JAMP_SOURCEMAP_KEY="csm_xxx" \
node upload-sourcemaps.mjs --dir ./dist --release "$GIT_SHA"Or skip the script and call the API directly. POST a JSON body of { release, files: [{ fileName, content }] } with your key as a bearer token:
curl -X POST https://www.jamp.io/api/sourcemaps \
-H "Authorization: Bearer $JAMP_SOURCEMAP_KEY" \
-H "Content-Type: application/json" \
-d '{"release":"v1.4.2","files":[{"fileName":"app.4f3a.js","content":"<map json>"}]}'Use the same release tag your tracker reports via data-release (see Releases & health). That's how we line a crash up with the right map. Re-running CI for a release simply overwrites its maps, so it's safe to run on every deploy.
Keep maps out of your public bundle
Upload the maps, then delete the .js.map files (or the //# sourceMappingURL comment) from what you ship, so they're never downloadable by visitors. JAMP keeps the only copy it needs.
Next.js: build with webpack
Symbolication relies on each emitted chunk.js.map sharing the filename of the chunk.js the browser actually loads, the standard behaviour of webpack, Vite, esbuild and Rollup. Turbopack (the default for next build in Next.js 16) emits maps whose names don't match the served chunks, so they won't line up. Until that's supported, build the deploy that uploads maps with next build --webpack and productionBrowserSourceMaps: true.