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?
- Build with source maps enabled (Vite, webpack, esbuild, …).
- Tag the SDK with the same string you will upload under (
release: "my-app@1.0.0"). - Upload each
.map(optional matching minified path) via the release files endpoint. - 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}| Field | Required | Notes |
|---|---|---|
file | yes | Artifact bytes (typically *.map) |
name | no | Artifact 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 CreatedFull parameter table: Ingest.
How does demangle consume a map?
- SDK sends an exception via envelope or store.
- Worker loads artifacts for
project_id+ eventreleasefromEPURE_ARTIFACTS_DIR. - Matching frames get
demangled: truewith original file / function / line in storedstack_frames.
Mismatched release strings skip demangle for that event.
Symbolication boundaries
| Supported | Not supported |
|---|---|
Browser and Node JS/TS .map | iOS / Android native symbols |
| In-process demangle on the Rust binary | Remote symbol servers |
| Local artifact volume | Cloud 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.