Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
26 commits
Select commit Hold shift + click to select a range
c63eccc
chore: update scripts/update-cli.sh to 3.0.1 (#5471)
github-actions[bot] Dec 23, 2025
f73c0ff
chore(deps): update Cocoa SDK to v9 (#5356)
antonis Dec 23, 2025
2fc14a8
Merge branch 'main' into v8
antonis Dec 23, 2025
7345ba8
chore(deps): update CLI to v3.0.2 (#5514)
antonis Jan 8, 2026
ff0912e
Merge branch 'main' into v8
antonis Jan 12, 2026
2eea94b
chore: update scripts/update-cli.sh to 3.0.3 (#5502)
github-actions[bot] Jan 12, 2026
97001a7
Merge branch 'main' into v8
antonis Jan 12, 2026
0e187d3
Merge branch 'main' into v8
antonis Jan 13, 2026
54e4f2d
chore: update scripts/update-cli.sh to 3.1.0 (#5523)
github-actions[bot] Jan 13, 2026
b6d95e1
Merge branch 'main' into v8
antonis Jan 13, 2026
f18fe11
Merge branch 'main' into v8
antonis Jan 15, 2026
9fb9a2e
Merge branch 'main' into v8
antonis Jan 15, 2026
2bcd0b3
Merge branch 'main' into v8
antonis Jan 16, 2026
2663f19
Fix changelog
antonis Jan 16, 2026
764e6b8
Merge branch 'main' into v8
antonis Jan 20, 2026
f0aee98
Merge branch 'main' into v8
antonis Jan 23, 2026
e7ac65d
Revert "feat: Expose iOS options to ignore views from subtree travers…
antonis Jan 23, 2026
f9c286b
Merge branch 'main' into v8
antonis Jan 26, 2026
243a75e
chore: update scripts/update-sentry-android-gradle-plugin.sh to 6.0.0…
github-actions[bot] Jan 26, 2026
5fc24f0
Merge branch 'main' into v8
antonis Jan 27, 2026
3708827
chore(changelog): Add upgrade notice in the changelog (#5584)
antonis Jan 29, 2026
db9c1a8
Merge branch 'main' into v8
antonis Jan 29, 2026
d5c32e3
feat: v8: Capture app start errors before JS (#5582)
antonis Jan 29, 2026
4346768
release: 8.0.0-alpha.0
antonis Jan 29, 2026
4c2c1bc
chore: v8-alpha: Fix changelog (#5595)
antonis Jan 29, 2026
e92f7bf
Merge branch 'release/8.0.0-alpha.0' into v8
Jan 29, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 0 additions & 1 deletion .github/workflows/buildandtest.yml
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@ on:
push:
branches:
- main
- v5
- release/**
pull_request:

Expand Down
1 change: 0 additions & 1 deletion .github/workflows/codegen.yml
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@ on:
push:
branches:
- main
- v5
- release/**
pull_request:

Expand Down
1 change: 0 additions & 1 deletion .github/workflows/e2e-v2.yml
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@ on:
push:
branches:
- main
- v5
- release/**
pull_request:
types: [opened, synchronize, reopened, labeled]
Expand Down
1 change: 0 additions & 1 deletion .github/workflows/native-tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@ on:
push:
branches:
- main
- v5
- release/**
pull_request:
types: [opened, synchronize, reopened, labeled]
Expand Down
1 change: 0 additions & 1 deletion .github/workflows/sample-application-expo.yml
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@ on:
push:
branches:
- main
- v5
pull_request:
types: [opened, synchronize, reopened, labeled]

Expand Down
70 changes: 24 additions & 46 deletions .github/workflows/sample-application.yml
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@ on:
push:
branches:
- main
- v5
pull_request:
types: [opened, synchronize, reopened, labeled]

Expand Down Expand Up @@ -83,7 +82,7 @@ jobs:
- uses: ruby/setup-ruby@v1
if: ${{ matrix.platform == 'ios' || matrix.platform == 'macos' }}
with:
working-directory: ${{ matrix.platform == 'ios' && env.REACT_NATIVE_SAMPLE_PATH || ' samples/react-native-macos' }}
working-directory: ${{ matrix.platform == 'ios' && env.REACT_NATIVE_SAMPLE_PATH || 'samples/react-native-macos' }}
ruby-version: '3.3.0' # based on what is used in the sample
bundler-cache: true # runs 'bundle install' and caches installed gems automatically
cache-version: 1 # cache the installed gems
Expand Down Expand Up @@ -113,62 +112,39 @@ jobs:
if: ${{ matrix.platform == 'ios' || matrix.platform == 'macos' }}
working-directory: samples
run: |
[[ "${{ matrix.platform }}" == "ios" ]] && cd react-native/ios
[[ "${{ matrix.platform }}" == "macos" ]] && cd react-native-macos/macos
[[ "${{ matrix.platform }}" == "ios" ]] && cd react-native
[[ "${{ matrix.platform }}" == "macos" ]] && cd react-native-macos

[[ "${{ matrix.build-type }}" == "production" ]] && ENABLE_PROD=1 || ENABLE_PROD=0
[[ "${{ matrix.rn-architecture }}" == "new" ]] && ENABLE_NEW_ARCH=1 || ENABLE_NEW_ARCH=0
[[ "${{ matrix.build-type }}" == "production" ]] && export ENABLE_PROD=1 || export ENABLE_PROD=0
[[ "${{ matrix.rn-architecture }}" == "new" ]] && export ENABLE_NEW_ARCH=1 || export ENABLE_NEW_ARCH=0
[[ "${{ matrix.ios-use-frameworks }}" == "dynamic-frameworks" ]] && export USE_FRAMEWORKS=dynamic
echo "ENABLE_PROD=$ENABLE_PROD"
echo "ENABLE_NEW_ARCH=$ENABLE_NEW_ARCH"
PRODUCTION=$ENABLE_PROD RCT_NEW_ARCH_ENABLED=$ENABLE_NEW_ARCH bundle exec pod install
cat Podfile.lock | grep $RN_SENTRY_POD_NAME

./scripts/pod-install.sh

- name: Build Android App
if: ${{ matrix.platform == 'android' }}
working-directory: ${{ env.REACT_NATIVE_SAMPLE_PATH }}/android
working-directory: ${{ env.REACT_NATIVE_SAMPLE_PATH }}
run: |
if [[ ${{ matrix.rn-architecture }} == 'new' ]]; then
perl -i -pe's/newArchEnabled=false/newArchEnabled=true/g' gradle.properties
echo 'New Architecture enabled'
elif [[ ${{ matrix.rn-architecture }} == 'legacy' ]]; then
perl -i -pe's/newArchEnabled=true/newArchEnabled=false/g' gradle.properties
echo 'Legacy Architecture enabled'
else
echo 'No changes for architecture: ${{ matrix.rn-architecture }}'
fi
[[ "${{ matrix.build-type }}" == "production" ]] && CONFIG='Release' || CONFIG='Debug'
echo "Building $CONFIG"
[[ "${{ matrix.build-type }}" == "production" ]] && TEST_TYPE='release' || TEST_TYPE='debug'
echo "Building $TEST_TYPE"
export RN_ARCHITECTURE="${{ matrix.rn-architecture }}"
[[ "${{ matrix.build-type }}" == "production" ]] && export CONFIG='release' || export CONFIG='debug'

./gradlew ":app:assemble$CONFIG" -PreactNativeArchitectures=x86
./scripts/set-dsn-aos.mjs
./scripts/build-android.sh -PreactNativeArchitectures=x86

- name: Build iOS App
if: ${{ matrix.platform == 'ios' }}
working-directory: ${{ env.REACT_NATIVE_SAMPLE_PATH }}/ios
working-directory: ${{ env.REACT_NATIVE_SAMPLE_PATH }}
run: |
[[ "${{ matrix.build-type }}" == "production" ]] && CONFIG='Release' || CONFIG='Debug'
echo "Building $CONFIG"
mkdir -p "DerivedData"
derivedData="$(cd "DerivedData" ; pwd -P)"
set -o pipefail && xcodebuild \
-workspace sentryreactnativesample.xcworkspace \
-configuration "$CONFIG" \
-scheme sentryreactnativesample \
-sdk 'iphonesimulator' \
-destination 'generic/platform=iOS Simulator' \
ONLY_ACTIVE_ARCH=yes \
-derivedDataPath "$derivedData" \
build \
| tee xcodebuild.log \
| xcbeautify --quieter --is-ci --disable-colored-output
[[ "${{ matrix.build-type }}" == "production" ]] && export CONFIG='Release' || export CONFIG='Debug'

./scripts/set-dsn-ios.mjs
./scripts/build-ios.sh

- name: Build macOS App
if: ${{ matrix.platform == 'macos' }}
working-directory: samples/react-native-macos/macos
run: |
[[ "${{ matrix.build-type }}" == "production" ]] && CONFIG='Release' || CONFIG='Debug'
[[ "${{ matrix.build-type }}" == "production" ]] && export CONFIG='Release' || export CONFIG='Debug'
echo "Building $CONFIG"
mkdir -p "DerivedData"
derivedData="$(cd "DerivedData" ; pwd -P)"
Expand All @@ -185,19 +161,19 @@ jobs:

- name: Archive iOS App
if: ${{ matrix.platform == 'ios' && matrix.rn-architecture == 'new' && matrix.build-type == 'production' && matrix.ios-use-frameworks == 'no-frameworks' }}
working-directory: ${{ env.REACT_NATIVE_SAMPLE_PATH }}
run: |
cd ${{ env.REACT_NATIVE_SAMPLE_PATH }}/ios/DerivedData/Build/Products/Release-iphonesimulator
zip -r \
${{ github.workspace }}/${{ env.IOS_APP_ARCHIVE_PATH }} \
sentryreactnativesample.app

- name: Archive Android App
if: ${{ matrix.platform == 'android' && matrix.rn-architecture == 'new' && matrix.build-type == 'production' }}
run: |
mv ${{ env.REACT_NATIVE_SAMPLE_PATH }}/android/app/build/outputs/apk/release/app-release.apk app.apk
zip -j \
${{ env.ANDROID_APP_ARCHIVE_PATH }} \
app.apk
${{ env.REACT_NATIVE_SAMPLE_PATH }}/app.apk \
${{ env.REACT_NATIVE_SAMPLE_PATH }}/app-androidTest.apk

- name: Upload iOS APP
if: ${{ matrix.platform == 'ios' && matrix.rn-architecture == 'new' && matrix.build-type == 'production' && matrix.ios-use-frameworks == 'no-frameworks' }}
Expand Down Expand Up @@ -273,7 +249,9 @@ jobs:
- name: Unzip Android APK
if: ${{ matrix.platform == 'android' }}
working-directory: ${{ env.REACT_NATIVE_SAMPLE_PATH }}
run: unzip ${{ env.ANDROID_APP_ARCHIVE_PATH }}
run: |
unzip ${{ env.ANDROID_APP_ARCHIVE_PATH }}
rm app-androidTest.apk

- name: Enable Corepack
run: npm i -g corepack
Expand Down
105 changes: 104 additions & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,113 @@

<!-- prettier-ignore-start -->
> [!IMPORTANT]
> If you are upgrading to the `7.x` versions of the Sentry React Native SDK from `6.x` or below,
> If you are upgrading to the `8.x` versions of the Sentry React Native SDK from `7.x` or below,
> make sure you follow our [migration guide](https://docs.sentry.io/platforms/react-native/migration/) first.
<!-- prettier-ignore-end -->
## 8.0.0-alpha.0

### Upgrading from 7.x to 8.0

Version 8 of the Sentry React Native SDK updates the underlying native SDKs (Cocoa v9, CLI v3, Android Gradle Plugin v6) which introduce breaking changes in minimum version requirements and build tooling.

See our [migration docs](https://docs.sentry.io/platforms/react-native/migration/v7-to-v8/) for more information.

### Breaking Changes

#### Minimum Version Requirements

- **iOS/macOS/tvOS**: ([#5356](https://github.com/getsentry/sentry-react-native/pull/5356))
- iOS **15.0+** (previously 11.0+)
- macOS **10.14+** (previously 10.13+)
- tvOS **15.0+** (previously 11.0+)

- **Android**: ([#5578](https://github.com/getsentry/sentry-react-native/pull/5578))
- Sentry Android Gradle Plugin **6.0.0** (previously 5.x)
- Android Gradle Plugin **7.4.0+** (previously 7.3.0+)
- Kotlin **1.8+**

- **Sentry Self-Hosted**: ([#5523](https://github.com/getsentry/sentry-react-native/pull/5523))
- Sentry CLI v3 requires self-hosted **25.11.1+** (previously 25.2.0)

### Features

- Capture App Start errors and crashes by initializing Sentry from `sentry.options.json` ([#4472](https://github.com/getsentry/sentry-react-native/pull/4472))

Create `sentry.options.json` in the React Native project root and set options the same as you currently have in `Sentry.init` in JS.

```json
{
"dsn": "https://[email protected]/value",
}
```

Initialize Sentry on the native layers by newly provided native methods.

```kotlin
import io.sentry.react.RNSentrySDK

class MainApplication : Application(), ReactApplication {
override fun onCreate() {
super.onCreate()
RNSentrySDK.init(this)
}
}
```

```obj-c
#import <RNSentry/RNSentry.h>

@implementation AppDelegate
- (BOOL)application:(UIApplication *)application
didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
[RNSentrySDK start];
return [super application:application didFinishLaunchingWithOptions:launchOptions];
}
@end
```
- Add RNSentrySDK APIs support to @sentry/react-native/expo plugin ([#4633](https://github.com/getsentry/sentry-react-native/pull/4633))
- Adds `useNativeInit` option to automatically initialize Sentry natively before JavaScript loads, enabling capture of app start errors
```json
{
"expo": {
"plugins": [
[
"@sentry/react-native/expo",
{
"useNativeInit": true
}
]
]
}
}
```

### Changes

- Load `optionsFile` into the JS bundle during Metro bundle process ([#4476](https://github.com/getsentry/sentry-react-native/pull/4476))
- Add experimental version of `startWithConfigureOptions` for Apple platforms ([#4444](https://github.com/getsentry/sentry-react-native/pull/4444))
- Add experimental version of `init` with optional `OptionsConfiguration<SentryAndroidOptions>` for Android ([#4451](https://github.com/getsentry/sentry-react-native/pull/4451))
- Add initialization using `sentry.options.json` for Apple platforms ([#4447](https://github.com/getsentry/sentry-react-native/pull/4447))
- Add initialization using `sentry.options.json` for Android ([#4451](https://github.com/getsentry/sentry-react-native/pull/4451))
- Merge options from file with `Sentry.init` options in JS ([#4510](https://github.com/getsentry/sentry-react-native/pull/4510))

### Internal

- Extract iOS native initialization to standalone structures ([#4442](https://github.com/getsentry/sentry-react-native/pull/4442))
- Extract Android native initialization to standalone structures ([#4445](https://github.com/getsentry/sentry-react-native/pull/4445))

### Dependencies

- Bump Cocoa SDK from v8.58.0 to v9.1.0 ([#5356](https://github.com/getsentry/sentry-react-native/pull/5356))
- [changelog](https://github.com/getsentry/sentry-cocoa/blob/main/CHANGELOG.md#910)
- [diff](https://github.com/getsentry/sentry-cocoa/compare/8.58.0...9.1.0)
- Bump CLI from v2.58.4 to v3.1.0 ([#5523](https://github.com/getsentry/sentry-react-native/pull/5523), [#5471](https://github.com/getsentry/sentry-react-native/pull/5471), [#5514](https://github.com/getsentry/sentry-react-native/pull/5514), [#5502](https://github.com/getsentry/sentry-react-native/pull/5502))
- [changelog](https://github.com/getsentry/sentry-cli/blob/master/CHANGELOG.md#310)
- [diff](https://github.com/getsentry/sentry-cli/compare/2.58.4...3.1.0)

## 7.11.0

### Features
Expand Down
4 changes: 2 additions & 2 deletions dev-packages/e2e-tests/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "sentry-react-native-e2e-tests",
"version": "7.11.0",
"version": "8.0.0-alpha.0",
"private": true,
"description": "Sentry React Native End to End Tests Library",
"main": "dist/index.js",
Expand All @@ -14,7 +14,7 @@
"@babel/preset-env": "^7.25.3",
"@babel/preset-typescript": "^7.18.6",
"@sentry/core": "10.37.0",
"@sentry/react-native": "7.11.0",
"@sentry/react-native": "8.0.0-alpha.0",
"@types/node": "^20.9.3",
"@types/react": "^18.2.64",
"appium": "2.4.1",
Expand Down
2 changes: 1 addition & 1 deletion dev-packages/type-check/package.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"name": "sentry-react-native-type-check",
"private": true,
"version": "7.11.0",
"version": "8.0.0-alpha.0",
"scripts": {
"type-check": "./run-type-check.sh"
}
Expand Down
2 changes: 1 addition & 1 deletion dev-packages/utils/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "sentry-react-native-samples-utils",
"version": "7.11.0",
"version": "8.0.0-alpha.0",
"description": "Internal Samples Utils",
"main": "index.js",
"license": "MIT",
Expand Down
2 changes: 1 addition & 1 deletion lerna.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"$schema": "node_modules/lerna/schemas/lerna-schema.json",
"version": "7.11.0",
"version": "8.0.0-alpha.0",
"packages": [
"packages/*",
"dev-packages/*",
Expand Down
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@
},
"devDependencies": {
"@naturalcycles/ktlint": "^1.13.0",
"@sentry/cli": "2.58.4",
"@sentry/cli": "3.1.0",
"downlevel-dts": "^0.11.0",
"google-java-format": "^1.4.0",
"lerna": "^8.1.8",
Expand Down
12 changes: 8 additions & 4 deletions packages/core/RNSentry.podspec
Original file line number Diff line number Diff line change
Expand Up @@ -42,11 +42,15 @@ Pod::Spec.new do |s|
s.preserve_paths = '*.js'

s.source_files = 'ios/**/*.{h,m,mm}'
s.public_header_files = 'ios/RNSentry.h'
s.public_header_files = 'ios/RNSentry.h', 'ios/RNSentrySDK.h', 'ios/RNSentryStart.h', 'ios/RNSentryVersion.h', 'ios/RNSentryBreadcrumb.h', 'ios/RNSentryReplay.h', 'ios/RNSentryReplayBreadcrumbConverter.h', 'ios/Replay/RNSentryReplayMask.h', 'ios/Replay/RNSentryReplayUnmask.h', 'ios/RNSentryTimeToDisplay.h'

s.compiler_flags = other_cflags

s.dependency 'Sentry/HybridSDK', '8.58.0'
s.pod_target_xcconfig = {
'DEFINES_MODULE' => 'YES'
}

s.dependency 'Sentry/HybridSDK', '9.1.0'

if defined? install_modules_dependencies
# Default React Native dependencies for 0.71 and above (new and legacy architecture)
Expand All @@ -56,10 +60,10 @@ Pod::Spec.new do |s|

if is_new_arch_enabled then
# New Architecture on React Native 0.70 and older
s.pod_target_xcconfig = {
s.pod_target_xcconfig.merge!({
"HEADER_SEARCH_PATHS" => "\"$(PODS_ROOT)/boost\"",
"CLANG_CXX_LANGUAGE_STANDARD" => "c++17"
}
})

s.dependency "React-RCTFabric" # Required for Fabric Components (like RCTViewComponentView)
s.dependency "React-Codegen"
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
{
"dsn": "invalid-dsn"
}
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
invalid-options
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
{
"dsn": "https://[email protected]/123456",
"enableTracing": true,
"tracesSampleRate": 1.0
}
Loading
Loading