Skip to main content

Upload Source Maps

Release builds minify and bundle JavaScript, making stack traces in the Pulse dashboard unreadable. Uploading source maps lets Pulse map minified frames back to your original source — file names, line numbers, and symbol names.

The Pulse CLI supports uploading:

  • JS source maps — deobfuscate JavaScript stack traces (Android + iOS)
  • ProGuard mapping files (Android) — deobfuscate native Kotlin/Java stack traces
  • dSYM files (iOS) — symbolicate native iOS crash stack traces
note

Pulse does not inject into your build pipeline automatically. You need to wire up the CLI commands manually — typically as a post-build step in your CI/CD pipeline (GitHub Actions, Bitrise, Fastlane, etc.).

Verify the CLI

The Pulse CLI ships with the SDK — no separate installation needed:

yarn pulse-cli --version
yarn pulse-cli upload -h
yarn pulse-cli upload react-native-android -h
yarn pulse-cli upload react-native-ios -h

Android

Upload JS source map

yarn pulse-cli upload react-native-android \
--api-url=https://your-backend.com \
--api-key=your-api-key \
--app-version=1.0.0 \
--version-code=7 \
--js-sourcemap=./android/app/build/intermediates/sourcemaps/react/release/index.android.bundle.packager.map

Upload JS source map + ProGuard mapping

To also deobfuscate native Kotlin/Java stack traces, include the ProGuard mapping file:

yarn pulse-cli upload react-native-android \
--api-url=https://your-backend.com \
--api-key=your-api-key \
--app-version=1.0.0 \
--version-code=7 \
--js-sourcemap=./android/app/build/intermediates/sourcemaps/react/release/index.android.bundle.packager.map \
--mapping=./android/app/build/outputs/mapping/release/mapping.txt

ProGuard mapping is only generated when minifyEnabled = true is set in your release build type.

OptionRequiredDescription
--api-url / -uYesYour Pulse backend URL
--api-key / -kYesAPI key (sent as X-API-KEY header)
--app-version / -vYesApp version string (e.g. 1.0.0)
--version-code / -cYesVersion code integer (e.g. 7)
--js-sourcemap / -jYesPath to JS source map file
--mapping / -mNoPath to ProGuard mapping file
--bundle-id / -bNoCodePush bundle label for OTA builds
--debug / -dNoVerbose output for troubleshooting

iOS

Upload JS source map

yarn pulse-cli upload react-native-ios \
--api-url=https://your-backend.com \
--api-key=your-api-key \
--bundle-version=1.0.0 \
--version-code=123 \
--js-sourcemap=./ios/build/Build/Products/Release-iphoneos/main.jsbundle.map

Upload JS source map + dSYM

To also symbolicate native iOS crash stack traces, include the dSYM bundle:

yarn pulse-cli upload react-native-ios \
--api-url=https://your-backend.com \
--api-key=your-api-key \
--bundle-version=1.0.0 \
--version-code=123 \
--js-sourcemap=./ios/build/Build/Products/Release-iphoneos/main.jsbundle.map \
--dsym=./ios/build/Build/Products/Release-iphoneos/MyApp.app.dSYM
OptionRequiredDescription
--api-url / -uYesYour Pulse backend URL
--api-key / -kYesAPI key (sent as X-API-KEY header)
--bundle-version / -vYesCFBundleShortVersionString from Info.plist
--version-code / -cYesVersion code integer
--js-sourcemap / -jYesPath to JS source map file
--dsym / -pNoPath to .dSYM bundle for native crash symbolication
--bundle-id / -bNoCodePush bundle label for OTA builds
--debug / -dNoVerbose output for troubleshooting

Troubleshooting

Use --debug for detailed output:

yarn pulse-cli upload react-native-android --debug