Source maps

Upload JS/TS .map files for a release so Epure demangles minified stack frames at ingest.

Symbolication is JS/TS only. Upload .map files for a release; when an exception arrives with that release tag, Epure resolves original file, function, line, and context in-process. Other languages group on raw frames. No dSYM, ProGuard, or NDK.

How do I upload source maps?

POST each .map to /api/{project_id}/releases/{version}/files/ with DSN auth, under the same release string the SDK sends.

What is the upload flow?

  1. Build with source maps enabled (Vite, webpack, esbuild, …).
  2. Tag the SDK with the same string you will upload under (release: "my-app@1.0.0").
  3. Upload each .map (optional matching minified path) via the release files endpoint.
  4. Ship. New events for that release demangle when a matching map is present.

Missing maps still ingest and group; frames stay minified.

How do I POST a map?

POST /api/{project_id}/releases/{version}/files/
Content-Type: multipart/form-data
X-Sentry-Auth: Sentry sentry_version=7, sentry_key={public_key}, sentry_secret={secret_key}
FieldRequiredNotes
fileyesArtifact bytes (typically *.map)
namenoArtifact path; defaults to artifact.map. Paths like ~/dist/app.min.js.map are accepted

Auth: DSN only. Session cookies are rejected.

Success: 201 Created

{ "id": "660e8400-e29b-41d4-a716-446655440001", "name": "~/dist/app.min.js.map" }

Limits: body ≤ 2 MB. {version}: no .., /, or \.

curl -sS -D - -o /tmp/epure-map.json -X POST \
  "http://localhost:8080/api/${PROJECT_ID}/releases/my-app@1.0.0/files/" \
  -H "X-Sentry-Auth: Sentry sentry_version=7, sentry_key=${PUBLIC}, sentry_secret=${SECRET}" \
  -F "name=~/dist/app.min.js.map" \
  -F "file=@./dist/app.min.js.map;type=application/json"
HTTP/1.1 201 Created

Full parameter table: Ingest.

How does demangle consume a map?

  1. SDK sends an exception via envelope or store.
  2. Worker loads artifacts for project_id + event release from EPURE_ARTIFACTS_DIR.
  3. Matching frames get demangled: true with original file / function / line in stored stack_frames.

Mismatched release strings skip demangle for that event.

Symbolication boundaries

SupportedNot supported
Browser and Node JS/TS .mapiOS / Android native symbols
In-process demangle on the Rust binaryRemote symbol servers
Local artifact volumeCloud object storage (later)
Why are stacks still minified?

Sentry.init({ release }) must equal {version} in the upload URL. Check the Releases UI for artifacts. Auth is DSN, not the dashboard cookie, and session cookies on this endpoint are rejected. Body cap is 2 MB: Troubleshooting.

Can I upload dSYM or ProGuard files?

No. Symbolication is JS/TS .map files only, with no dSYM, ProGuard, or NDK symbol server. Other languages group on raw frames, and iOS/Android crash reporting is out of scope. See Other runtimes.

Next