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
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 = trueis set in your release build type.
| Option | Required | Description |
|---|---|---|
--api-url / -u | Yes | Your Pulse backend URL |
--api-key / -k | Yes | API key (sent as X-API-KEY header) |
--app-version / -v | Yes | App version string (e.g. 1.0.0) |
--version-code / -c | Yes | Version code integer (e.g. 7) |
--js-sourcemap / -j | Yes | Path to JS source map file |
--mapping / -m | No | Path to ProGuard mapping file |
--bundle-id / -b | No | CodePush bundle label for OTA builds |
--debug / -d | No | Verbose 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
| Option | Required | Description |
|---|---|---|
--api-url / -u | Yes | Your Pulse backend URL |
--api-key / -k | Yes | API key (sent as X-API-KEY header) |
--bundle-version / -v | Yes | CFBundleShortVersionString from Info.plist |
--version-code / -c | Yes | Version code integer |
--js-sourcemap / -j | Yes | Path to JS source map file |
--dsym / -p | No | Path to .dSYM bundle for native crash symbolication |
--bundle-id / -b | No | CodePush bundle label for OTA builds |
--debug / -d | No | Verbose output for troubleshooting |
Troubleshooting
Use --debug for detailed output:
yarn pulse-cli upload react-native-android --debug