diff --git a/.eslintignore b/.eslintignore
index e16e0140326a..a288117cf8ee 100644
--- a/.eslintignore
+++ b/.eslintignore
@@ -13,6 +13,7 @@ packages/*/dist
packages/*/types_generated
packages/debugger-frontend/dist/**/*
packages/react-native-codegen/lib
+private/react-native-codegen-typescript-test/lib/**/*
**/Pods/*
**/*.macos.js
**/*.windows.js
diff --git a/.eslintrc.js b/.eslintrc.js
index a6d2c177a278..3f3ff7adda01 100644
--- a/.eslintrc.js
+++ b/.eslintrc.js
@@ -35,6 +35,9 @@ module.exports = {
// Flow handles these checks for us, so they aren't required
'no-undef': 'off',
'no-unreachable': 'off',
+ // Throwing from function or rejecting promises with non-error values could result in unclear error stack traces and lead to harder debugging
+ 'prefer-promise-reject-errors': 'error',
+ 'no-throw-literal': 'error',
},
},
{
diff --git a/.flowconfig b/.flowconfig
index 6d4cec2f2326..9ccb6588a52f 100644
--- a/.flowconfig
+++ b/.flowconfig
@@ -69,17 +69,12 @@ munge_underscores=true
module.name_mapper='^react-native$' -> '/packages/react-native/index.js'
module.name_mapper='^react-native/\(.*\)$' -> '/packages/react-native/\1'
module.name_mapper='^@react-native/dev-middleware$' -> '/packages/dev-middleware'
-module.name_mapper='^@?[./a-zA-Z0-9$_-]+\.\(bmp\|gif\|jpg\|jpeg\|png\|psd\|svg\|webp\|m4v\|mov\|mp4\|mpeg\|mpg\|webm\|aac\|aiff\|caf\|m4a\|mp3\|wav\|html\|pdf\|xml\)$' -> '/packages/react-native/Libraries/Image/RelativeImageStub'
+module.name_mapper='^@?[./a-zA-Z0-9$_-]+\.\(bmp\|gif\|jpg\|jpeg\|png\|psd\|svg\|webp\|m4v\|mov\|mp4\|mpeg\|mpg\|webm\|aac\|aiff\|caf\|m4a\|mp3\|wav\|html\|pdf\|xml\|ktx\|heic\|heif\)$' -> '/packages/react-native/Libraries/Image/RelativeImageStub'
module.system.haste.module_ref_prefix=m#
react.runtime=automatic
-experimental.only_support_flow_fixme_and_expected_error=true
-experimental.require_suppression_with_error_code=true
-experimental.invariant_subtyping_error_message_improvement=true
-experimental.natural_inference.local_object_literals.followup_fix=true
-
ban_spread_key_props=true
[lints]
@@ -103,4 +98,4 @@ untyped-import
untyped-type-import
[version]
-^0.280.0
+^0.297.0
diff --git a/.github/actions/build-android/action.yml b/.github/actions/build-android/action.yml
index ac769b62ce95..89ca4c49b284 100644
--- a/.github/actions/build-android/action.yml
+++ b/.github/actions/build-android/action.yml
@@ -16,7 +16,17 @@ runs:
uses: ./.github/actions/setup-node
- name: Install node dependencies
uses: ./.github/actions/yarn-install
+ - name: Read current RNVersion
+ shell: bash
+ id: read-rn-version
+ run: |
+ echo "rn-version=$(jq -r '.version' packages/react-native/package.json)" >> $GITHUB_OUTPUT
- name: Set React Native Version
+ # We don't want to set the version for stable branches, because this has been
+ # already set from the 'create release' commits on the release branch.
+ # For testing RC.0, though, the version has not been set yet. In that case, we are on Stable branch and
+ # it is the only case when the version is still 1000.0.0
+ if: ${{ !endsWith(github.ref_name, '-stable') || endsWith(github.ref_name, '-stable') && steps.read-rn-version.outputs.rn-version == '1000.0.0' }}
shell: bash
run: node ./scripts/releases/set-rn-artifacts-version.js --build-type ${{ inputs.release-type }}
- name: Setup gradle
@@ -25,7 +35,7 @@ runs:
cache-read-only: "false"
cache-encryption-key: ${{ inputs.gradle-cache-encryption-key }}
- name: Restore Android ccache
- uses: actions/cache/restore@v4
+ uses: actions/cache/restore@v5
with:
path: /github/home/.cache/ccache
key: v2-ccache-android-${{ github.job }}-${{ github.ref }}-${{ hashFiles('packages/react-native/ReactAndroid/**/*.cpp', 'packages/react-native/ReactAndroid/**/*.h', 'packages/react-native/ReactCommon/**/*.cpp', 'packages/react-native/ReactAndroid/**/CMakeLists.txt', 'packages/react-native/ReactCommon/**/CMakeLists.txt') }}
@@ -42,19 +52,22 @@ runs:
if [[ "${{ inputs.release-type }}" == "dry-run" ]]; then
# dry-run: we only build ARM64 to save time/resources. For release/nightlies the default is to build all archs.
export ORG_GRADLE_PROJECT_reactNativeArchitectures="arm64-v8a,x86" # x86 is required for E2E testing
+ export HERMES_PREBUILT_FLAG="ORG_GRADLE_PROJECT_react.internal.useHermesNightly=true"
TASKS="publishAllToMavenTempLocal build"
elif [[ "${{ inputs.release-type }}" == "nightly" ]]; then
# nightly: we set isSnapshot to true so artifacts are sent to the right repository on Maven Central.
export ORG_GRADLE_PROJECT_isSnapshot="true"
+ export HERMES_PREBUILT_FLAG="ORG_GRADLE_PROJECT_react.internal.useHermesNightly=true"
TASKS="publishAllToMavenTempLocal publishAndroidToSonatype build"
else
# release: we want to build all archs (default)
+ export HERMES_PREBUILT_FLAG="ORG_GRADLE_PROJECT_react.internal.useHermesStable=true"
TASKS="publishAllToMavenTempLocal publishAndroidToSonatype build"
fi
- ./gradlew $TASKS -PenableWarningsAsErrors=true
+ env "$HERMES_PREBUILT_FLAG" ./gradlew $TASKS -PenableWarningsAsErrors=true
- name: Save Android ccache
if: ${{ github.ref == 'refs/heads/main' || contains(github.ref, '-stable') }}
- uses: actions/cache/save@v4
+ uses: actions/cache/save@v5
with:
path: /github/home/.cache/ccache
key: v2-ccache-android-${{ github.job }}-${{ github.ref }}-${{ hashFiles('packages/react-native/ReactAndroid/**/*.cpp', 'packages/react-native/ReactAndroid/**/*.h', 'packages/react-native/ReactCommon/**/*.cpp', 'packages/react-native/ReactAndroid/**/CMakeLists.txt', 'packages/react-native/ReactCommon/**/CMakeLists.txt') }}
@@ -62,13 +75,13 @@ runs:
shell: bash
run: ccache -s -v
- name: Upload Maven Artifacts
- uses: actions/upload-artifact@v4.3.4
+ uses: actions/upload-artifact@v6
with:
name: maven-local
path: /tmp/maven-local
- name: Upload test results
if: ${{ always() }}
- uses: actions/upload-artifact@v4.3.4
+ uses: actions/upload-artifact@v6
with:
name: build-android-results
compression-level: 1
@@ -78,14 +91,14 @@ runs:
packages/react-native/ReactAndroid/build/reports
- name: Upload RNTester APK - hermes-debug
if: ${{ always() }}
- uses: actions/upload-artifact@v4.3.4
+ uses: actions/upload-artifact@v6
with:
name: rntester-debug
path: packages/rn-tester/android/app/build/outputs/apk/debug/
compression-level: 0
- name: Upload RNTester APK - hermes-release
if: ${{ always() }}
- uses: actions/upload-artifact@v4.3.4
+ uses: actions/upload-artifact@v6
with:
name: rntester-release
path: packages/rn-tester/android/app/build/outputs/apk/release/
diff --git a/.github/actions/build-apple-slices-hermes/action.yml b/.github/actions/build-apple-slices-hermes/action.yml
deleted file mode 100644
index bc66de6a21b2..000000000000
--- a/.github/actions/build-apple-slices-hermes/action.yml
+++ /dev/null
@@ -1,103 +0,0 @@
-name: build-apple-slices-hermes
-description: This action builds hermesc for Apple platforms
-inputs:
- hermes-version:
- required: true
- description: The version of Hermes
- react-native-version:
- required: true
- description: The version of Hermes
- slice:
- required: true
- description: The slice of hermes you want to build. It could be iphone, iphonesimulator, macos, catalyst, appletvos, appletvsimulator, xros, or xrossimulator
- flavor:
- required: true
- description: The flavor we want to build. It can be Debug or Release
-runs:
- using: composite
- steps:
- - name: Setup xcode
- uses: ./.github/actions/setup-xcode
- - name: Restore Hermes workspace
- uses: ./.github/actions/restore-hermes-workspace
- - name: Restore HermesC Artifact
- uses: actions/download-artifact@v4
- with:
- name: hermesc-apple
- path: ./packages/react-native/sdks/hermes/build_host_hermesc
- - name: Restore Slice From Cache
- id: restore-slice-cache
- uses: actions/cache/restore@v4
- with:
- path: ./packages/react-native/sdks/hermes/build_${{ inputs.slice }}_${{ inputs.flavor }}
- key: v6-hermes-apple-${{ inputs.hermes-version }}-${{ inputs.react-native-version }}-${{ hashfiles('packages/react-native/sdks/hermes-engine/utils/build-apple-framework.sh') }}-${{ inputs.slice }}-${{ inputs.flavor }}
- - name: Build the Hermes ${{ inputs.slice }} frameworks
- shell: bash
- run: |
- cd ./packages/react-native/sdks/hermes || exit 1
- SLICE=${{ inputs.slice }}
- FLAVOR=${{ inputs.flavor }}
- FINAL_PATH=build_"$SLICE"_"$FLAVOR"
- echo "Final path for this slice is: $FINAL_PATH"
-
- if [[ -d "$FINAL_PATH" ]]; then
- echo "[HERMES] Skipping! Found the requested slice at $FINAL_PATH".
- exit 0
- fi
-
- if [[ "$ARTIFACTS_EXIST" ]]; then
- echo "[HERMES] Skipping! Artifacts exists already."
- exit 0
- fi
-
- export RELEASE_VERSION=${{ inputs.react-native-version }}
-
- # HermesC is used to build hermes, so it has to be executable
- chmod +x ./build_host_hermesc/bin/hermesc
-
- if [[ "$SLICE" == "macosx" ]]; then
- echo "[HERMES] Building Hermes for MacOS"
-
- chmod +x ./utils/build-mac-framework.sh
- BUILD_TYPE="${{ inputs.flavor }}" ./utils/build-mac-framework.sh
- else
- echo "[HERMES] Building Hermes for iOS: $SLICE"
-
- chmod +x ./utils/build-ios-framework.sh
- BUILD_TYPE="${{ inputs.flavor }}" ./utils/build-ios-framework.sh "$SLICE"
- fi
-
- echo "Moving from build_$SLICE to $FINAL_PATH"
- mv build_"$SLICE" "$FINAL_PATH"
-
- # check whether everything is there
- if [[ -d "$FINAL_PATH/lib/hermesvm.framework" ]]; then
- echo "Successfully built hermesvm.framework for $SLICE in $FLAVOR"
- else
- echo "Failed to built hermesvm.framework for $SLICE in $FLAVOR"
- exit 1
- fi
-
- if [[ -d "$FINAL_PATH/lib/hermesvm.framework.dSYM" ]]; then
- echo "Successfully built hermesvm.framework.dSYM for $SLICE in $FLAVOR"
- else
- echo "Failed to built hermesvm.framework.dSYM for $SLICE in $FLAVOR"
- echo "Please try again"
- exit 1
- fi
- - name: Compress slices to preserve Symlinks
- shell: bash
- run: |
- cd ./packages/react-native/sdks/hermes
- tar -czv -f build_${{ matrix.slice }}_${{ matrix.flavor }}.tar.gz build_${{ matrix.slice }}_${{ matrix.flavor }}
- - name: Upload Artifact for Slice (${{ inputs.slice }}, ${{ inputs.flavor }}}
- uses: actions/upload-artifact@v4.3.4
- with:
- name: slice-${{ inputs.slice }}-${{ inputs.flavor }}
- path: ./packages/react-native/sdks/hermes/build_${{ inputs.slice }}_${{ inputs.flavor }}.tar.gz
- - name: Save slice cache
- if: ${{ github.ref == 'refs/heads/main' || contains(github.ref, '-stable') }} # To avoid that the cache explode.
- uses: actions/cache/save@v4
- with:
- path: ./packages/react-native/sdks/hermes/build_${{ inputs.slice }}_${{ inputs.flavor }}
- key: v6-hermes-apple-${{ inputs.hermes-version }}-${{ inputs.react-native-version }}-${{ hashfiles('packages/react-native/sdks/hermes-engine/utils/build-apple-framework.sh') }}-${{ inputs.SLICE }}-${{ inputs.FLAVOR }}
diff --git a/.github/actions/build-hermes-macos/action.yml b/.github/actions/build-hermes-macos/action.yml
deleted file mode 100644
index 0f3a42a367f7..000000000000
--- a/.github/actions/build-hermes-macos/action.yml
+++ /dev/null
@@ -1,227 +0,0 @@
-name: build-hermes-macos
-description: This action builds hermesc for Apple platforms
-inputs:
- hermes-version:
- required: true
- description: The version of Hermes
- react-native-version:
- required: true
- description: The version of React Native
- flavor:
- required: true
- description: The flavor we want to build. It can be Debug or Release
-runs:
- using: composite
- steps:
- - name: Setup xcode
- uses: ./.github/actions/setup-xcode
- - name: Restore Hermes workspace
- uses: ./.github/actions/restore-hermes-workspace
- - name: Restore Cached Artifacts
- uses: actions/cache/restore@v4
- with:
- key: v4-hermes-artifacts-${{ inputs.flavor }}-${{ inputs.hermes-version }}-${{ inputs.react-native-version }}-${{ hashFiles('./packages/react-native/sdks/hermes-engine/utils/build-apple-framework.sh') }}
- path: |
- /tmp/hermes/osx-bin/${{ inputs.flavor }}
- /tmp/hermes/dSYM/${{ inputs.flavor }}
- /tmp/hermes/hermes-runtime-darwin/hermes-ios-${{ inputs.flavor }}.tar.gz
- - name: Check if the required artifacts already exist
- id: check_if_apple_artifacts_are_there
- shell: bash
- run: |
- FLAVOR="${{ inputs.flavor }}"
- echo "Flavor is $FLAVOR"
- OSX_BIN="/tmp/hermes/osx-bin/$FLAVOR"
- DSYM="/tmp/hermes/dSYM/$FLAVOR"
- HERMES="/tmp/hermes/hermes-runtime-darwin/hermes-ios-$FLAVOR.tar.gz"
-
- if [[ -d "$OSX_BIN" ]] && \
- [[ -d "$DSYM" ]] && \
- [[ -f "$HERMES" ]]; then
-
- echo "Artifacts are there!"
- echo "ARTIFACTS_EXIST=true" >> $GITHUB_ENV
- echo "ARTIFACTS_EXIST=true" >> $GITHUB_OUTPUT
- fi
- - name: Setup node.js
- uses: ./.github/actions/setup-node
- - name: Yarn- Install Dependencies
- if: ${{ steps.check_if_apple_artifacts_are_there.outputs.ARTIFACTS_EXIST != 'true' }}
- uses: ./.github/actions/yarn-install
- - name: Slice cache macosx
- if: ${{ steps.check_if_apple_artifacts_are_there.outputs.ARTIFACTS_EXIST != 'true' }}
- uses: actions/download-artifact@v4
- with:
- path: ./packages/react-native/sdks/hermes/
- name: slice-macosx-${{ inputs.flavor }}
- - name: Slice cache iphoneos
- if: ${{ steps.check_if_apple_artifacts_are_there.outputs.ARTIFACTS_EXIST != 'true' }}
- uses: actions/download-artifact@v4
- with:
- path: ./packages/react-native/sdks/hermes/
- name: slice-iphoneos-${{ inputs.flavor }}
- - name: Slice cache iphonesimulator
- if: ${{ steps.check_if_apple_artifacts_are_there.outputs.ARTIFACTS_EXIST != 'true' }}
- uses: actions/download-artifact@v4
- with:
- path: ./packages/react-native/sdks/hermes/
- name: slice-iphonesimulator-${{ inputs.flavor }}
- - name: Slice cache appletvos
- if: ${{ steps.check_if_apple_artifacts_are_there.outputs.ARTIFACTS_EXIST != 'true' }}
- uses: actions/download-artifact@v4
- with:
- path: ./packages/react-native/sdks/hermes/
- name: slice-appletvos-${{ inputs.flavor }}
- - name: Slice cache appletvsimulator
- if: ${{ steps.check_if_apple_artifacts_are_there.outputs.ARTIFACTS_EXIST != 'true' }}
- uses: actions/download-artifact@v4
- with:
- path: ./packages/react-native/sdks/hermes/
- name: slice-appletvsimulator-${{ inputs.flavor }}
- - name: Slice cache catalyst
- if: ${{ steps.check_if_apple_artifacts_are_there.outputs.ARTIFACTS_EXIST != 'true' }}
- uses: actions/download-artifact@v4
- with:
- path: ./packages/react-native/sdks/hermes/
- name: slice-catalyst-${{ inputs.flavor }}
- - name: Slice cache xros
- if: ${{ steps.check_if_apple_artifacts_are_there.outputs.ARTIFACTS_EXIST != 'true' }}
- uses: actions/download-artifact@v4
- with:
- path: ./packages/react-native/sdks/hermes/
- name: slice-xros-${{ inputs.flavor }}
- - name: Slice cache xrsimulator
- if: ${{ steps.check_if_apple_artifacts_are_there.outputs.ARTIFACTS_EXIST != 'true' }}
- uses: actions/download-artifact@v4
- with:
- path: ./packages/react-native/sdks/hermes/
- name: slice-xrsimulator-${{ inputs.flavor }}
- - name: Unzip slices
- shell: bash
- if: ${{ steps.check_if_apple_artifacts_are_there.outputs.ARTIFACTS_EXIST != 'true' }}
- run: |
- cd ./packages/react-native/sdks/hermes
- ls -l .
- tar -xzv -f build_catalyst_${{ matrix.flavor }}.tar.gz
- tar -xzv -f build_iphoneos_${{ matrix.flavor }}.tar.gz
- tar -xzv -f build_iphonesimulator_${{ matrix.flavor }}.tar.gz
- tar -xzv -f build_appletvos_${{ matrix.flavor }}.tar.gz
- tar -xzv -f build_appletvsimulator_${{ matrix.flavor }}.tar.gz
- tar -xzv -f build_macosx_${{ matrix.flavor }}.tar.gz
- tar -xzv -f build_xros_${{ matrix.flavor }}.tar.gz
- tar -xzv -f build_xrsimulator_${{ matrix.flavor }}.tar.gz
- - name: Move back build folders
- if: ${{ steps.check_if_apple_artifacts_are_there.outputs.ARTIFACTS_EXIST != 'true' }}
- shell: bash
- run: |
- ls -l ./packages/react-native/sdks/hermes
- cd ./packages/react-native/sdks/hermes || exit 1
- mv build_macosx_${{ inputs.flavor }} build_macosx
- mv build_iphoneos_${{ inputs.flavor }} build_iphoneos
- mv build_iphonesimulator_${{ inputs.flavor }} build_iphonesimulator
- mv build_appletvos_${{ inputs.flavor }} build_appletvos
- mv build_appletvsimulator_${{ inputs.flavor }} build_appletvsimulator
- mv build_catalyst_${{ inputs.flavor }} build_catalyst
- mv build_xros_${{ inputs.flavor }} build_xros
- mv build_xrsimulator_${{ inputs.flavor }} build_xrsimulator
- - name: Prepare destroot folder
- if: ${{ steps.check_if_apple_artifacts_are_there.outputs.ARTIFACTS_EXIST != 'true' }}
- shell: bash
- run: |
- cd ./packages/react-native/sdks/hermes || exit 1
- chmod +x ./utils/build-apple-framework.sh
- . ./utils/build-apple-framework.sh
- prepare_dest_root_for_ci
- - name: Create fat framework for iOS
- if: ${{ steps.check_if_apple_artifacts_are_there.outputs.ARTIFACTS_EXIST != 'true' }}
- shell: bash
- run: |
- cd ./packages/react-native/sdks/hermes || exit 1
- echo "[HERMES] Creating the universal framework"
- chmod +x ./utils/build-ios-framework.sh
- ./utils/build-ios-framework.sh build_framework
-
- chmod +x ./destroot/bin/hermesc
- - name: Package the Hermes Apple frameworks
- if: ${{ steps.check_if_apple_artifacts_are_there.outputs.ARTIFACTS_EXIST != 'true' }}
- shell: bash
- run: |
- BUILD_TYPE="${{ inputs.flavor }}"
- echo "Packaging Hermes Apple frameworks for $BUILD_TYPE build type"
-
- TARBALL_OUTPUT_DIR=$(mktemp -d /tmp/hermes-tarball-output-XXXXXXXX)
-
- TARBALL_FILENAME=$(node ./packages/react-native/scripts/hermes/get-tarball-name.js --buildType "$BUILD_TYPE")
-
- echo "Packaging Hermes Apple frameworks for $BUILD_TYPE build type"
-
- TARBALL_OUTPUT_PATH=$(node ./packages/react-native/scripts/hermes/create-tarball.js \
- --inputDir ./packages/react-native/sdks/hermes \
- --buildType "$BUILD_TYPE" \
- --outputDir $TARBALL_OUTPUT_DIR)
-
- echo "Hermes tarball saved to $TARBALL_OUTPUT_PATH"
-
- mkdir -p $HERMES_TARBALL_ARTIFACTS_DIR
- cp $TARBALL_OUTPUT_PATH $HERMES_TARBALL_ARTIFACTS_DIR/.
-
- mkdir -p /tmp/hermes/osx-bin/${{ inputs.flavor }}
- cp ./packages/react-native/sdks/hermes/build_macosx/bin/* /tmp/hermes/osx-bin/${{ inputs.flavor }}
- ls -lR /tmp/hermes/osx-bin/
- - name: Create dSYM archive
- if: ${{ steps.check_if_apple_artifacts_are_there.outputs.ARTIFACTS_EXIST != 'true' }}
- shell: bash
- run: |
- FLAVOR=${{ inputs.flavor }}
- WORKING_DIR="/tmp/hermes_tmp/dSYM/$FLAVOR"
-
- mkdir -p "$WORKING_DIR/macosx"
- mkdir -p "$WORKING_DIR/catalyst"
- mkdir -p "$WORKING_DIR/iphoneos"
- mkdir -p "$WORKING_DIR/iphonesimulator"
- mkdir -p "$WORKING_DIR/appletvos"
- mkdir -p "$WORKING_DIR/appletvsimulator"
- mkdir -p "$WORKING_DIR/xros"
- mkdir -p "$WORKING_DIR/xrsimulator"
-
- cd ./packages/react-native/sdks/hermes || exit 1
-
- DSYM_FILE_PATH=lib/hermesvm.framework.dSYM
- cp -r build_macosx/$DSYM_FILE_PATH "$WORKING_DIR/macosx/"
- cp -r build_catalyst/$DSYM_FILE_PATH "$WORKING_DIR/catalyst/"
- cp -r build_iphoneos/$DSYM_FILE_PATH "$WORKING_DIR/iphoneos/"
- cp -r build_iphonesimulator/$DSYM_FILE_PATH "$WORKING_DIR/iphonesimulator/"
- cp -r build_appletvos/$DSYM_FILE_PATH "$WORKING_DIR/appletvos/"
- cp -r build_appletvsimulator/$DSYM_FILE_PATH "$WORKING_DIR/appletvsimulator/"
- cp -r build_xros/$DSYM_FILE_PATH "$WORKING_DIR/xros/"
- cp -r build_xrsimulator/$DSYM_FILE_PATH "$WORKING_DIR/xrsimulator/"
-
- DEST_DIR="/tmp/hermes/dSYM/$FLAVOR"
- tar -C "$WORKING_DIR" -czvf "hermesvm.framework.dSYM" .
-
- mkdir -p "$DEST_DIR"
- mv "hermesvm.framework.dSYM" "$DEST_DIR"
- - name: Upload hermes dSYM artifacts
- uses: actions/upload-artifact@v4.3.4
- with:
- name: hermes-dSYM-${{ inputs.flavor }}
- path: /tmp/hermes/dSYM/${{ inputs.flavor }}
- - name: Upload hermes Runtime artifacts
- uses: actions/upload-artifact@v4.3.4
- with:
- name: hermes-darwin-bin-${{ inputs.flavor }}
- path: /tmp/hermes/hermes-runtime-darwin/hermes-ios-${{ inputs.flavor }}.tar.gz
- - name: Upload hermes osx artifacts
- uses: actions/upload-artifact@v4.3.4
- with:
- name: hermes-osx-bin-${{ inputs.flavor }}
- path: /tmp/hermes/osx-bin/${{ inputs.flavor }}
- - name: Upload Hermes Artifacts
- uses: actions/cache/save@v4
- if: ${{ github.ref == 'refs/heads/main' || contains(github.ref, '-stable') }} # To avoid that the cache explode.
- with:
- key: v4-hermes-artifacts-${{ inputs.flavor }}-${{ inputs.hermes-version }}-${{ inputs.react-native-version }}-${{ hashFiles('./packages/react-native/sdks/hermes-engine/utils/build-apple-framework.sh') }}
- path: |
- /tmp/hermes/osx-bin/${{ inputs.flavor }}
- /tmp/hermes/dSYM/${{ inputs.flavor }}
- /tmp/hermes/hermes-runtime-darwin/hermes-ios-${{ inputs.flavor }}.tar.gz
diff --git a/.github/actions/build-hermesc-apple/action.yml b/.github/actions/build-hermesc-apple/action.yml
deleted file mode 100644
index c4fefdce9e17..000000000000
--- a/.github/actions/build-hermesc-apple/action.yml
+++ /dev/null
@@ -1,39 +0,0 @@
-name: build-hermesc-apple
-description: This action builds hermesc for Apple platforms
-inputs:
- hermes-version:
- required: true
- description: The version of Hermes
- react-native-version:
- required: true
- description: The version of React Native
-runs:
- using: composite
- steps:
- - name: Setup xcode
- uses: ./.github/actions/setup-xcode
- - name: Restore Hermes workspace
- uses: ./.github/actions/restore-hermes-workspace
- - name: Hermes apple cache
- uses: actions/cache/restore@v4
- with:
- path: ./packages/react-native/sdks/hermes/build_host_hermesc
- key: v2-hermesc-apple-${{ inputs.hermes-version }}-${{ inputs.react-native-version }}
- - name: Build HermesC Apple
- shell: bash
- run: |
- cd ./packages/react-native/sdks/hermes || exit 1
- . ./utils/build-apple-framework.sh
- build_host_hermesc_if_needed
- - name: Upload HermesC Artifact
- uses: actions/upload-artifact@v4.3.4
- with:
- name: hermesc-apple
- path: ./packages/react-native/sdks/hermes/build_host_hermesc
- - name: Cache hermesc apple
- uses: actions/cache/save@v4
- if: ${{ github.ref == 'refs/heads/main' || contains(github.ref, '-stable') }} # To avoid that the cache explode.
- with:
- path: ./packages/react-native/sdks/hermes/build_host_hermesc
- key: v2-hermesc-apple-${{ inputs.hermes-version }}-${{ inputs.react-native-version }}
- enableCrossOsArchive: true
diff --git a/.github/actions/build-hermesc-linux/action.yml b/.github/actions/build-hermesc-linux/action.yml
deleted file mode 100644
index 0c90739d0a72..000000000000
--- a/.github/actions/build-hermesc-linux/action.yml
+++ /dev/null
@@ -1,53 +0,0 @@
-name: build-hermesc-linux
-description: This action builds hermesc for linux platforms
-inputs:
- hermes-version:
- required: True
- description: The version of Hermes
- react-native-version:
- required: True
- description: The version of React Native
-runs:
- using: composite
- steps:
- - name: Install dependencies
- shell: bash
- run: |
- sudo apt update
- sudo apt install -y git openssh-client build-essential \
- libreadline-dev libicu-dev jq zip python3
-
- # Install cmake 3.28.3-1build7
- sudo apt-get install cmake=3.28.3-1build7
- sudo ln -sf /usr/bin/cmake /usr/local/bin/cmake
- - name: Restore Hermes workspace
- uses: ./.github/actions/restore-hermes-workspace
- - name: Linux cache
- uses: actions/cache@v4
- with:
- key: v1-hermes-${{ github.job }}-linux-${{ inputs.hermes-version }}-${{ inputs.react-native-version }}
- path: |
- /tmp/hermes/linux64-bin/
- /tmp/hermes/hermes/destroot/
- - name: Set up workspace
- shell: bash
- run: |
- mkdir -p /tmp/hermes/linux64-bin
- - name: Build HermesC for Linux
- shell: bash
- run: |
- if [ -f /tmp/hermes/linux64-bin/hermesc ]; then
- echo 'Skipping; Clean "/tmp/hermes/linux64-bin" to rebuild.'
- else
- cd /tmp/hermes
- cmake -S hermes -B build -DHERMES_STATIC_LINK=ON -DCMAKE_BUILD_TYPE=Release -DHERMES_ENABLE_TEST_SUITE=OFF \
- -DCMAKE_INTERPROCEDURAL_OPTIMIZATION=True -DCMAKE_CXX_FLAGS=-s -DCMAKE_C_FLAGS=-s \
- -DCMAKE_EXE_LINKER_FLAGS="-Wl,--whole-archive -lpthread -Wl,--no-whole-archive"
- cmake --build build --target hermesc -j 4
- cp /tmp/hermes/build/bin/hermesc /tmp/hermes/linux64-bin/.
- fi
- - name: Upload linux artifacts
- uses: actions/upload-artifact@v4.3.4
- with:
- name: hermes-linux-bin
- path: /tmp/hermes/linux64-bin
diff --git a/.github/actions/build-hermesc-windows/action.yml b/.github/actions/build-hermesc-windows/action.yml
deleted file mode 100644
index 1dcaebb2fb93..000000000000
--- a/.github/actions/build-hermesc-windows/action.yml
+++ /dev/null
@@ -1,86 +0,0 @@
-name: build-hermesc-windows
-description: This action builds hermesc for Windows platforms
-inputs:
- hermes-version:
- required: True
- description: The version of Hermes
- react-native-version:
- required: True
- description: The version of React Native
-runs:
- using: composite
- steps:
- - name: Download Previous Artifacts
- uses: actions/download-artifact@v4
- with:
- name: hermes-workspace
- path: 'C:\tmp\hermes'
- - name: Set up workspace
- shell: powershell
- run: |
- mkdir -p C:\tmp\hermes\osx-bin
- mkdir -p .\packages\react-native\sdks\hermes
- cp -r -Force C:\tmp\hermes\hermes\* .\packages\react-native\sdks\hermes\.
- cp -r -Force .\packages\react-native\sdks\hermes-engine\utils\* .\packages\react-native\sdks\hermes\.
- - name: Windows cache
- uses: actions/cache@v4
- with:
- key: v3-hermes-${{ github.job }}-windows-${{ inputs.hermes-version }}-${{ inputs.react-native-version }}
- path: |
- C:\tmp\hermes\win64-bin\
- C:\tmp\hermes\hermes\icu\
- C:\tmp\hermes\hermes\deps\
- C:\tmp\hermes\hermes\build_release\
- - name: setup-msbuild
- uses: microsoft/setup-msbuild@v1.3.2
- - name: Set up workspace
- shell: powershell
- run: |
- New-Item -ItemType Directory -ErrorAction SilentlyContinue $Env:HERMES_WS_DIR\icu
- New-Item -ItemType Directory -ErrorAction SilentlyContinue $Env:HERMES_WS_DIR\deps
- New-Item -ItemType Directory -ErrorAction SilentlyContinue $Env:HERMES_WS_DIR\win64-bin
- - name: Downgrade CMake
- shell: powershell
- run: choco install cmake --version 3.31.6 --force
- - name: Build HermesC for Windows
- shell: powershell
- run: |
- if (-not(Test-Path -Path $Env:HERMES_WS_DIR\win64-bin\hermesc.exe)) {
- cd $Env:HERMES_WS_DIR\icu
- # If Invoke-WebRequest shows a progress bar, it will fail with
- # Win32 internal error "Access is denied" 0x5 occurred [...]
- $progressPreference = 'silentlyContinue'
- Invoke-WebRequest -Uri "$Env:ICU_URL" -OutFile "icu.zip"
- Expand-Archive -Path "icu.zip" -DestinationPath "."
-
- cd $Env:HERMES_WS_DIR
- Copy-Item -Path "icu\bin64\icu*.dll" -Destination "deps"
- # Include MSVC++ 2015 redistributables
- Copy-Item -Path "c:\windows\system32\msvcp140.dll" -Destination "deps"
- Copy-Item -Path "c:\windows\system32\vcruntime140.dll" -Destination "deps"
- Copy-Item -Path "c:\windows\system32\vcruntime140_1.dll" -Destination "deps"
-
- $Env:PATH += ";$Env:CMAKE_DIR;$Env:MSBUILD_DIR"
- $Env:ICU_ROOT = "$Env:HERMES_WS_DIR\icu"
-
- cmake -S hermes -B build_release -G 'Visual Studio 17 2022' -Ax64 -DCMAKE_BUILD_TYPE=Release -DCMAKE_INTERPROCEDURAL_OPTIMIZATION=True -DHERMES_ENABLE_WIN10_ICU_FALLBACK=OFF
- if (-not $?) { throw "Failed to configure Hermes" }
- echo "Running windows build..."
- cd build_release
- cmake --build . --target hermesc --config Release
- if (-not $?) { throw "Failed to build Hermes" }
-
- echo "Copying hermesc.exe to win64-bin"
- cd $Env:HERMES_WS_DIR
- Copy-Item -Path "build_release\bin\Release\hermesc.exe" -Destination "win64-bin"
- # Include Windows runtime dependencies
- Copy-Item -Path "deps\*" -Destination "win64-bin"
- }
- else {
- Write-Host "Skipping; Clean c:\tmp\hermes\win64-bin to rebuild."
- }
- - name: Upload windows artifacts
- uses: actions/upload-artifact@v4.3.4
- with:
- name: hermes-win64-bin
- path: C:\tmp\hermes\win64-bin\
diff --git a/.github/actions/build-npm-package/action.yml b/.github/actions/build-npm-package/action.yml
index 8b894e906395..6bacb3d29dde 100644
--- a/.github/actions/build-npm-package/action.yml
+++ b/.github/actions/build-npm-package/action.yml
@@ -4,9 +4,6 @@ inputs:
release-type:
required: true
description: The type of release we are building. It could be nightly, release or dry-run
- hermes-ws-dir:
- required: 'true'
- description: The workspace for hermes
gha-npm-token:
required: false
description: The GHA npm token, required only to publish to npm
@@ -20,95 +17,14 @@ runs:
- name: Setup git safe folders
shell: bash
run: git config --global --add safe.directory '*'
- - name: Create /tmp/hermes/osx-bin directory
- shell: bash
- run: mkdir -p /tmp/hermes/osx-bin
- - name: Download osx-bin release artifacts
- uses: actions/download-artifact@v4
- with:
- name: hermes-osx-bin-Release
- path: /tmp/hermes/osx-bin/Release
- - name: Download osx-bin debug artifacts
- uses: actions/download-artifact@v4
- with:
- name: hermes-osx-bin-Debug
- path: /tmp/hermes/osx-bin/Debug
- - name: Download darwin-bin release artifacts
- uses: actions/download-artifact@v4
- with:
- name: hermes-darwin-bin-Release
- path: /tmp/hermes/hermes-runtime-darwin
- - name: Download darwin-bin debug artifacts
- uses: actions/download-artifact@v4
- with:
- name: hermes-darwin-bin-Debug
- path: /tmp/hermes/hermes-runtime-darwin
- - name: Download hermes dSYM debug artifacts
- uses: actions/download-artifact@v4
- with:
- name: hermes-dSYM-Debug
- path: /tmp/hermes/dSYM/Debug
- - name: Download hermes dSYM release vartifacts
- uses: actions/download-artifact@v4
- with:
- name: hermes-dSYM-Release
- path: /tmp/hermes/dSYM/Release
- - name: Download windows-bin artifacts
- uses: actions/download-artifact@v4
- with:
- name: hermes-win64-bin
- path: /tmp/hermes/win64-bin
- - name: Download linux-bin artifacts
- uses: actions/download-artifact@v4
- with:
- name: hermes-linux-bin
- path: /tmp/hermes/linux64-bin
- - name: Show /tmp/hermes directory
- shell: bash
- run: ls -lR /tmp/hermes
- - name: Copy Hermes binaries
- shell: bash
- run: |
- mkdir -p ./packages/react-native/sdks/hermesc ./packages/react-native/sdks/hermesc/osx-bin ./packages/react-native/sdks/hermesc/win64-bin ./packages/react-native/sdks/hermesc/linux64-bin
-
- # When build_hermes_macos runs as a matrix, it outputs
- if [[ -d ${{ inputs.hermes-ws-dir }}/osx-bin/Release ]]; then
- cp -r ${{ inputs.hermes-ws-dir }}/osx-bin/Release/* ./packages/react-native/sdks/hermesc/osx-bin/.
- elif [[ -d ${{ inputs.hermes-ws-dir }}/osx-bin/Debug ]]; then
- cp -r ${{ inputs.hermes-ws-dir }}/osx-bin/Debug/* ./packages/react-native/sdks/hermesc/osx-bin/.
- else
- ls ${{ inputs.hermes-ws-dir }}/osx-bin || echo "hermesc macOS artifacts directory missing."
- echo "Could not locate macOS hermesc binary."; exit 1;
- fi
-
- # Sometimes, GHA creates artifacts with lowercase Debug/Release. Make sure that if it happen, we uppercase them.
- if [[ -f "${{ inputs.hermes-ws-dir }}/hermes-runtime-darwin/hermes-ios-debug.tar.gz" ]]; then
- mv "${{ inputs.hermes-ws-dir }}/hermes-runtime-darwin/hermes-ios-debug.tar.gz" "${{ inputs.hermes-ws-dir }}/hermes-runtime-darwin/hermes-ios-Debug.tar.gz"
- fi
-
- if [[ -f "${{ inputs.hermes-ws-dir }}/hermes-runtime-darwin/hermes-ios-release.tar.gz" ]]; then
- mv "${{ inputs.hermes-ws-dir }}/hermes-runtime-darwin/hermes-ios-release.tar.gz" "${{ inputs.hermes-ws-dir }}/hermes-runtime-darwin/hermes-ios-Release.tar.gz"
- fi
-
- cp -r ${{ inputs.hermes-ws-dir }}/win64-bin/* ./packages/react-native/sdks/hermesc/win64-bin/.
- cp -r ${{ inputs.hermes-ws-dir }}/linux64-bin/* ./packages/react-native/sdks/hermesc/linux64-bin/.
-
- # Make sure the hermesc files are actually executable.
- chmod -R +x packages/react-native/sdks/hermesc/*
-
- mkdir -p ./packages/react-native/ReactAndroid/external-artifacts/artifacts/
- cp ${{ inputs.hermes-ws-dir }}/hermes-runtime-darwin/hermes-ios-Debug.tar.gz ./packages/react-native/ReactAndroid/external-artifacts/artifacts/hermes-ios-debug.tar.gz
- cp ${{ inputs.hermes-ws-dir }}/hermes-runtime-darwin/hermes-ios-Release.tar.gz ./packages/react-native/ReactAndroid/external-artifacts/artifacts/hermes-ios-release.tar.gz
- cp ${{ inputs.hermes-ws-dir }}/dSYM/Debug/hermesvm.framework.dSYM ./packages/react-native/ReactAndroid/external-artifacts/artifacts/hermes-framework-dSYM-debug.tar.gz
- cp ${{ inputs.hermes-ws-dir }}/dSYM/Release/hermesvm.framework.dSYM ./packages/react-native/ReactAndroid/external-artifacts/artifacts/hermes-framework-dSYM-release.tar.gz
- name: Download ReactNativeDependencies
- uses: actions/download-artifact@v4
+ uses: actions/download-artifact@v7
with:
pattern: ReactNativeDependencies*
path: ./packages/react-native/ReactAndroid/external-artifacts/artifacts
merge-multiple: true
- name: Download ReactCore artifacts
- uses: actions/download-artifact@v4
+ uses: actions/download-artifact@v7
with:
pattern: ReactCore*
path: ./packages/react-native/ReactAndroid/external-artifacts/artifacts
@@ -149,7 +65,7 @@ runs:
fi
node ./scripts/releases-ci/publish-npm.js -t ${{ inputs.release-type }}
- name: Upload npm logs
- uses: actions/upload-artifact@v4.3.4
+ uses: actions/upload-artifact@v6
with:
name: npm-logs
path: ~/.npm/_logs
@@ -164,7 +80,7 @@ runs:
echo "$FILENAME" > build/react-native-package-version
- name: Upload release package
- uses: actions/upload-artifact@v4.3.4
+ uses: actions/upload-artifact@v6
if: ${{ inputs.release-type == 'dry-run' }}
with:
name: react-native-package
diff --git a/.github/actions/diff-js-api-breaking-changes/action.yml b/.github/actions/diff-js-api-breaking-changes/action.yml
deleted file mode 100644
index bc45b1b207aa..000000000000
--- a/.github/actions/diff-js-api-breaking-changes/action.yml
+++ /dev/null
@@ -1,23 +0,0 @@
-name: diff-js-api-breaking-changes
-description: Check for breaking changes in the public React Native JS API
-runs:
- using: composite
- steps:
- - name: Fetch snapshot from PR head
- shell: bash
- env:
- SCRATCH_DIR: ${{ runner.temp }}/diff-js-api-breaking-changes
- run: |
- mkdir $SCRATCH_DIR
- git fetch --depth=1 origin ${{ github.event.pull_request.head.sha }}
- git show ${{ github.event.pull_request.head.sha }}:packages/react-native/ReactNativeApi.d.ts > $SCRATCH_DIR/ReactNativeApi-after.d.ts \
- || echo "" > $SCRATCH_DIR/ReactNativeApi.d.ts
- - name: Run breaking change detection
- shell: bash
- env:
- SCRATCH_DIR: ${{ runner.temp }}/diff-js-api-breaking-changes
- run: |
- node ./scripts/js-api/diff-api-snapshot \
- ${{ github.workspace }}/packages/react-native/ReactNativeApi.d.ts \
- $SCRATCH_DIR/ReactNativeApi-after.d.ts \
- > $SCRATCH_DIR/output.json
diff --git a/.github/actions/diff-js-api-changes/action.yml b/.github/actions/diff-js-api-changes/action.yml
new file mode 100644
index 000000000000..9e186d27cc01
--- /dev/null
+++ b/.github/actions/diff-js-api-changes/action.yml
@@ -0,0 +1,31 @@
+name: diff-js-api-changes
+description: Check for breaking changes in the public React Native JS API
+runs:
+ using: composite
+ steps:
+ - name: Compute merge base with main
+ id: merge_base
+ shell: bash
+ run: |
+ git fetch origin main
+ git fetch --deepen=500
+ echo "merge_base=$(git merge-base HEAD origin/main)" >> $GITHUB_OUTPUT
+
+ - name: Output snapshot before state for comparison
+ shell: bash
+ env:
+ SCRATCH_DIR: ${{ runner.temp }}/diff-js-api-changes
+ run: |
+ mkdir -p $SCRATCH_DIR
+ git show ${{ steps.merge_base.outputs.merge_base }}:packages/react-native/ReactNativeApi.d.ts > $SCRATCH_DIR/ReactNativeApi-before.d.ts \
+ || echo "" > $SCRATCH_DIR/ReactNativeApi-before.d.ts
+
+ - name: Run breaking change detection
+ shell: bash
+ env:
+ SCRATCH_DIR: ${{ runner.temp }}/diff-js-api-changes
+ run: |
+ node ./scripts/js-api/diff-api-snapshot \
+ $SCRATCH_DIR/ReactNativeApi-before.d.ts \
+ ./packages/react-native/ReactNativeApi.d.ts \
+ > $SCRATCH_DIR/output.json
diff --git a/.github/actions/maestro-android/action.yml b/.github/actions/maestro-android/action.yml
index 4a24e2c0231e..4aa15709070e 100644
--- a/.github/actions/maestro-android/action.yml
+++ b/.github/actions/maestro-android/action.yml
@@ -22,6 +22,10 @@ inputs:
required: false
default: "."
description: The directory from which metro should be started
+ emulator-arch:
+ required: false
+ default: x86
+ description: The architecture of the emulator to run
runs:
using: composite
@@ -31,7 +35,7 @@ runs:
run: export MAESTRO_VERSION=1.40.0; curl -Ls "https://get.maestro.mobile.dev" | bash
- name: Set up JDK 17
if: ${{ inputs.install-java == 'true' }}
- uses: actions/setup-java@v4
+ uses: actions/setup-java@v5
with:
java-version: '17'
distribution: 'zulu'
@@ -53,7 +57,7 @@ runs:
uses: reactivecircus/android-emulator-runner@v2
with:
api-level: 24
- arch: x86
+ arch: ${{ inputs.emulator-arch }}
ram-size: '8192M'
heap-size: '4096M'
disk-size: '10G'
@@ -69,16 +73,16 @@ runs:
NORM_APP_ID=$(echo "${{ inputs.app-id }}" | tr '.' '-')
echo "app-id=$NORM_APP_ID" >> $GITHUB_OUTPUT
- name: Store tests result
- uses: actions/upload-artifact@v4.3.4
+ uses: actions/upload-artifact@v6
if: always()
with:
- name: e2e_android_${{ steps.normalize-app-id.outputs.app-id }}_report_${{ inputs.flavor }}_NewArch
+ name: e2e_android_${{ steps.normalize-app-id.outputs.app-id }}_report_${{ inputs.flavor }}_${{ inputs.emulator-arch }}_NewArch
path: |
report.xml
screen.mp4
- name: Store Logs
if: steps.run-tests.outcome == 'failure'
- uses: actions/upload-artifact@v4.3.4
+ uses: actions/upload-artifact@v6
with:
- name: maestro-logs-android-${{ steps.normalize-app-id.outputs.app-id }}-${{ inputs.flavor }}-NewArch
+ name: maestro-logs-android-${{ steps.normalize-app-id.outputs.app-id }}-${{ inputs.flavor }}-${{ inputs.emulator-arch }}-NewArch
path: /tmp/MaestroLogs
diff --git a/.github/actions/maestro-ios/action.yml b/.github/actions/maestro-ios/action.yml
index 50b21597c9ed..16fbb84173f1 100644
--- a/.github/actions/maestro-ios/action.yml
+++ b/.github/actions/maestro-ios/action.yml
@@ -30,8 +30,8 @@ runs:
run: |
brew tap facebook/fb
brew install facebook/fb/idb-companion
- - name: Set up JDK 11
- uses: actions/setup-java@v2
+ - name: Set up JDK 17
+ uses: actions/setup-java@v5
with:
java-version: '17'
distribution: 'zulu'
@@ -66,7 +66,7 @@ runs:
"${{ inputs.working-directory }}"
- name: Store video record
if: always()
- uses: actions/upload-artifact@v4.3.4
+ uses: actions/upload-artifact@v6
with:
name: e2e_ios_${{ inputs.app-id }}_report_${{ inputs.flavor }}_NewArch
path: |
@@ -78,7 +78,7 @@ runs:
report.xml
- name: Store Logs
if: failure() && steps.run-tests.outcome == 'failure'
- uses: actions/upload-artifact@v4.3.4
+ uses: actions/upload-artifact@v6
with:
name: maestro-logs-${{ inputs.app-id }}-${{ inputs.flavor }}-NewArch
path: /tmp/MaestroLogs
diff --git a/.github/actions/prepare-hermes-v1-app/action.yml b/.github/actions/prepare-hermes-v1-app/action.yml
new file mode 100644
index 000000000000..24f40d0fbacd
--- /dev/null
+++ b/.github/actions/prepare-hermes-v1-app/action.yml
@@ -0,0 +1,41 @@
+name: prepare-hermes-v1-app
+description: Prepares a React Native app with Hermes V1 enabled
+inputs:
+ retry-count:
+ description: 'Number of times to retry the yarn install on failure'
+runs:
+ using: composite
+ steps:
+ - name: Create new app
+ shell: bash
+ run: |
+ cd /tmp
+ npx @react-native-community/cli init RNApp --skip-install --version nightly
+
+ - name: Select latest Hermes V1 version
+ shell: bash
+ run: |
+ node "$GITHUB_WORKSPACE/.github/workflow-scripts/selectLatestHermesV1Version.js"
+
+ - name: Apply patch to enable Hermes V1
+ shell: bash
+ run: |
+ cd /tmp/RNApp
+ git apply --binary --3way --whitespace=nowarn "$GITHUB_WORKSPACE/.github/workflow-scripts/hermes-v1.patch"
+ echo "✅ Patch applied successfully"
+
+ - name: Install app dependencies with retry
+ uses: nick-fields/retry@v3
+ with:
+ timeout_minutes: 10
+ max_attempts: ${{ inputs.retry-count }}
+ retry_wait_seconds: 15
+ shell: bash
+ command: |
+ cd /tmp/RNApp
+ yarn install
+ on_retry_command: |
+ echo "Cleaning up for yarn retry..."
+ cd /tmp/RNApp
+ rm -rf node_modules yarn.lock || true
+ yarn cache clean || true
diff --git a/.github/actions/prepare-hermes-workspace/action.yml b/.github/actions/prepare-hermes-workspace/action.yml
deleted file mode 100644
index 47953b676007..000000000000
--- a/.github/actions/prepare-hermes-workspace/action.yml
+++ /dev/null
@@ -1,99 +0,0 @@
-name: prepare-hermes-workspace
-description: This action prepares the hermes workspace with the right hermes and react-native versions.
-inputs:
- hermes-ws-dir:
- required: true
- description: The hermes dir we need to use to setup the workspace
- hermes-version-file:
- required: true
- description: the path to the file that will contain the hermes version
-outputs:
- hermes-version:
- description: the version of Hermes tied to this run
- value: ${{ steps.hermes-version.outputs.VERSION }}
- react-native-version:
- description: the version of React Native tied to this run
- value: ${{ steps.react-native-version.outputs.VERSION }}
-runs:
- using: composite
- steps:
- - name: Setup hermes version
- shell: bash
- id: hermes-version
- run: |
- mkdir -p "/tmp/hermes" "/tmp/hermes/download" "/tmp/hermes/hermes"
-
- if [ -f "${{ inputs.hermes-version-file }}" ]; then
- echo "Hermes Version file found! Using this version for the build:"
- echo "VERSION=$(cat ${{ inputs.hermes-version-file }})" >> "$GITHUB_OUTPUT"
- else
- echo "Hermes Version file not found!!!"
- echo "Using the last commit from main for the build:"
- HERMES_TAG_SHA=$(git ls-remote https://github.com/facebook/hermes main | cut -f 1 | tr -d '[:space:]')
- echo "VERSION=$HERMES_TAG_SHA" >> "$GITHUB_OUTPUT"
- fi
- echo "Hermes commit is $HERMES_TAG_SHA"
-
- - name: Get react-native version
- shell: bash
- id: react-native-version
- run: |
- VERSION=$(cat packages/react-native/package.json | jq -r '.version')
- # Save the react native version we are building in an output variable so we can use that file as part of the cache key.
- echo "VERSION=$VERSION" >> "$GITHUB_OUTPUT"
- echo "React Native Version is $VERSION"
-
- - name: Cache hermes workspace
- id: restore-hermes
- uses: actions/cache/restore@v4
- with:
- path: |
- /tmp/hermes/download/
- /tmp/hermes/hermes/
- key: v1-hermes-${{ steps.hermes-version.outputs.version }}
- enableCrossOsArchive: true
-
- # It happened while testing that a cache was created from the right folders
- # but those folders where empty. Thus, the next check ensures that we can work with those caches.
- - name: Check if cache was meaningful
- id: meaningful-cache
- shell: bash
- run: |
- if [[ -d /tmp/hermes/hermes ]] && [[ -n "$(ls -A /tmp/hermes/hermes)" ]]; then
- echo "Found a good hermes cache"
- echo "HERMES_CACHED=true" >> "$GITHUB_OUTPUT"
- fi
-
- - name: Setup node.js
- uses: ./.github/actions/setup-node
- - name: Yarn- Install Dependencies
- if: ${{ steps.meaningful-cache.outputs.HERMES_CACHED != 'true' }}
- uses: ./.github/actions/yarn-install
-
- - name: Download Hermes tarball
- if: ${{ steps.meaningful-cache.outputs.HERMES_CACHED != 'true' }}
- shell: bash
- run: |
- node packages/react-native/scripts/hermes/prepare-hermes-for-build ${{ github.event.pull_request.html_url }}
- cp packages/react-native/sdks/download/* ${{ inputs.hermes-ws-dir }}/download/.
- cp -r packages/react-native/sdks/hermes/* ${{ inputs.hermes-ws-dir }}/hermes/.
-
- echo ${{ steps.hermes-version.outputs.version }}
-
- - name: Upload Hermes artifact
- uses: actions/upload-artifact@v4.3.4
- with:
- name: hermes-workspace
- path: |
- /tmp/hermes/download/
- /tmp/hermes/hermes/
-
- - name: Cache hermes workspace
- uses: actions/cache/save@v4
- if: ${{ github.ref == 'refs/heads/main' }} # To avoid that the cache explode.
- with:
- path: |
- /tmp/hermes/download/
- /tmp/hermes/hermes/
- key: v1-hermes-${{ steps.hermes-version.outputs.version }}
- enableCrossOsArchive: true
diff --git a/.github/actions/restore-hermes-workspace/action.yml b/.github/actions/restore-hermes-workspace/action.yml
deleted file mode 100644
index 0b1cb2594357..000000000000
--- a/.github/actions/restore-hermes-workspace/action.yml
+++ /dev/null
@@ -1,16 +0,0 @@
-name: restore-hermes-workspace
-description: "Restore hermes workspace that has been created in Prepare Hermes Workspace"
-runs:
- using: composite
- steps:
- - name: Download Previous Artifacts
- uses: actions/download-artifact@v4
- with:
- name: hermes-workspace
- path: /tmp/hermes
- - name: Set up workspace
- shell: bash
- run: |
- mkdir -p $HERMES_OSXBIN_ARTIFACTS_DIR ./packages/react-native/sdks/hermes
- cp -r $HERMES_WS_DIR/hermes/* ./packages/react-native/sdks/hermes/.
- cp -r ./packages/react-native/sdks/hermes-engine/utils ./packages/react-native/sdks/hermes/.
diff --git a/.github/actions/run-fantom-tests/action.yml b/.github/actions/run-fantom-tests/action.yml
index 1f143f2367bd..83fdd3a03d3f 100644
--- a/.github/actions/run-fantom-tests/action.yml
+++ b/.github/actions/run-fantom-tests/action.yml
@@ -27,7 +27,7 @@ runs:
cache-read-only: "false"
cache-encryption-key: ${{ inputs.gradle-cache-encryption-key }}
- name: Restore Fantom ccache
- uses: actions/cache/restore@v4
+ uses: actions/cache/restore@v5
with:
path: /github/home/.cache/ccache
key: v2-ccache-fantom-${{ github.job }}-${{ github.ref }}-${{ hashFiles(
@@ -56,7 +56,7 @@ runs:
CXX: clang++
- name: Save Fantom ccache
if: ${{ github.ref == 'refs/heads/main' || contains(github.ref, '-stable') }}
- uses: actions/cache/save@v4
+ uses: actions/cache/save@v5
with:
path: /github/home/.cache/ccache
key: v2-ccache-fantom-${{ github.job }}-${{ github.ref }}-${{ hashFiles(
@@ -75,7 +75,7 @@ runs:
run: ccache -s -v
- name: Upload test results
if: ${{ always() }}
- uses: actions/upload-artifact@v4.3.4
+ uses: actions/upload-artifact@v6
with:
name: run-fantom-tests-results
compression-level: 1
diff --git a/.github/actions/setup-node/action.yml b/.github/actions/setup-node/action.yml
index d076bf4acb8b..7b5aa82470a4 100644
--- a/.github/actions/setup-node/action.yml
+++ b/.github/actions/setup-node/action.yml
@@ -9,7 +9,7 @@ runs:
using: "composite"
steps:
- name: Setup node.js
- uses: actions/setup-node@v4
+ uses: actions/setup-node@v6
with:
node-version: ${{ inputs.node-version }}
cache: yarn
diff --git a/.github/actions/setup-xcode/action.yml b/.github/actions/setup-xcode/action.yml
index c0ae6ceccea7..19e3f3e6f06e 100644
--- a/.github/actions/setup-xcode/action.yml
+++ b/.github/actions/setup-xcode/action.yml
@@ -4,7 +4,7 @@ inputs:
xcode-version:
description: 'The xcode version to use'
required: false
- default: '16.2.0'
+ default: '16.4.0'
runs:
using: "composite"
steps:
diff --git a/.github/actions/test-ios-helloworld/action.yml b/.github/actions/test-ios-helloworld/action.yml
index 0a9a6939bba2..66d4ee84791b 100644
--- a/.github/actions/test-ios-helloworld/action.yml
+++ b/.github/actions/test-ios-helloworld/action.yml
@@ -10,12 +10,6 @@ inputs:
flavor:
description: The flavor of the build. Must be one of "Debug", "Release".
default: Debug
- hermes-version:
- description: The version of hermes
- required: true
- react-native-version:
- description: The version of react-native
- required: true
runs:
using: composite
steps:
@@ -25,23 +19,18 @@ runs:
uses: ./.github/actions/setup-node
- name: Run yarn install
uses: ./.github/actions/yarn-install
- - name: Create Hermes folder
- shell: bash
- run: mkdir -p "$HERMES_WS_DIR"
- - name: Download Hermes
- uses: actions/download-artifact@v4
- with:
- name: hermes-darwin-bin-${{ inputs.flavor }}
- path: /tmp/hermes/hermes-runtime-darwin/
- - name: Print Downloaded hermes
- shell: bash
- run: ls -lR "$HERMES_WS_DIR"
- name: Setup ruby
uses: ruby/setup-ruby@v1
with:
ruby-version: ${{ inputs.ruby-version }}
+ - name: Set nightly Hermes versions
+ shell: bash
+ run: |
+ node ./scripts/releases/use-hermes-nightly.js
+ - name: Run yarn install again, with the correct hermes version
+ uses: ./.github/actions/yarn-install
- name: Download ReactNativeDependencies
- uses: actions/download-artifact@v4
+ uses: actions/download-artifact@v7
with:
name: ReactNativeDependencies${{ inputs.flavor }}.xcframework.tar.gz
path: /tmp/third-party
@@ -49,7 +38,7 @@ runs:
shell: bash
run: ls -lR /tmp/third-party
- name: Download React Native Prebuilds
- uses: actions/download-artifact@v4
+ uses: actions/download-artifact@v7
with:
name: ReactCore${{ inputs.flavor }}.xcframework.tar.gz
path: /tmp/ReactCore
@@ -66,20 +55,6 @@ runs:
args+=(--frameworks dynamic)
fi
- # Tarball is restored with capital flavors suffix, but somehow the tarball name from JS at line 96 returns as lowercased.
- # Let's ensure that the tarballs have the right names
-
- if [[ -f "$HERMES_WS_DIR/hermes-runtime-darwin/hermes-ios-Debug.tar.gz" ]]; then
- mv "$HERMES_WS_DIR/hermes-runtime-darwin/hermes-ios-Debug.tar.gz" "$HERMES_WS_DIR/hermes-runtime-darwin/hermes-ios-debug.tar.gz"
- fi
-
- if [[ -f "$HERMES_WS_DIR/hermes-runtime-darwin/hermes-ios-Release.tar.gz" ]]; then
- mv "$HERMES_WS_DIR/hermes-runtime-darwin/hermes-ios-Release.tar.gz" "$HERMES_WS_DIR/hermes-runtime-darwin/hermes-ios-release.tar.gz"
- fi
-
- BUILD_TYPE="${{ inputs.flavor }}"
- TARBALL_FILENAME=$(node ../../packages/react-native/scripts/hermes/get-tarball-name.js --buildType "$BUILD_TYPE")
- export HERMES_ENGINE_TARBALL_PATH="$HERMES_WS_DIR/hermes-runtime-darwin/$TARBALL_FILENAME"
export RCT_USE_LOCAL_RN_DEP="/tmp/third-party/ReactNativeDependencies${{ inputs.flavor }}.xcframework.tar.gz"
export RCT_TESTONLY_RNCORE_TARBALL_PATH="/tmp/ReactCore/ReactCore${{ inputs.flavor }}.xcframework.tar.gz"
diff --git a/.github/actions/test-ios-rntester/action.yml b/.github/actions/test-ios-rntester/action.yml
index b54e4a36c6e5..3d6d83b3b6e7 100644
--- a/.github/actions/test-ios-rntester/action.yml
+++ b/.github/actions/test-ios-rntester/action.yml
@@ -1,31 +1,23 @@
name: test-ios-rntester
description: Test iOS RNTester
inputs:
- use-frameworks:
- description: The dependency building and linking strategy to use. Must be one of "StaticLibraries", "DynamicFrameworks"
- default: StaticLibraries
ruby-version:
description: The version of ruby that must be used
default: 2.6.10
run-unit-tests:
description: whether unit tests should run or not.
- default: "false"
- hermes-tarball-artifacts-dir:
- description: The directory where the hermes tarball artifacts are stored
- default: /tmp/hermes/hermes-runtime-darwin
+ default: false
flavor:
description: The flavor of the build. Must be one of "Debug", "Release".
default: Debug
- hermes-version:
- description: The version of hermes
- required: true
- react-native-version:
- description: The version of react-native
- required: true
run-e2e-tests:
description: Whether we want to run E2E tests or not
required: false
default: false
+ use-frameworks:
+ description: Whether we have to build with Dynamic Frameworks. If this is set to true, it builds from source
+ required: false
+ default: false
runs:
using: composite
@@ -36,87 +28,54 @@ runs:
uses: ./.github/actions/setup-node
- name: Run yarn
uses: ./.github/actions/yarn-install
- - name: Download Hermes
- uses: actions/download-artifact@v4
- with:
- name: hermes-darwin-bin-${{ inputs.flavor }}
- path: ${{ inputs.hermes-tarball-artifacts-dir }}
- name: Setup ruby
uses: ruby/setup-ruby@v1
with:
ruby-version: ${{ inputs.ruby-version }}
+ - name: Set nightly Hermes versions
+ shell: bash
+ run: |
+ node ./scripts/releases/use-hermes-nightly.js
+ - name: Run yarn install again, with the correct hermes version
+ uses: ./.github/actions/yarn-install
- name: Prepare IOS Tests
if: ${{ inputs.run-unit-tests == 'true' }}
uses: ./.github/actions/prepare-ios-tests
- - name: Set HERMES_ENGINE_TARBALL_PATH envvar if Hermes tarball is present
- shell: bash
- run: |
- HERMES_TARBALL_ARTIFACTS_DIR=${{ inputs.hermes-tarball-artifacts-dir }}
- if [ ! -d $HERMES_TARBALL_ARTIFACTS_DIR ]; then
- echo "Hermes tarball artifacts dir not present ($HERMES_TARBALL_ARTIFACTS_DIR). Build Hermes from source."
- exit 0
- fi
-
- TARBALL_FILENAME=$(node ./packages/react-native/scripts/hermes/get-tarball-name.js --buildType "${{ inputs.flavor }}")
- TARBALL_PATH=$HERMES_TARBALL_ARTIFACTS_DIR/$TARBALL_FILENAME
-
- echo "Looking for $TARBALL_FILENAME in $HERMES_TARBALL_ARTIFACTS_DIR"
- echo "$TARBALL_PATH"
-
- if [ ! -f $TARBALL_PATH ]; then
- echo "Hermes tarball not present ($TARBALL_PATH). Build Hermes from source."
- exit 0
- fi
-
- echo "Found Hermes tarball at $TARBALL_PATH"
- echo "HERMES_ENGINE_TARBALL_PATH=$TARBALL_PATH" >> $GITHUB_ENV
- - name: Print Hermes version
- shell: bash
- run: |
- HERMES_TARBALL_ARTIFACTS_DIR=${{ inputs.hermes-tarball-artifacts-dir }}
- TARBALL_FILENAME=$(node ./packages/react-native/scripts/hermes/get-tarball-name.js --buildType "${{ inputs.flavor }}")
- TARBALL_PATH=$HERMES_TARBALL_ARTIFACTS_DIR/$TARBALL_FILENAME
- if [[ -e $TARBALL_PATH ]]; then
- tar -xf $TARBALL_PATH
- echo 'print(HermesInternal?.getRuntimeProperties?.()["OSS Release Version"])' > test.js
- chmod +x ./destroot/bin/hermes
- ./destroot/bin/hermes test.js
- rm test.js
- rm -rf destroot
- else
- echo 'No Hermes tarball found.'
- fi
- name: Download ReactNativeDependencies
- uses: actions/download-artifact@v4
+ if: ${{ inputs.use-frameworks == 'false' }}
+ uses: actions/download-artifact@v7
with:
name: ReactNativeDependencies${{ inputs.flavor }}.xcframework.tar.gz
path: /tmp/third-party/
- name: Print third-party folder
+ if: ${{ inputs.use-frameworks == 'false' }}
shell: bash
run: ls -lR /tmp/third-party
- name: Download React Native Prebuilds
- uses: actions/download-artifact@v4
+ if: ${{ inputs.use-frameworks == 'false' }}
+ uses: actions/download-artifact@v7
with:
name: ReactCore${{ inputs.flavor }}.xcframework.tar.gz
path: /tmp/ReactCore
- name: Print ReactCore folder
+ if: ${{ inputs.use-frameworks == 'false' }}
shell: bash
run: ls -lR /tmp/ReactCore
- name: Install CocoaPods dependencies
shell: bash
run: |
- export HERMES_ENGINE_TARBALL_PATH=$HERMES_ENGINE_TARBALL_PATH
- export RCT_USE_LOCAL_RN_DEP="/tmp/third-party/ReactNativeDependencies${{ inputs.flavor }}.xcframework.tar.gz"
- export RCT_TESTONLY_RNCORE_TARBALL_PATH="/tmp/ReactCore/ReactCore${{ inputs.flavor }}.xcframework.tar.gz"
-
- if [[ ${{ inputs.use-frameworks }} == "DynamicFrameworks" ]]; then
+ if [[ ${{ inputs.use-frameworks }} == "true" ]]; then
export USE_FRAMEWORKS=dynamic
+ else
+ # If use-frameworks is false, let's use prebuilds
+ export RCT_USE_LOCAL_RN_DEP="/tmp/third-party/ReactNativeDependencies${{ inputs.flavor }}.xcframework.tar.gz"
+ export RCT_TESTONLY_RNCORE_TARBALL_PATH="/tmp/ReactCore/ReactCore${{ inputs.flavor }}.xcframework.tar.gz"
fi
cd packages/rn-tester
bundle install
- bundle exec pod install
+ bundle exec pod update hermes-engine --no-repo-update
- name: Build RNTester
shell: bash
run: |
@@ -143,24 +102,23 @@ runs:
shell: bash
run: |
echo "zipping tests results"
- cd /Users/distiller/Library/Developer/Xcode
- XCRESULT_PATH=$(find . -name '*.xcresult')
- tar -zcvf xcresults.tar.gz $XCRESULT_PATH
+ cd /Users/runner/Library/Developer/Xcode
+ tar -zcvf xcresults.tar.gz "/tmp/RNTesterTestResults"
- name: Upload artifact
- uses: actions/upload-artifact@v4.3.4
+ uses: actions/upload-artifact@v6
if: ${{ inputs.run-unit-tests == 'true' }}
with:
- name: xcresults
- path: /Users/distiller/Library/Developer/Xcode/xcresults.tar.gz
+ name: xcresults-${{ inputs.flavor }}-${{ inputs.use-frameworks == 'true' && 'dynamic-frameworks' || 'static-libraries' }}-Ruby${{ inputs.ruby-version }}
+ path: /Users/runner/Library/Developer/Xcode/xcresults.tar.gz
- name: Upload RNTester App
- if: ${{ inputs.use-frameworks == 'StaticLibraries' && inputs.ruby-version == '2.6.10' }} # This is needed to avoid conflicts with the artifacts
- uses: actions/upload-artifact@v4.3.4
+ if: ${{ inputs.use-frameworks == 'false' && inputs.ruby-version == '2.6.10' }} # This is needed to avoid conflicts with the artifacts
+ uses: actions/upload-artifact@v6
with:
name: RNTesterApp-NewArch-${{ inputs.flavor }}
path: ${{ env.app-path }}
- name: Store test results
if: ${{ inputs.run-unit-tests == 'true' }}
- uses: actions/upload-artifact@v4.3.4
+ uses: actions/upload-artifact@v6
with:
- name: test-results
+ name: test-results-${{ inputs.flavor }}-${{ inputs.use-frameworks == 'true' && 'dynamic-frameworks' || 'static-libraries' }}-Ruby${{ inputs.ruby-version }}
path: ./reports/junit
diff --git a/.github/actions/test-js/action.yml b/.github/actions/test-js/action.yml
index 2528973d6e4a..2b5c97a009a0 100644
--- a/.github/actions/test-js/action.yml
+++ b/.github/actions/test-js/action.yml
@@ -19,7 +19,7 @@ runs:
run: node ./scripts/run-ci-javascript-tests.js --maxWorkers 2
- name: Upload test results
if: ${{ always() }}
- uses: actions/upload-artifact@v4.3.4
+ uses: actions/upload-artifact@v6
with:
name: test-js-results
compression-level: 1
diff --git a/.github/workflow-scripts/__tests__/createDraftRelease-test.js b/.github/workflow-scripts/__tests__/createDraftRelease-test.js
index 77901d4df099..b1b330acd87f 100644
--- a/.github/workflow-scripts/__tests__/createDraftRelease-test.js
+++ b/.github/workflow-scripts/__tests__/createDraftRelease-test.js
@@ -121,7 +121,7 @@ describe('Create Draft Release', () => {
});
describe('#_computeBody', () => {
- it('computes body for release', async () => {
+ it('computes body for release when no hermes versions are passed', async () => {
const version = '0.77.1';
const changelog = `## v${version}
### Breaking Changes
@@ -134,20 +134,83 @@ describe('Create Draft Release', () => {
#### iOS
- [PR #3436](https://github.com/facebook/react-native/pull/3436) - Some other change
- [PR #3437](https://github.com/facebook/react-native/pull/3437) - Some other change`;
- const body = _computeBody(version, changelog);
+ const body = _computeBody(changelog, version);
expect(body).toEqual(`${changelog}
---
Hermes dSYMS:
-- [Debug](https://repo1.maven.org/maven2/com/facebook/react/react-native-artifacts/${version}/react-native-artifacts-${version}-hermes-framework-dSYM-debug.tar.gz)
-- [Release](https://repo1.maven.org/maven2/com/facebook/react/react-native-artifacts/${version}/react-native-artifacts-${version}-hermes-framework-dSYM-release.tar.gz)
+- [Debug](https://repo1.maven.org/maven2/com/facebook/hermes/hermes-ios/${version}/hermes-ios-${version}-hermes-framework-dSYM-debug.tar.gz)
+- [Release](https://repo1.maven.org/maven2/com/facebook/hermes/hermes-ios/${version}/hermes-ios-${version}-hermes-framework-dSYM-release.tar.gz)
+
+Hermes V1 dSYMS:
+- [Debug](https://repo1.maven.org/maven2/com/facebook/hermes/hermes-ios/${version}/hermes-ios-${version}-hermes-framework-dSYM-debug.tar.gz)
+- [Release](https://repo1.maven.org/maven2/com/facebook/hermes/hermes-ios/${version}/hermes-ios-${version}-hermes-framework-dSYM-release.tar.gz)
+
+ReactNativeDependencies dSYMs:
+- [Debug](https://repo1.maven.org/maven2/com/facebook/react/react-native-artifacts/${version}/react-native-artifacts-${version}-reactnative-dependencies-dSYM-debug.tar.gz)
+- [Release](https://repo1.maven.org/maven2/com/facebook/react/react-native-artifacts/${version}/react-native-artifacts-${version}-reactnative-dependencies-dSYM-release.tar.gz)
+
+ReactNative Core dSYMs:
+- [Debug](https://repo1.maven.org/maven2/com/facebook/react/react-native-artifacts/${version}/react-native-artifacts-${version}-reactnative-core-debug.tar.gz)
+- [Release](https://repo1.maven.org/maven2/com/facebook/react/react-native-artifacts/${version}/react-native-artifacts-${version}-reactnative-core-release.tar.gz)
+
+---
+
+You can file issues or pick requests against this release [here](https://github.com/reactwg/react-native-releases/issues/new/choose).
+
+---
+
+To help you upgrade to this version, you can use the [Upgrade Helper](https://react-native-community.github.io/upgrade-helper/) ⚛️.
+
+---
+
+View the whole changelog in the [CHANGELOG.md file](https://github.com/facebook/react-native/blob/main/CHANGELOG.md).`);
+ });
+
+ it('computes body for release when hermes versions are passed', async () => {
+ const version = '0.77.1';
+ const hermesVersion = '0.15.0';
+ const hermesV1Version = '250829098.0.2';
+ const changelog = `## v${version}
+### Breaking Changes
+- [PR #9012](https://github.com/facebook/react-native/pull/9012) - Some other change
+
+#### Android
+- [PR #3456](https://github.com/facebook/react-native/pull/3456) - Some other change
+- [PR #3457](https://github.com/facebook/react-native/pull/3457) - Some other change
+
+#### iOS
+- [PR #3436](https://github.com/facebook/react-native/pull/3436) - Some other change
+- [PR #3437](https://github.com/facebook/react-native/pull/3437) - Some other change`;
+ const body = _computeBody(
+ changelog,
+ version,
+ hermesVersion,
+ hermesV1Version,
+ );
+
+ expect(body).toEqual(`${changelog}
+
+---
+
+Hermes dSYMS:
+- [Debug](https://repo1.maven.org/maven2/com/facebook/hermes/hermes-ios/${hermesVersion}/hermes-ios-${hermesVersion}-hermes-framework-dSYM-debug.tar.gz)
+- [Release](https://repo1.maven.org/maven2/com/facebook/hermes/hermes-ios/${hermesVersion}/hermes-ios-${hermesVersion}-hermes-framework-dSYM-release.tar.gz)
+
+Hermes V1 dSYMS:
+- [Debug](https://repo1.maven.org/maven2/com/facebook/hermes/hermes-ios/${hermesV1Version}/hermes-ios-${hermesV1Version}-hermes-framework-dSYM-debug.tar.gz)
+- [Release](https://repo1.maven.org/maven2/com/facebook/hermes/hermes-ios/${hermesV1Version}/hermes-ios-${hermesV1Version}-hermes-framework-dSYM-release.tar.gz)
ReactNativeDependencies dSYMs:
- [Debug](https://repo1.maven.org/maven2/com/facebook/react/react-native-artifacts/${version}/react-native-artifacts-${version}-reactnative-dependencies-dSYM-debug.tar.gz)
- [Release](https://repo1.maven.org/maven2/com/facebook/react/react-native-artifacts/${version}/react-native-artifacts-${version}-reactnative-dependencies-dSYM-release.tar.gz)
+ReactNative Core dSYMs:
+- [Debug](https://repo1.maven.org/maven2/com/facebook/react/react-native-artifacts/${version}/react-native-artifacts-${version}-reactnative-core-debug.tar.gz)
+- [Release](https://repo1.maven.org/maven2/com/facebook/react/react-native-artifacts/${version}/react-native-artifacts-${version}-reactnative-core-release.tar.gz)
+
---
You can file issues or pick requests against this release [here](https://github.com/reactwg/react-native-releases/issues/new/choose).
@@ -188,6 +251,7 @@ View the whole changelog in the [CHANGELOG.md file](https://github.com/facebook/
status: 201,
json: () =>
Promise.resolve({
+ id: 1,
html_url:
'https://github.com/facebook/react-native/releases/tag/v0.77.1',
}),
@@ -208,9 +272,11 @@ View the whole changelog in the [CHANGELOG.md file](https://github.com/facebook/
body: fetchBody,
},
);
- expect(response).toEqual(
- 'https://github.com/facebook/react-native/releases/tag/v0.77.1',
- );
+ expect(response).toEqual({
+ id: 1,
+ html_url:
+ 'https://github.com/facebook/react-native/releases/tag/v0.77.1',
+ });
});
it('creates a draft release for prerelease on GitHub', async () => {
@@ -238,6 +304,7 @@ View the whole changelog in the [CHANGELOG.md file](https://github.com/facebook/
status: 201,
json: () =>
Promise.resolve({
+ id: 1,
html_url:
'https://github.com/facebook/react-native/releases/tag/v0.77.1',
}),
@@ -258,9 +325,11 @@ View the whole changelog in the [CHANGELOG.md file](https://github.com/facebook/
body: fetchBody,
},
);
- expect(response).toEqual(
- 'https://github.com/facebook/react-native/releases/tag/v0.77.1',
- );
+ expect(response).toEqual({
+ id: 1,
+ html_url:
+ 'https://github.com/facebook/react-native/releases/tag/v0.77.1',
+ });
});
it('throws if the post failes', async () => {
diff --git a/.github/workflow-scripts/analyze_scripts.sh b/.github/workflow-scripts/analyze_scripts.sh
index 5f9bcfadee49..cdf280636b2b 100755
--- a/.github/workflow-scripts/analyze_scripts.sh
+++ b/.github/workflow-scripts/analyze_scripts.sh
@@ -16,6 +16,7 @@ if [ -x "$(command -v shellcheck)" ]; then
-type f \
-not -path "*node_modules*" \
-not -path "*third-party*" \
+ -not -path "*vendor*" \
-name '*.sh' \
-exec sh -c 'shellcheck "$1"' -- {} \;
diff --git a/.github/workflow-scripts/createDraftRelease.js b/.github/workflow-scripts/createDraftRelease.js
index f8737c3cbfda..ca9771b713c9 100644
--- a/.github/workflow-scripts/createDraftRelease.js
+++ b/.github/workflow-scripts/createDraftRelease.js
@@ -40,19 +40,29 @@ function _extractChangelog(version) {
return changelog.slice(changelogStarts, changelogEnds).join('\n').trim();
}
-function _computeBody(version, changelog) {
+function _computeBody(changelog, version, hermesVersion, hermesV1Version) {
+ hermesVersion = hermesVersion ?? version;
+ hermesV1Version = hermesV1Version ?? version;
return `${changelog}
---
Hermes dSYMS:
-- [Debug](https://repo1.maven.org/maven2/com/facebook/react/react-native-artifacts/${version}/react-native-artifacts-${version}-hermes-framework-dSYM-debug.tar.gz)
-- [Release](https://repo1.maven.org/maven2/com/facebook/react/react-native-artifacts/${version}/react-native-artifacts-${version}-hermes-framework-dSYM-release.tar.gz)
+- [Debug](https://repo1.maven.org/maven2/com/facebook/hermes/hermes-ios/${hermesVersion}/hermes-ios-${hermesVersion}-hermes-framework-dSYM-debug.tar.gz)
+- [Release](https://repo1.maven.org/maven2/com/facebook/hermes/hermes-ios/${hermesVersion}/hermes-ios-${hermesVersion}-hermes-framework-dSYM-release.tar.gz)
+
+Hermes V1 dSYMS:
+- [Debug](https://repo1.maven.org/maven2/com/facebook/hermes/hermes-ios/${hermesV1Version}/hermes-ios-${hermesV1Version}-hermes-framework-dSYM-debug.tar.gz)
+- [Release](https://repo1.maven.org/maven2/com/facebook/hermes/hermes-ios/${hermesV1Version}/hermes-ios-${hermesV1Version}-hermes-framework-dSYM-release.tar.gz)
ReactNativeDependencies dSYMs:
- [Debug](https://repo1.maven.org/maven2/com/facebook/react/react-native-artifacts/${version}/react-native-artifacts-${version}-reactnative-dependencies-dSYM-debug.tar.gz)
- [Release](https://repo1.maven.org/maven2/com/facebook/react/react-native-artifacts/${version}/react-native-artifacts-${version}-reactnative-dependencies-dSYM-release.tar.gz)
+ReactNative Core dSYMs:
+- [Debug](https://repo1.maven.org/maven2/com/facebook/react/react-native-artifacts/${version}/react-native-artifacts-${version}-reactnative-core-debug.tar.gz)
+- [Release](https://repo1.maven.org/maven2/com/facebook/react/react-native-artifacts/${version}/react-native-artifacts-${version}-reactnative-core-release.tar.gz)
+
---
You can file issues or pick requests against this release [here](https://github.com/reactwg/react-native-releases/issues/new/choose).
@@ -101,7 +111,11 @@ async function _createDraftReleaseOnGitHub(version, body, latest, token) {
}
const data = await response.json();
- return data.html_url;
+ const {html_url, id} = data;
+ return {
+ html_url,
+ id,
+ };
}
function moveToChangelogBranch(version) {
@@ -109,7 +123,13 @@ function moveToChangelogBranch(version) {
run(`git checkout -b changelog/v${version}`);
}
-async function createDraftRelease(version, latest, token) {
+async function createDraftRelease(
+ version,
+ latest,
+ token,
+ hermesVersion,
+ hermesV1Version,
+) {
if (version.startsWith('v')) {
version = version.substring(1);
}
@@ -117,14 +137,15 @@ async function createDraftRelease(version, latest, token) {
_verifyTagExists(version);
moveToChangelogBranch(version);
const changelog = _extractChangelog(version);
- const body = _computeBody(version, changelog);
+ const body = _computeBody(changelog, version, hermesVersion, hermesV1Version);
const release = await _createDraftReleaseOnGitHub(
version,
body,
latest,
token,
);
- log(`Created draft release: ${release}`);
+ log(`Created draft release: ${release.html_url}, ID ${release.id}`);
+ return release;
}
module.exports = {
diff --git a/.github/workflow-scripts/generateChangelog.js b/.github/workflow-scripts/generateChangelog.js
index fc7a9c1794de..2b01a5f8ccb8 100644
--- a/.github/workflow-scripts/generateChangelog.js
+++ b/.github/workflow-scripts/generateChangelog.js
@@ -45,8 +45,8 @@ function _generateChangelog(previousVersion, version, token) {
run('git checkout main');
run('git fetch');
run('git pull origin main');
- const generateChangelogComand = `npx @rnx-kit/rn-changelog-generator --base v${previousVersion} --compare v${version} --repo . --changelog ./CHANGELOG.md --token ${token}`;
- run(generateChangelogComand);
+ const generateChangelogCommand = `npx @rnx-kit/rn-changelog-generator --base v${previousVersion} --compare v${version} --repo . --changelog ./CHANGELOG.md --token ${token}`;
+ run(generateChangelogCommand);
}
function _pushCommit(version) {
diff --git a/.github/workflow-scripts/hermes-v1.patch b/.github/workflow-scripts/hermes-v1.patch
new file mode 100644
index 000000000000..213020381fc4
--- /dev/null
+++ b/.github/workflow-scripts/hermes-v1.patch
@@ -0,0 +1,30 @@
+diff --git a/android/settings.gradle b/android/settings.gradle
+index 63b5d4e..6359ec3 100644
+--- a/android/settings.gradle
++++ b/android/settings.gradle
+@@ -4,3 +4,11 @@ extensions.configure(com.facebook.react.ReactSettingsExtension){ ex -> ex.autoli
+ rootProject.name = 'RNApp'
+ include ':app'
+ includeBuild('../node_modules/@react-native/gradle-plugin')
++
++includeBuild('../node_modules/react-native') {
++ dependencySubstitution {
++ substitute(module("com.facebook.react:react-android")).using(project(":packages:react-native:ReactAndroid"))
++ substitute(module("com.facebook.react:react-native")).using(project(":packages:react-native:ReactAndroid"))
++ substitute(project(":packages:react-native:ReactAndroid:hermes-engine")).using(module("com.facebook.hermes:hermes-android:$HERMES_V1_VERSION"))
++ }
++}
+diff --git a/package.json b/package.json
+index f05d51b..69938af 100644
+--- a/package.json
++++ b/package.json
+@@ -35,6 +35,9 @@
+ "react-test-renderer": "19.2.0",
+ "typescript": "^5.8.3"
+ },
++ "resolutions": {
++ "hermes-compiler": "$HERMES_V1_VERSION"
++ },
+ "engines": {
+ "node": ">=20"
+ }
diff --git a/.github/workflow-scripts/maestro-ios.js b/.github/workflow-scripts/maestro-ios.js
index ca9b546cd17b..bad5f8a35248 100644
--- a/.github/workflow-scripts/maestro-ios.js
+++ b/.github/workflow-scripts/maestro-ios.js
@@ -162,7 +162,7 @@ async function main() {
console.info(`WORKING_DIRECTORY: ${WORKING_DIRECTORY}`);
console.info('==============================\n');
- const simulatorName = 'iPhone 15 Pro';
+ const simulatorName = 'iPhone 16 Pro';
launchSimulator(simulatorName);
installAppOnSimulator(APP_PATH);
const udid = extractSimulatorUDID();
diff --git a/.github/workflow-scripts/selectLatestHermesV1Version.js b/.github/workflow-scripts/selectLatestHermesV1Version.js
new file mode 100644
index 000000000000..db11b9278c1b
--- /dev/null
+++ b/.github/workflow-scripts/selectLatestHermesV1Version.js
@@ -0,0 +1,38 @@
+/**
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+const { execSync } = require('child_process');
+const fs = require('fs');
+const path = require('path');
+
+const PATCH_FILE_PATH = path.join(__dirname, 'hermes-v1.patch');
+
+function getLatestHermesV1Version() {
+ const npmString = "npm view hermes-compiler@latest-v1 version";
+
+ try {
+ const result = execSync(npmString, { stdio: ['ignore', 'pipe', 'ignore'] }).toString().trim();
+ return result;
+ } catch (error) {
+ throw new Error(`Failed to get package version for hermes-compiler@latest-v1`);
+ }
+}
+
+function setHermesV1VersionInPatch(version) {
+ if (!fs.existsSync(PATCH_FILE_PATH)) {
+ throw new Error(`Patch file not found at path: ${PATCH_FILE_PATH}`);
+ }
+
+ let patchContent = fs.readFileSync(PATCH_FILE_PATH, 'utf8');
+ const updatedContent = patchContent.replaceAll(
+ "$HERMES_V1_VERSION",
+ version
+ );
+ fs.writeFileSync(PATCH_FILE_PATH, updatedContent, 'utf8');
+}
+
+setHermesV1VersionInPatch(getLatestHermesV1Version());
diff --git a/.github/workflows/autorebase.yml b/.github/workflows/autorebase.yml
index 447e7dc5ece5..aee759bf78b0 100644
--- a/.github/workflows/autorebase.yml
+++ b/.github/workflows/autorebase.yml
@@ -17,7 +17,7 @@ jobs:
if: github.event.issue.pull_request != '' && contains(github.event.comment.body, '/rebase')
steps:
- name: Checkout the latest code
- uses: actions/checkout@v4
+ uses: actions/checkout@v6
with:
token: ${{ secrets.GITHUB_TOKEN }}
fetch-depth: 0 # otherwise, you will fail to push refs to dest repo
diff --git a/.github/workflows/bump-podfile-lock.yml b/.github/workflows/bump-podfile-lock.yml
index 80b726edfd53..81468f3cca7f 100644
--- a/.github/workflows/bump-podfile-lock.yml
+++ b/.github/workflows/bump-podfile-lock.yml
@@ -8,8 +8,9 @@ jobs:
runs-on: macos-latest
steps:
- name: Checkout
- uses: actions/checkout@v4
+ uses: actions/checkout@v6
with:
+ token: ${{ secrets.REACT_NATIVE_BOT_GITHUB_TOKEN }}
fetch-depth: 0
fetch-tags: true
- name: Install dependencies
@@ -20,8 +21,6 @@ jobs:
git config --local user.name "React Native Bot"
- name: Setup xcode
uses: ./.github/actions/setup-xcode
- with:
- xcode-version: '16.2.0'
- name: Extract branch name
run: |
TAG="${{ github.ref_name }}";
diff --git a/.github/workflows/cache-reaper.yml b/.github/workflows/cache-reaper.yml
index 91ebb083e024..59feda574c19 100644
--- a/.github/workflows/cache-reaper.yml
+++ b/.github/workflows/cache-reaper.yml
@@ -13,7 +13,7 @@ jobs:
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
steps:
- - uses: actions/checkout@v4
+ - uses: actions/checkout@v6
- name: Setup Node.js
uses: ./.github/actions/setup-node
- name: Trim the cache
diff --git a/.github/workflows/check-for-reproducer.yml b/.github/workflows/check-for-reproducer.yml
index 5d124c32787a..e986259a3a23 100644
--- a/.github/workflows/check-for-reproducer.yml
+++ b/.github/workflows/check-for-reproducer.yml
@@ -10,8 +10,8 @@ jobs:
if: |
github.repository == 'facebook/react-native' && github.event.issue.pull_request == null && github.event.issue.state == 'open' && !contains(github.event.issue.labels.*.name, ':open_umbrella: Umbrella')
steps:
- - uses: actions/checkout@v4
- - uses: actions/github-script@v6
+ - uses: actions/checkout@v6
+ - uses: actions/github-script@v8
with:
github-token: ${{ secrets.REACT_NATIVE_BOT_GITHUB_TOKEN }}
script: |
diff --git a/.github/workflows/close-pr.yml b/.github/workflows/close-pr.yml
index 2b3d773fa993..5d0489f170b7 100644
--- a/.github/workflows/close-pr.yml
+++ b/.github/workflows/close-pr.yml
@@ -11,7 +11,7 @@ jobs:
runs-on: ubuntu-latest
if: github.repository == 'facebook/react-native'
steps:
- - uses: actions/github-script@v6
+ - uses: actions/github-script@v8
with:
github-token: ${{ secrets.REACT_NATIVE_BOT_GITHUB_TOKEN }}
script: |
diff --git a/.github/workflows/create-draft-release.yml b/.github/workflows/create-draft-release.yml
index d3b89dba90d8..ca947dc267c1 100644
--- a/.github/workflows/create-draft-release.yml
+++ b/.github/workflows/create-draft-release.yml
@@ -2,14 +2,24 @@ name: Create Draft Release
on:
workflow_call:
+ inputs:
+ hermesVersion:
+ required: false
+ type: string
+ description: The version of Hermes to use for this release (eg. 0.15.0). If not specified, it will use React Native Version
+ hermesV1Version:
+ required: false
+ type: string
+ description: The version of Hermes V1 to use for this release (eg. 250829098.0.2). If not specified, it will use React Native Version
jobs:
create-draft-release:
runs-on: ubuntu-latest
steps:
- name: Checkout repository
- uses: actions/checkout@v4
+ uses: actions/checkout@v6
with:
+ token: ${{ secrets.REACT_NATIVE_BOT_GITHUB_TOKEN }}
fetch-depth: 0
fetch-tags: true
- name: Install dependencies
@@ -20,10 +30,25 @@ jobs:
git config --local user.email "bot@reactnative.dev"
git config --local user.name "React Native Bot"
- name: Create draft release
- uses: actions/github-script@v6
+ uses: actions/github-script@v8
+ id: create-draft-release
with:
script: |
const {createDraftRelease} = require('./.github/workflow-scripts/createDraftRelease.js');
const version = '${{ github.ref_name }}';
const {isLatest} = require('./.github/workflow-scripts/publishTemplate.js');
- await createDraftRelease(version, isLatest(), '${{secrets.REACT_NATIVE_BOT_GITHUB_TOKEN}}');
+ return (await createDraftRelease(version, isLatest(), '${{secrets.REACT_NATIVE_BOT_GITHUB_TOKEN}}', '${{ inputs.hermesVersion }}', '${{ inputs.hermesV1Version }}')).id;
+ result-encoding: string
+ - name: Upload release assets for DotSlash
+ uses: actions/github-script@v8
+ env:
+ RELEASE_ID: ${{ steps.create-draft-release.outputs.result }}
+ with:
+ script: |
+ const {uploadReleaseAssetsForDotSlashFiles} = require('./scripts/releases/upload-release-assets-for-dotslash.js');
+ const version = '${{ github.ref_name }}';
+ await uploadReleaseAssetsForDotSlashFiles({
+ version,
+ token: '${{secrets.REACT_NATIVE_BOT_GITHUB_TOKEN}}',
+ releaseId: process.env.RELEASE_ID,
+ });
diff --git a/.github/workflows/create-release.yml b/.github/workflows/create-release.yml
index ae5800f81ee2..464e9eb3f86c 100644
--- a/.github/workflows/create-release.yml
+++ b/.github/workflows/create-release.yml
@@ -19,10 +19,11 @@ on:
jobs:
create_release:
+ if: github.repository == 'facebook/react-native'
runs-on: ubuntu-latest
steps:
- name: Checkout
- uses: actions/checkout@v4
+ uses: actions/checkout@v6
with:
token: ${{ secrets.REACT_NATIVE_BOT_GITHUB_TOKEN }}
fetch-depth: 0
diff --git a/.github/workflows/danger-pr.yml b/.github/workflows/danger-pr.yml
index cf28b788105a..ce41f6f602cd 100644
--- a/.github/workflows/danger-pr.yml
+++ b/.github/workflows/danger-pr.yml
@@ -17,13 +17,14 @@ jobs:
runs-on: ubuntu-latest
if: github.repository == 'facebook/react-native'
steps:
- - uses: actions/checkout@v4
+ - name: Check out PR branch
+ uses: actions/checkout@v6
- name: Setup Node.js
uses: ./.github/actions/setup-node
- name: Run yarn install
uses: ./.github/actions/yarn-install
- - name: Run diff-js-api-breaking-changes
- uses: ./.github/actions/diff-js-api-breaking-changes
+ - name: Run diff-js-api-changes
+ uses: ./.github/actions/diff-js-api-changes
- name: Danger
run: yarn danger ci --use-github-checks --failOnErrors
working-directory: private/react-native-bots
diff --git a/.github/workflows/generate-changelog.yml b/.github/workflows/generate-changelog.yml
index 9734ebd64173..ff8ee8d76def 100644
--- a/.github/workflows/generate-changelog.yml
+++ b/.github/workflows/generate-changelog.yml
@@ -8,8 +8,9 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Checkout repository
- uses: actions/checkout@v4
+ uses: actions/checkout@v6
with:
+ token: ${{ secrets.REACT_NATIVE_BOT_GITHUB_TOKEN }}
fetch-depth: 0
fetch-tags: true
- name: Install dependencies
@@ -20,7 +21,7 @@ jobs:
git config --local user.email "bot@reactnative.dev"
git config --local user.name "React Native Bot"
- name: Generate Changelog
- uses: actions/github-script@v6
+ uses: actions/github-script@v8
with:
script: |
const {generateChangelog} = require('./.github/workflow-scripts/generateChangelog');
diff --git a/.github/workflows/monitor-new-issues.yml b/.github/workflows/monitor-new-issues.yml
index 4c751b097965..36abe0bb4cfa 100644
--- a/.github/workflows/monitor-new-issues.yml
+++ b/.github/workflows/monitor-new-issues.yml
@@ -15,7 +15,7 @@ jobs:
if: github.repository == 'facebook/react-native'
steps:
- name: Checkout
- uses: actions/checkout@v4
+ uses: actions/checkout@v6
- name: Set up Node.js
uses: ./.github/actions/setup-node
- name: Install dependencies
diff --git a/.github/workflows/needs-attention.yml b/.github/workflows/needs-attention.yml
index 4d7a0cf8f02f..485bbef9bf5d 100644
--- a/.github/workflows/needs-attention.yml
+++ b/.github/workflows/needs-attention.yml
@@ -16,7 +16,7 @@ jobs:
runs-on: ubuntu-latest
if: github.repository == 'facebook/react-native'
steps:
- - uses: actions/checkout@v4
+ - uses: actions/checkout@v6
- name: Apply Needs Attention Label
uses: react-native-community/needs-attention@v2.0.0
with:
diff --git a/.github/workflows/nightly.yml b/.github/workflows/nightly.yml
index 24177338f955..420439705e14 100644
--- a/.github/workflows/nightly.yml
+++ b/.github/workflows/nightly.yml
@@ -21,130 +21,22 @@ jobs:
echo "Setting release type to nightly"
echo "RELEASE_TYPE=nightly" >> $GITHUB_OUTPUT
- prepare_hermes_workspace:
- runs-on: ubuntu-latest
- env:
- HERMES_WS_DIR: /tmp/hermes
- HERMES_VERSION_FILE: packages/react-native/sdks/.hermesversion
- outputs:
- react-native-version: ${{ steps.prepare-hermes-workspace.outputs.react-native-version }}
- hermes-version: ${{ steps.prepare-hermes-workspace.outputs.hermes-version }}
- steps:
- - name: Checkout
- uses: actions/checkout@v4
- - name: Prepare Hermes Workspace
- id: prepare-hermes-workspace
- uses: ./.github/actions/prepare-hermes-workspace
- with:
- hermes-ws-dir: ${{ env.HERMES_WS_DIR }}
- hermes-version-file: ${{ env.HERMES_VERSION_FILE }}
-
- build_hermesc_apple:
- runs-on: macos-14
- needs: prepare_hermes_workspace
- env:
- HERMES_WS_DIR: /tmp/hermes
- steps:
- - name: Checkout
- uses: actions/checkout@v4
- - name: Build HermesC Apple
- uses: ./.github/actions/build-hermesc-apple
- with:
- hermes-version: ${{ needs.prepare_hermes_workspace.output.hermes-version }}
- react-native-version: ${{ needs.prepare_hermes_workspace.output.react-native-version }}
-
- build_apple_slices_hermes:
- runs-on: macos-14
- needs: [build_hermesc_apple, prepare_hermes_workspace]
- env:
- HERMES_WS_DIR: /tmp/hermes
- HERMES_TARBALL_ARTIFACTS_DIR: /tmp/hermes/hermes-runtime-darwin
- HERMES_OSXBIN_ARTIFACTS_DIR: /tmp/hermes/osx-bin
- IOS_DEPLOYMENT_TARGET: "15.1"
- XROS_DEPLOYMENT_TARGET: "1.0"
- MAC_DEPLOYMENT_TARGET: "10.15"
- strategy:
- fail-fast: false
- matrix:
- flavor: [Debug, Release]
- slice: [macosx, iphoneos, iphonesimulator, appletvos, appletvsimulator, catalyst, xros, xrsimulator]
- steps:
- - name: Checkout
- uses: actions/checkout@v4
- - name: Build Slice
- uses: ./.github/actions/build-apple-slices-hermes
- with:
- flavor: ${{ matrix.flavor }}
- slice: ${{ matrix.slice}}
- hermes-version: ${{ needs.prepare_hermes_workspace.outputs.hermes-version }}
- react-native-version: ${{ needs.prepare_hermes_workspace.outputs.react-native-version }}
-
- build_hermes_macos:
- runs-on: macos-14
- needs: [build_apple_slices_hermes, prepare_hermes_workspace]
- env:
- HERMES_WS_DIR: /tmp/hermes
- HERMES_TARBALL_ARTIFACTS_DIR: /tmp/hermes/hermes-runtime-darwin
- continue-on-error: true
- strategy:
- fail-fast: false
- matrix:
- flavor: [Debug, Release]
- steps:
- - name: Checkout
- uses: actions/checkout@v4
- - name: Build Hermes MacOS
- uses: ./.github/actions/build-hermes-macos
- with:
- hermes-version: ${{ needs.prepare_hermes_workspace.outputs.hermes-version }}
- react-native-version: ${{ needs.prepare_hermes_workspace.outputs.react-native-version }}
- flavor: ${{ matrix.flavor }}
-
prebuild_apple_dependencies:
+ if: github.repository == 'facebook/react-native'
uses: ./.github/workflows/prebuild-ios-dependencies.yml
secrets: inherit
prebuild_react_native_core:
uses: ./.github/workflows/prebuild-ios-core.yml
+ with:
+ use-hermes-nightly: true
+ version-type: nightly
secrets: inherit
- needs: [prebuild_apple_dependencies, build_hermes_macos]
-
- build_hermesc_linux:
- runs-on: ubuntu-latest
- needs: prepare_hermes_workspace
- env:
- HERMES_WS_DIR: /tmp/hermes
- HERMES_TARBALL_ARTIFACTS_DIR: /tmp/hermes/hermes-runtime-darwin
- steps:
- - name: Checkout
- uses: actions/checkout@v4
- - name: Build HermesC Linux
- uses: ./.github/actions/build-hermesc-linux
- with:
- hermes-version: ${{ needs.prepare_hermes_workspace.outputs.hermes-version }}
- react-native-version: ${{ needs.prepare_hermes_workspace.outputs.react-native-version }}
-
- build_hermesc_windows:
- runs-on: windows-2025
- needs: prepare_hermes_workspace
- env:
- HERMES_WS_DIR: 'C:\tmp\hermes'
- HERMES_TARBALL_ARTIFACTS_DIR: 'C:\tmp\hermes\hermes-runtime-darwin'
- HERMES_OSXBIN_ARTIFACTS_DIR: 'C:\tmp\hermes\osx-bin'
- ICU_URL: "https://github.com/unicode-org/icu/releases/download/release-64-2/icu4c-64_2-Win64-MSVC2017.zip"
- MSBUILD_DIR: 'C:\Program Files (x86)\Microsoft Visual Studio\2019\BuildTools\MSBuild\Current\Bin'
- CMAKE_DIR: 'C:\Program Files\CMake\bin'
- steps:
- - name: Checkout
- uses: actions/checkout@v4
- - name: Build HermesC Windows
- uses: ./.github/actions/build-hermesc-windows
- with:
- hermes-version: ${{ needs.prepare_hermes_workspace.outputs.hermes-version }}
- react-native-version: ${{ needs.prepare_hermes_workspace.outputs.react-native-version }}
+ needs: [prebuild_apple_dependencies]
build_android:
runs-on: 8-core-ubuntu
+ if: github.repository == 'facebook/react-native'
needs: [set_release_type]
container:
image: reactnativecommunity/react-native-android:latest
@@ -157,7 +49,7 @@ jobs:
ORG_GRADLE_PROJECT_SONATYPE_PASSWORD: ${{ secrets.ORG_GRADLE_PROJECT_SONATYPE_PASSWORD }}
steps:
- name: Checkout
- uses: actions/checkout@v4
+ uses: actions/checkout@v6
- name: Build Android
uses: ./.github/actions/build-android
with:
@@ -169,10 +61,6 @@ jobs:
needs:
[
set_release_type,
- prepare_hermes_workspace,
- build_hermes_macos,
- build_hermesc_linux,
- build_hermesc_windows,
build_android,
prebuild_apple_dependencies,
prebuild_react_native_core,
@@ -185,7 +73,6 @@ jobs:
# By default we only build ARM64 to save time/resources. For release/nightlies, we override this value to build all archs.
ORG_GRADLE_PROJECT_reactNativeArchitectures: "arm64-v8a"
env:
- HERMES_WS_DIR: /tmp/hermes
GHA_NPM_TOKEN: ${{ secrets.GHA_NPM_TOKEN }}
ORG_GRADLE_PROJECT_SIGNING_PWD: ${{ secrets.ORG_GRADLE_PROJECT_SIGNING_PWD }}
ORG_GRADLE_PROJECT_SIGNING_KEY: ${{ secrets.ORG_GRADLE_PROJECT_SIGNING_KEY }}
@@ -193,11 +80,10 @@ jobs:
ORG_GRADLE_PROJECT_SONATYPE_PASSWORD: ${{ secrets.ORG_GRADLE_PROJECT_SONATYPE_PASSWORD }}
steps:
- name: Checkout
- uses: actions/checkout@v4
+ uses: actions/checkout@v6
- name: Build and Publish NPM Package
uses: ./.github/actions/build-npm-package
with:
- hermes-ws-dir: ${{ env.HERMES_WS_DIR }}
release-type: ${{ needs.set_release_type.outputs.RELEASE_TYPE }}
gha-npm-token: ${{ env.GHA_NPM_TOKEN }}
gradle-cache-encryption-key: ${{ secrets.GRADLE_CACHE_ENCRYPTION_KEY }}
diff --git a/.github/workflows/on-issue-labeled.yml b/.github/workflows/on-issue-labeled.yml
index a58009873312..7500d9ce3d3b 100644
--- a/.github/workflows/on-issue-labeled.yml
+++ b/.github/workflows/on-issue-labeled.yml
@@ -16,10 +16,10 @@ jobs:
if: "${{ github.repository == 'facebook/react-native' && contains(github.event.label.name, 'Needs: Triage :mag:') }}"
steps:
- name: Checkout code
- uses: actions/checkout@v4
+ uses: actions/checkout@v6
- name: Verify RN version
- uses: actions/github-script@v6
+ uses: actions/github-script@v8
with:
github-token: ${{ secrets.REACT_NATIVE_BOT_GITHUB_TOKEN }}
script: |
@@ -39,7 +39,7 @@ jobs:
}
- name: Add descriptive label
- uses: actions/github-script@v6
+ uses: actions/github-script@v8
with:
github-token: ${{ secrets.REACT_NATIVE_BOT_GITHUB_TOKEN }}
script: |
@@ -51,8 +51,8 @@ jobs:
runs-on: ubuntu-latest
if: github.repository == 'facebook/react-native'
steps:
- - uses: actions/checkout@v4
- - uses: actions/github-script@v6
+ - uses: actions/checkout@v6
+ - uses: actions/github-script@v8
with:
github-token: ${{ secrets.REACT_NATIVE_BOT_GITHUB_TOKEN }}
script: |
diff --git a/.github/workflows/prebuild-ios-core.yml b/.github/workflows/prebuild-ios-core.yml
index b2d05c5e88fe..ce2f6b88c30b 100644
--- a/.github/workflows/prebuild-ios-core.yml
+++ b/.github/workflows/prebuild-ios-core.yml
@@ -1,12 +1,22 @@
-name: Prebuild iOS Dependencies
+name: Prebuild iOS Core
on:
workflow_call: # this directive allow us to call this workflow from other workflows
-
+ inputs:
+ version-type:
+ description: 'The version type to set for the prebuild (nightly or release)'
+ type: string
+ required: false
+ default: ''
+ use-hermes-nightly:
+ description: 'Whether to use the hermes nightly build or read the version from the versions.properties file'
+ type: boolean
+ required: false
+ default: false
jobs:
build-rn-slice:
- runs-on: macos-14
+ runs-on: macos-15
strategy:
fail-fast: false
matrix:
@@ -18,10 +28,10 @@ jobs:
]
steps:
- name: Checkout
- uses: actions/checkout@v4
+ uses: actions/checkout@v6
- name: Restore cache if present
id: restore-ios-slice
- uses: actions/cache/restore@v4
+ uses: actions/cache/restore@v5
with:
key: v3-ios-core-${{ matrix.slice }}-${{ matrix.flavor }}-${{ hashFiles('packages/react-native/Package.swift', 'packages/react-native/scripts/ios-prebuild/*.js', 'packages/react-native/scripts/ios-prebuild.js', 'packages/react-native/React/**/*', 'packages/react-native/ReactCommon/**/*', 'packages/react-native/Libraries/**/*') }}
path: packages/react-native/
@@ -31,42 +41,29 @@ jobs:
- name: Setup xcode
if: steps.restore-ios-slice.outputs.cache-hit != 'true'
uses: ./.github/actions/setup-xcode
- with:
- xcode-version: '16.2.0'
- name: Yarn Install
if: steps.restore-ios-slice.outputs.cache-hit != 'true'
uses: ./.github/actions/yarn-install
- - name: Download Hermes
- if: steps.restore-ios-slice.outputs.cache-hit != 'true'
- uses: actions/download-artifact@v4
- with:
- name: hermes-darwin-bin-${{ matrix.flavor }}
- path: /tmp/hermes/hermes-runtime-darwin
- - name: Extract Hermes
- if: steps.restore-ios-slice.outputs.cache-hit != 'true'
+ - name: Set Hermes version
shell: bash
run: |
- HERMES_TARBALL_ARTIFACTS_DIR=/tmp/hermes/hermes-runtime-darwin
- if [ ! -d $HERMES_TARBALL_ARTIFACTS_DIR ]; then
- echo "Hermes tarball artifacts dir not present ($HERMES_TARBALL_ARTIFACTS_DIR)."
- exit 0
+ if [ "${{ inputs.use-hermes-nightly }}" == "true" ]; then
+ # We are not publishing nightly versions of Hermes V1 yet.
+ # For now, we can use the latest version of Hermes V1 published on maven and npm.
+ HERMES_VERSION="latest-v1"
+ else
+ HERMES_VERSION=$(sed -n 's/^HERMES_V1_VERSION_NAME=//p' packages/react-native/sdks/hermes-engine/version.properties)
fi
-
- TARBALL_FILENAME=$(node ./packages/react-native/scripts/hermes/get-tarball-name.js --buildType "${{ matrix.flavor }}")
- TARBALL_PATH=$HERMES_TARBALL_ARTIFACTS_DIR/$TARBALL_FILENAME
-
- echo "Looking for $TARBALL_FILENAME in $HERMES_TARBALL_ARTIFACTS_DIR"
- echo "$TARBALL_PATH"
-
- if [ ! -f $TARBALL_PATH ]; then
- echo "Hermes tarball not present ($TARBALL_PATH). Build Hermes from source."
- exit 0
+ echo "Using Hermes version: $HERMES_VERSION"
+ echo "HERMES_VERSION=$HERMES_VERSION" >> $GITHUB_ENV
+ - name: Set React Native version
+ shell: bash
+ run: |
+ if [ "${{ inputs.version-type }}" != "" ]; then
+ node ./scripts/releases/set-rn-artifacts-version.js --build-type "${{ inputs.version-type }}"
fi
-
- echo "Found Hermes tarball at $TARBALL_PATH"
- echo "HERMES_ENGINE_TARBALL_PATH=$TARBALL_PATH" >> $GITHUB_ENV
- name: Download ReactNativeDependencies
- uses: actions/download-artifact@v4
+ uses: actions/download-artifact@v7
with:
name: ReactNativeDependencies${{ matrix.flavor }}.xcframework.tar.gz
path: /tmp/third-party/
@@ -102,19 +99,19 @@ jobs:
cd packages/react-native
node scripts/ios-prebuild -b -f "${{ matrix.flavor }}" -p "${{ matrix.slice }}"
- name: Upload headers
- uses: actions/upload-artifact@v4
+ uses: actions/upload-artifact@v6
with:
name: prebuild-ios-core-headers-${{ matrix.flavor }}-${{ matrix.slice }}
path:
packages/react-native/.build/headers
- name: Upload artifacts
- uses: actions/upload-artifact@v4.3.4
+ uses: actions/upload-artifact@v6
with:
name: prebuild-ios-core-slice-${{ matrix.flavor }}-${{ matrix.slice }}
path: |
packages/react-native/.build/output/spm/${{ matrix.flavor }}/Build/Products
- name: Save Cache
- uses: actions/cache/save@v4
+ uses: actions/cache/save@v5
if: ${{ github.ref == 'refs/heads/main' }} # To avoid that the cache explode
with:
key: v3-ios-core-${{ matrix.slice }}-${{ matrix.flavor }}-${{ hashFiles('packages/react-native/Package.swift', 'packages/react-native/scripts/ios-prebuild/*.js', 'packages/react-native/scripts/ios-prebuild.js', 'packages/react-native/React/**/*', 'packages/react-native/ReactCommon/**/*', 'packages/react-native/Libraries/**/*') }}
@@ -123,7 +120,7 @@ jobs:
packages/react-native/.build/headers
compose-xcframework:
- runs-on: macos-14
+ runs-on: macos-15
needs: [build-rn-slice]
strategy:
fail-fast: false
@@ -134,10 +131,10 @@ jobs:
REACT_ORG_CODE_SIGNING_P12_CERT_PWD: ${{ secrets.REACT_ORG_CODE_SIGNING_P12_CERT_PWD }}
steps:
- name: Checkout
- uses: actions/checkout@v4
+ uses: actions/checkout@v6
- name: Restore cache if present
id: restore-ios-xcframework
- uses: actions/cache/restore@v4
+ uses: actions/cache/restore@v5
with:
path: packages/react-native/.build/output/xcframeworks
key: v2-ios-core-xcframework-${{ matrix.flavor }}-${{ hashFiles('packages/react-native/Package.swift', 'packages/react-native/scripts/ios-prebuild/*.js', 'packages/react-native/scripts/ios-prebuild.js', 'packages/react-native/React/**/*', 'packages/react-native/ReactCommon/**/*', 'packages/react-native/Libraries/**/*') }}
@@ -147,21 +144,19 @@ jobs:
- name: Setup xcode
if: steps.restore-ios-xcframework.outputs.cache-hit != 'true'
uses: ./.github/actions/setup-xcode
- with:
- xcode-version: '16.2.0'
- name: Yarn Install
if: steps.restore-ios-xcframework.outputs.cache-hit != 'true'
uses: ./.github/actions/yarn-install
- name: Download slice artifacts
if: steps.restore-ios-xcframework.outputs.cache-hit != 'true'
- uses: actions/download-artifact@v4
+ uses: actions/download-artifact@v7
with:
pattern: prebuild-ios-core-slice-${{ matrix.flavor }}-*
path: packages/react-native/.build/output/spm/${{ matrix.flavor }}/Build/Products
merge-multiple: true
- name: Download headers
if: steps.restore-ios-xcframework.outputs.cache-hit != 'true'
- uses: actions/download-artifact@v4
+ uses: actions/download-artifact@v7
with:
pattern: prebuild-ios-core-headers-${{ matrix.flavor }}-*
path: packages/react-native/.build/headers
@@ -193,18 +188,18 @@ jobs:
cd packages/react-native/.build/output/xcframeworks/${{matrix.flavor}}/Symbols
tar -cz -f ../../ReactCore${{ matrix.flavor }}.framework.dSYM.tar.gz .
- name: Upload XCFramework Artifact
- uses: actions/upload-artifact@v4
+ uses: actions/upload-artifact@v6
with:
name: ReactCore${{ matrix.flavor }}.xcframework.tar.gz
path: packages/react-native/.build/output/xcframeworks/ReactCore${{matrix.flavor}}.xcframework.tar.gz
- name: Upload dSYM Artifact
- uses: actions/upload-artifact@v4
+ uses: actions/upload-artifact@v6
with:
name: ReactCore${{ matrix.flavor }}.framework.dSYM.tar.gz
path: packages/react-native/.build/output/xcframeworks/ReactCore${{matrix.flavor}}.framework.dSYM.tar.gz
- name: Save cache if present
if: ${{ github.ref == 'refs/heads/main' }} # To avoid that the cache explode
- uses: actions/cache/save@v4
+ uses: actions/cache/save@v5
with:
path: |
packages/react-native/.build/output/xcframeworks/ReactCore${{matrix.flavor}}.xcframework.tar.gz
diff --git a/.github/workflows/prebuild-ios-dependencies.yml b/.github/workflows/prebuild-ios-dependencies.yml
index 70ca3fe2a5c7..73cf9870c66c 100644
--- a/.github/workflows/prebuild-ios-dependencies.yml
+++ b/.github/workflows/prebuild-ios-dependencies.yml
@@ -7,18 +7,18 @@ on:
jobs:
prepare_workspace:
name: Prepare workspace
- runs-on: macos-14
+ runs-on: macos-15
steps:
- name: Checkout
- uses: actions/checkout@v4
+ uses: actions/checkout@v6
- name: Setup node.js
uses: ./.github/actions/setup-node
- name: Restore cache if present
id: restore-ios-prebuilds
- uses: actions/cache/restore@v4
+ uses: actions/cache/restore@v5
with:
path: packages/react-native/third-party/
- key: v2-ios-dependencies-${{ hashfiles('scripts/releases/ios-prebuild/configuration.js') }}
+ key: v3-ios-dependencies-${{ hashfiles('scripts/releases/ios-prebuild/configuration.js') }}
enableCrossOsArchive: true
- name: Yarn Install
if: steps.restore-ios-prebuilds.outputs.cache-hit != 'true'
@@ -32,21 +32,21 @@ jobs:
run: |
node scripts/releases/prepare-ios-prebuilds.js -w
- name: Upload Artifacts
- uses: actions/upload-artifact@v4.3.4
+ uses: actions/upload-artifact@v6
with:
name: ios-prebuilds-workspace
path: packages/react-native/third-party/
- name: Save Cache
- uses: actions/cache/save@v4
+ uses: actions/cache/save@v5
if: ${{ github.ref == 'refs/heads/main' }} # To avoid that the cache explode
with:
- key: v2-ios-dependencies-${{ hashfiles('scripts/releases/ios-prebuild/configuration.js') }}
+ key: v3-ios-dependencies-${{ hashfiles('scripts/releases/ios-prebuild/configuration.js') }}
enableCrossOsArchive: true
path: packages/react-native/third-party/
build-apple-slices:
name: Build Apple Slice
- runs-on: macos-14
+ runs-on: macos-15
needs: [prepare_workspace]
strategy:
fail-fast: false
@@ -62,59 +62,51 @@ jobs:
'xros-simulator']
steps:
- name: Checkout
- uses: actions/checkout@v4
+ uses: actions/checkout@v6
- name: Setup node.js
uses: ./.github/actions/setup-node
- - name: Setup xcode
- uses: ./.github/actions/setup-xcode
- with:
- xcode-version: '16.1'
- name: Restore slice folder
id: restore-slice-folder
- uses: actions/cache/restore@v4
+ uses: actions/cache/restore@v5
with:
path: packages/react-native/third-party/.build/Build/Products
- key: v2-ios-dependencies-slice-folder-${{ matrix.slice }}-${{ matrix.flavor }}-${{ hashfiles('scripts/releases/ios-prebuild/configuration.js') }}
+ key: v3-ios-dependencies-slice-folder-${{ matrix.slice }}-${{ matrix.flavor }}-${{ hashfiles('scripts/releases/ios-prebuild/configuration.js') }}
+ - name: Setup xcode
+ if: steps.restore-slice-folder.outputs.cache-hit != 'true'
+ uses: ./.github/actions/setup-xcode
- name: Yarn Install
if: steps.restore-slice-folder.outputs.cache-hit != 'true'
uses: ./.github/actions/yarn-install
- name: Restore workspace
if: steps.restore-slice-folder.outputs.cache-hit != 'true'
- uses: actions/download-artifact@v4
+ uses: actions/download-artifact@v7
with:
name: ios-prebuilds-workspace
path: packages/react-native/third-party/
- name: Print third-party folder structure
+ if: steps.restore-slice-folder.outputs.cache-hit != 'true'
run: ls -lR packages/react-native/third-party
- - name: Install VisionOS
- if: ${{ steps.restore-slice-folder.outputs.cache-hit != 'true' && (matrix.slice == 'xros' || matrix.slice == 'xros-simulator') }}
- run: |
- # https://github.com/actions/runner-images/issues/10559
- sudo xcodebuild -runFirstLaunch
- sudo xcrun simctl list
- sudo xcodebuild -downloadPlatform visionOS
- sudo xcodebuild -runFirstLaunch
- name: Build slice ${{ matrix.slice }} for ${{ matrix.flavor }}
if: steps.restore-slice-folder.outputs.cache-hit != 'true'
run: node scripts/releases/prepare-ios-prebuilds.js -b -p ${{ matrix.slice }} -r ${{ matrix.flavor }}
- name: Upload Artifacts
- uses: actions/upload-artifact@v4.3.4
+ uses: actions/upload-artifact@v6
with:
name: prebuild-slice-${{ matrix.flavor }}-${{ matrix.slice }}
path: |
packages/react-native/third-party/.build/Build/Products
- name: Save Cache
- uses: actions/cache/save@v4
+ uses: actions/cache/save@v5
if: ${{ github.ref == 'refs/heads/main' }} # To avoid that the cache explode
with:
- key: v2-ios-dependencies-slice-folder-${{ matrix.slice }}-${{ matrix.flavor }}-${{ hashfiles('scripts/releases/ios-prebuild/configuration.js') }}
+ key: v3-ios-dependencies-slice-folder-${{ matrix.slice }}-${{ matrix.flavor }}-${{ hashfiles('scripts/releases/ios-prebuild/configuration.js') }}
enableCrossOsArchive: true
path: |
packages/react-native/third-party/.build/Build/Products
create-xcframework:
name: Prepare XCFramework
- runs-on: macos-14
+ runs-on: macos-15
needs: [build-apple-slices]
strategy:
fail-fast: false
@@ -125,33 +117,31 @@ jobs:
REACT_ORG_CODE_SIGNING_P12_CERT_PWD: ${{ secrets.REACT_ORG_CODE_SIGNING_P12_CERT_PWD }}
steps:
- name: Checkout
- uses: actions/checkout@v4
+ uses: actions/checkout@v6
- name: Setup node.js
uses: ./.github/actions/setup-node
- name: Setup xcode
uses: ./.github/actions/setup-xcode
- with:
- xcode-version: '16.1'
- name: Restore XCFramework
id: restore-xcframework
- uses: actions/cache/restore@v4
+ uses: actions/cache/restore@v5
with:
path: |
packages/react-native/third-party/
- key: v2-ios-dependencies-xcframework-${{ matrix.flavor }}-${{ hashfiles('scripts/releases/ios-prebuild/configuration.js') }}
+ key: v3-ios-dependencies-xcframework-${{ matrix.flavor }}-${{ hashfiles('scripts/releases/ios-prebuild/configuration.js') }}
# If cache hit, we already have our binary. We don't need to do anything.
- name: Yarn Install
if: steps.restore-xcframework.outputs.cache-hit != 'true'
uses: ./.github/actions/yarn-install
- name: Restore workspace
if: steps.restore-xcframework.outputs.cache-hit != 'true'
- uses: actions/download-artifact@v4
+ uses: actions/download-artifact@v7
with:
name: ios-prebuilds-workspace
path: packages/react-native/third-party/
- name: Download slices
if: steps.restore-xcframework.outputs.cache-hit != 'true'
- uses: actions/download-artifact@v4
+ uses: actions/download-artifact@v7
with:
pattern: prebuild-slice-${{ matrix.flavor }}-*
path: packages/react-native/third-party/.build/Build/Products
@@ -183,21 +173,21 @@ jobs:
tar -cz -f ../ReactNativeDependencies${{ matrix.flavor }}.framework.dSYM.tar.gz .
mv ../ReactNativeDependencies${{ matrix.flavor }}.framework.dSYM.tar.gz ./ReactNativeDependencies${{ matrix.flavor }}.framework.dSYM.tar.gz
- name: Upload XCFramework Artifact
- uses: actions/upload-artifact@v4
+ uses: actions/upload-artifact@v6
with:
name: ReactNativeDependencies${{ matrix.flavor }}.xcframework.tar.gz
path: packages/react-native/third-party/ReactNativeDependencies${{ matrix.flavor }}.xcframework.tar.gz
- name: Upload dSYM Artifact
- uses: actions/upload-artifact@v4
+ uses: actions/upload-artifact@v6
with:
name: ReactNativeDependencies${{ matrix.flavor }}.framework.dSYM.tar.gz
path: |
packages/react-native/third-party/Symbols/ReactNativeDependencies${{ matrix.flavor }}.framework.dSYM.tar.gz
- name: Save XCFramework in Cache
if: ${{ github.ref == 'refs/heads/main' }} # To avoid that the cache explode
- uses: actions/cache/save@v4
+ uses: actions/cache/save@v5
with:
path: |
packages/react-native/third-party/ReactNativeDependencies${{ matrix.flavor }}.xcframework.tar.gz
packages/react-native/third-party/ReactNativeDependencies${{ matrix.flavor }}.framework.dSYM.tar.gz
- key: v2-ios-dependencies-xcframework-${{ matrix.flavor }}-${{ hashfiles('scripts/releases/ios-prebuild/configuration.js') }}
+ key: v3-ios-dependencies-xcframework-${{ matrix.flavor }}-${{ hashfiles('scripts/releases/ios-prebuild/configuration.js') }}
diff --git a/.github/workflows/publish-bumped-packages.yml b/.github/workflows/publish-bumped-packages.yml
index f47ddd9fc034..cf0b69b8c354 100644
--- a/.github/workflows/publish-bumped-packages.yml
+++ b/.github/workflows/publish-bumped-packages.yml
@@ -9,11 +9,12 @@ on:
jobs:
publish_bumped_packages:
runs-on: ubuntu-latest
+ if: github.repository == 'facebook/react-native'
env:
GHA_NPM_TOKEN: ${{ secrets.GHA_NPM_TOKEN }}
steps:
- name: Checkout
- uses: actions/checkout@v4
+ uses: actions/checkout@v6
- name: Setup node.js
uses: ./.github/actions/setup-node
- name: Run Yarn Install
diff --git a/.github/workflows/publish-release.yml b/.github/workflows/publish-release.yml
index 8f356720f0b9..99e3b94fc9b4 100644
--- a/.github/workflows/publish-release.yml
+++ b/.github/workflows/publish-release.yml
@@ -19,136 +19,43 @@ jobs:
echo "Setting release type to release"
echo "RELEASE_TYPE=release" >> $GITHUB_OUTPUT
- prepare_hermes_workspace:
+ set_hermes_versions:
runs-on: ubuntu-latest
- env:
- HERMES_WS_DIR: /tmp/hermes
- HERMES_VERSION_FILE: packages/react-native/sdks/.hermesversion
+ if: github.repository == 'facebook/react-native'
outputs:
- react-native-version: ${{ steps.prepare-hermes-workspace.outputs.react-native-version }}
- hermes-version: ${{ steps.prepare-hermes-workspace.outputs.hermes-version }}
- steps:
- - name: Checkout
- uses: actions/checkout@v4
- - name: Prepare Hermes Workspace
- id: prepare-hermes-workspace
- uses: ./.github/actions/prepare-hermes-workspace
- with:
- hermes-ws-dir: ${{ env.HERMES_WS_DIR }}
- hermes-version-file: ${{ env.HERMES_VERSION_FILE }}
-
- build_hermesc_apple:
- runs-on: macos-14
- needs: prepare_hermes_workspace
- env:
- HERMES_WS_DIR: /tmp/hermes
+ HERMES_VERSION: ${{ steps.set_hermes_versions.outputs.HERMES_VERSION }}
+ HERMES_V1_VERSION: ${{ steps.set_hermes_versions.outputs.HERMES_V1_VERSION }}
steps:
- name: Checkout
- uses: actions/checkout@v4
- - name: Build HermesC Apple
- uses: ./.github/actions/build-hermesc-apple
- with:
- hermes-version: ${{ needs.prepare_hermes_workspace.output.hermes-version }}
- react-native-version: ${{ needs.prepare_hermes_workspace.output.react-native-version }}
- build_apple_slices_hermes:
- runs-on: macos-14
- needs: [build_hermesc_apple, prepare_hermes_workspace]
- env:
- HERMES_WS_DIR: /tmp/hermes
- HERMES_TARBALL_ARTIFACTS_DIR: /tmp/hermes/hermes-runtime-darwin
- HERMES_OSXBIN_ARTIFACTS_DIR: /tmp/hermes/osx-bin
- IOS_DEPLOYMENT_TARGET: "15.1"
- XROS_DEPLOYMENT_TARGET: "1.0"
- MAC_DEPLOYMENT_TARGET: "10.15"
- strategy:
- fail-fast: false
- matrix:
- flavor: [Debug, Release]
- slice: [macosx, iphoneos, iphonesimulator, appletvos, appletvsimulator, catalyst, xros, xrsimulator]
- steps:
- - name: Checkout
- uses: actions/checkout@v4
- - name: Build Slice
- uses: ./.github/actions/build-apple-slices-hermes
- with:
- flavor: ${{ matrix.flavor }}
- slice: ${{ matrix.slice}}
- hermes-version: ${{ needs.prepare_hermes_workspace.outputs.hermes-version }}
- react-native-version: ${{ needs.prepare_hermes_workspace.outputs.react-native-version }}
+ uses: actions/checkout@v6
+ - id: set_hermes_versions
+ run: |
+ echo "Setting hermes versions to latest"
+ hermes_version=$(grep -oE 'HERMES_VERSION_NAME=([0-9]+\.[0-9]+\.[0-9]+)' packages/react-native/sdks/hermes-engine/version.properties | cut -d'=' -f2)
+ hermes_v1_version=$(grep -oE 'HERMES_V1_VERSION_NAME=([0-9]+\.[0-9]+\.[0-9]+)' packages/react-native/sdks/hermes-engine/version.properties | cut -d'=' -f2)
- build_hermes_macos:
- runs-on: macos-14
- needs: [build_apple_slices_hermes, prepare_hermes_workspace]
- env:
- HERMES_WS_DIR: /tmp/hermes
- HERMES_TARBALL_ARTIFACTS_DIR: /tmp/hermes/hermes-runtime-darwin
- continue-on-error: true
- strategy:
- fail-fast: false
- matrix:
- flavor: [Debug, Release]
- steps:
- - name: Checkout
- uses: actions/checkout@v4
- - name: Build Hermes MacOS
- uses: ./.github/actions/build-hermes-macos
- with:
- hermes-version: ${{ needs.prepare_hermes_workspace.outputs.hermes-version }}
- react-native-version: ${{ needs.prepare_hermes_workspace.outputs.react-native-version }}
- flavor: ${{ matrix.flavor }}
+ echo "HERMES_VERSION=$hermes_version" >> $GITHUB_OUTPUT
+ echo "HERMES_V1_VERSION=$hermes_v1_version" >> $GITHUB_OUTPUT
+ - name: Print hermes versions
+ run: |
+ echo "HERMES_VERSION=${{ steps.set_hermes_versions.outputs.HERMES_VERSION }}"
+ echo "HERMES_V1_VERSION=${{ steps.set_hermes_versions.outputs.HERMES_V1_VERSION }}"
prebuild_apple_dependencies:
+ if: github.repository == 'facebook/react-native'
uses: ./.github/workflows/prebuild-ios-dependencies.yml
secrets: inherit
prebuild_react_native_core:
uses: ./.github/workflows/prebuild-ios-core.yml
secrets: inherit
- needs: [prebuild_apple_dependencies, build_hermes_macos]
-
- build_hermesc_linux:
- runs-on: ubuntu-latest
- needs: prepare_hermes_workspace
- env:
- HERMES_WS_DIR: /tmp/hermes
- HERMES_TARBALL_ARTIFACTS_DIR: /tmp/hermes/hermes-runtime-darwin
- steps:
- - name: Checkout
- uses: actions/checkout@v4
- - name: Build HermesC Linux
- uses: ./.github/actions/build-hermesc-linux
- with:
- hermes-version: ${{ needs.prepare_hermes_workspace.outputs.hermes-version }}
- react-native-version: ${{ needs.prepare_hermes_workspace.outputs.react-native-version }}
-
- build_hermesc_windows:
- runs-on: windows-2025
- needs: prepare_hermes_workspace
- env:
- HERMES_WS_DIR: 'C:\tmp\hermes'
- HERMES_TARBALL_ARTIFACTS_DIR: 'C:\tmp\hermes\hermes-runtime-darwin'
- HERMES_OSXBIN_ARTIFACTS_DIR: 'C:\tmp\hermes\osx-bin'
- ICU_URL: "https://github.com/unicode-org/icu/releases/download/release-64-2/icu4c-64_2-Win64-MSVC2017.zip"
- MSBUILD_DIR: 'C:\Program Files (x86)\Microsoft Visual Studio\2019\BuildTools\MSBuild\Current\Bin'
- CMAKE_DIR: 'C:\Program Files\CMake\bin'
- steps:
- - name: Checkout
- uses: actions/checkout@v4
- - name: Build HermesC Windows
- uses: ./.github/actions/build-hermesc-windows
- with:
- hermes-version: ${{ needs.prepare_hermes_workspace.outputs.hermes-version }}
- react-native-version: ${{ needs.prepare_hermes_workspace.outputs.react-native-version }}
+ needs: [prebuild_apple_dependencies]
build_npm_package:
runs-on: 8-core-ubuntu
needs:
[
set_release_type,
- prepare_hermes_workspace,
- build_hermes_macos,
- build_hermesc_linux,
- build_hermesc_windows,
prebuild_apple_dependencies,
prebuild_react_native_core,
]
@@ -160,7 +67,6 @@ jobs:
# By default we only build ARM64 to save time/resources. For release/nightlies, we override this value to build all archs.
ORG_GRADLE_PROJECT_reactNativeArchitectures: "arm64-v8a"
env:
- HERMES_WS_DIR: /tmp/hermes
GHA_NPM_TOKEN: ${{ secrets.GHA_NPM_TOKEN }}
ORG_GRADLE_PROJECT_SIGNING_PWD: ${{ secrets.ORG_GRADLE_PROJECT_SIGNING_PWD }}
ORG_GRADLE_PROJECT_SIGNING_KEY: ${{ secrets.ORG_GRADLE_PROJECT_SIGNING_KEY }}
@@ -169,20 +75,19 @@ jobs:
REACT_NATIVE_BOT_GITHUB_TOKEN: ${{ secrets.REACT_NATIVE_BOT_GITHUB_TOKEN }}
steps:
- name: Checkout
- uses: actions/checkout@v4
+ uses: actions/checkout@v6
with:
fetch-depth: 0
fetch-tags: true
- name: Build and Publish NPM Package
uses: ./.github/actions/build-npm-package
with:
- hermes-ws-dir: ${{ env.HERMES_WS_DIR }}
release-type: ${{ needs.set_release_type.outputs.RELEASE_TYPE }}
gha-npm-token: ${{ env.GHA_NPM_TOKEN }}
gradle-cache-encryption-key: ${{ secrets.GRADLE_CACHE_ENCRYPTION_KEY }}
- name: Publish @react-native-community/template
id: publish-template-to-npm
- uses: actions/github-script@v6
+ uses: actions/github-script@v8
with:
github-token: ${{ secrets.REACT_NATIVE_BOT_GITHUB_TOKEN }}
script: |
@@ -192,7 +97,7 @@ jobs:
await publishTemplate(github, version, isDryRun);
- name: Wait for template to be published
timeout-minutes: 3
- uses: actions/github-script@v6
+ uses: actions/github-script@v8
with:
github-token: ${{ secrets.REACT_NATIVE_BOT_GITHUB_TOKEN }}
script: |
@@ -207,7 +112,7 @@ jobs:
-d "{\"event_type\": \"publish\", \"client_payload\": { \"version\": \"${{ github.ref_name }}\" }}"
- name: Verify Release is on NPM
timeout-minutes: 3
- uses: actions/github-script@v6
+ uses: actions/github-script@v8
with:
github-token: ${{ secrets.REACT_NATIVE_BOT_GITHUB_TOKEN }}
script: |
@@ -216,7 +121,7 @@ jobs:
const version = "${{ github.ref_name }}";
await verifyReleaseOnNpm(version, isLatest());
- name: Verify that artifacts are on Maven
- uses: actions/github-script@v6
+ uses: actions/github-script@v8
with:
script: |
const {verifyArtifactsAreOnMaven} = require('./.github/workflow-scripts/verifyArtifactsAreOnMaven.js');
@@ -234,6 +139,9 @@ jobs:
secrets: inherit
create_draft_release:
- needs: generate_changelog
+ needs: [generate_changelog, set_hermes_versions]
uses: ./.github/workflows/create-draft-release.yml
secrets: inherit
+ with:
+ hermesVersion: ${{ needs.set_hermes_versions.outputs.HERMES_VERSION }}
+ hermesV1Version: ${{ needs.set_hermes_versions.outputs.HERMES_V1_VERSION }}
diff --git a/.github/workflows/retry-workflow.yml b/.github/workflows/retry-workflow.yml
index aef1766b3613..d943d657d825 100644
--- a/.github/workflows/retry-workflow.yml
+++ b/.github/workflows/retry-workflow.yml
@@ -9,6 +9,7 @@ on:
jobs:
rerun:
runs-on: ubuntu-latest
+ if: github.repository == 'facebook/react-native'
steps:
- name: rerun ${{ inputs.run_id }}
env:
diff --git a/.github/workflows/stale-bot.yml b/.github/workflows/stale-bot.yml
index 585ea9a9e743..f4c2fa8d353f 100644
--- a/.github/workflows/stale-bot.yml
+++ b/.github/workflows/stale-bot.yml
@@ -10,7 +10,7 @@ jobs:
issues: write
pull-requests: write
steps:
- - uses: actions/stale@v9
+ - uses: actions/stale@v10
with:
repo-token: ${{ secrets.REACT_NATIVE_BOT_GITHUB_TOKEN }}
days-before-stale: 180
@@ -27,7 +27,7 @@ jobs:
issues: write
pull-requests: write
steps:
- - uses: actions/stale@v9
+ - uses: actions/stale@v10
with:
ascending: true
repo-token: ${{ secrets.REACT_NATIVE_BOT_GITHUB_TOKEN }}
@@ -45,7 +45,7 @@ jobs:
issues: write
pull-requests: write
steps:
- - uses: actions/stale@v9
+ - uses: actions/stale@v10
with:
repo-token: ${{ secrets.REACT_NATIVE_BOT_GITHUB_TOKEN }}
any-of-labels: 'Needs: Author Feedback'
@@ -63,7 +63,7 @@ jobs:
issues: write
pull-requests: write
steps:
- - uses: actions/stale@v9
+ - uses: actions/stale@v10
with:
ascending: true
repo-token: ${{ secrets.REACT_NATIVE_BOT_GITHUB_TOKEN }}
diff --git a/.github/workflows/test-all.yml b/.github/workflows/test-all.yml
index e4f00621dee9..5a59c493f41e 100644
--- a/.github/workflows/test-all.yml
+++ b/.github/workflows/test-all.yml
@@ -11,6 +11,7 @@ on:
jobs:
set_release_type:
runs-on: ubuntu-latest
+ if: github.repository == 'facebook/react-native'
outputs:
RELEASE_TYPE: ${{ steps.set_release_type.outputs.RELEASE_TYPE }}
env:
@@ -32,154 +33,81 @@ jobs:
echo "Should I run E2E tests? ${{ inputs.run-e2e-tests }}"
- prepare_hermes_workspace:
- runs-on: ubuntu-latest
- env:
- HERMES_WS_DIR: /tmp/hermes
- HERMES_VERSION_FILE: packages/react-native/sdks/.hermesversion
- outputs:
- react-native-version: ${{ steps.prepare-hermes-workspace.outputs.react-native-version }}
- hermes-version: ${{ steps.prepare-hermes-workspace.outputs.hermes-version }}
- steps:
- - name: Checkout
- uses: actions/checkout@v4
- - name: Prepare Hermes Workspace
- id: prepare-hermes-workspace
- uses: ./.github/actions/prepare-hermes-workspace
- with:
- hermes-ws-dir: ${{ env.HERMES_WS_DIR }}
- hermes-version-file: ${{ env.HERMES_VERSION_FILE }}
-
- build_hermesc_apple:
- runs-on: macos-14
- needs: prepare_hermes_workspace
- env:
- HERMES_WS_DIR: /tmp/hermes
- steps:
- - name: Checkout
- uses: actions/checkout@v4
- - name: Build HermesC Apple
- uses: ./.github/actions/build-hermesc-apple
- with:
- hermes-version: ${{ needs.prepare_hermes_workspace.outputs.hermes-version }}
- react-native-version: ${{ needs.prepare_hermes_workspace.outputs.react-native-version }}
-
- build_apple_slices_hermes:
- runs-on: macos-14
- needs: [build_hermesc_apple, prepare_hermes_workspace]
- env:
- HERMES_WS_DIR: /tmp/hermes
- HERMES_TARBALL_ARTIFACTS_DIR: /tmp/hermes/hermes-runtime-darwin
- HERMES_OSXBIN_ARTIFACTS_DIR: /tmp/hermes/osx-bin
- IOS_DEPLOYMENT_TARGET: "15.1"
- XROS_DEPLOYMENT_TARGET: "1.0"
- MAC_DEPLOYMENT_TARGET: "10.15"
- strategy:
- fail-fast: false
- matrix:
- flavor: [Debug, Release]
- slice: [macosx, iphoneos, iphonesimulator, appletvos, appletvsimulator, catalyst, xros, xrsimulator]
- steps:
- - name: Checkout
- uses: actions/checkout@v4
- - name: Build Slice
- uses: ./.github/actions/build-apple-slices-hermes
- with:
- flavor: ${{ matrix.flavor }}
- slice: ${{ matrix.slice}}
- hermes-version: ${{ needs.prepare_hermes_workspace.outputs.hermes-version }}
- react-native-version: ${{ needs.prepare_hermes_workspace.outputs.react-native-version }}
-
- build_hermes_macos:
- runs-on: macos-14
- needs: [build_apple_slices_hermes, prepare_hermes_workspace]
- env:
- HERMES_WS_DIR: /tmp/hermes
- HERMES_TARBALL_ARTIFACTS_DIR: /tmp/hermes/hermes-runtime-darwin
- continue-on-error: true
- strategy:
- fail-fast: false
- matrix:
- flavor: [Debug, Release]
- steps:
- - name: Checkout
- uses: actions/checkout@v4
- - name: Build Hermes MacOS
- uses: ./.github/actions/build-hermes-macos
- with:
- hermes-version: ${{ needs.prepare_hermes_workspace.outputs.hermes-version }}
- react-native-version: ${{ needs.prepare_hermes_workspace.outputs.react-native-version }}
- flavor: ${{ matrix.flavor }}
-
prebuild_apple_dependencies:
+ if: github.repository == 'facebook/react-native'
uses: ./.github/workflows/prebuild-ios-dependencies.yml
secrets: inherit
prebuild_react_native_core:
uses: ./.github/workflows/prebuild-ios-core.yml
+ with:
+ use-hermes-nightly: ${{ !endsWith(github.ref_name, '-stable') }}
secrets: inherit
- needs: [prebuild_apple_dependencies, build_hermes_macos]
+ needs: [prebuild_apple_dependencies]
test_ios_rntester_ruby_3_2_0:
- runs-on: macos-14
+ runs-on: macos-15
needs:
- [build_apple_slices_hermes, prepare_hermes_workspace, build_hermes_macos, prebuild_apple_dependencies, prebuild_react_native_core]
- env:
- HERMES_WS_DIR: /tmp/hermes
- HERMES_TARBALL_ARTIFACTS_DIR: /tmp/hermes/hermes-runtime-darwin
+ [prebuild_apple_dependencies, prebuild_react_native_core]
steps:
- name: Checkout
- uses: actions/checkout@v4
+ uses: actions/checkout@v6
- name: Run it
uses: ./.github/actions/test-ios-rntester
with:
ruby-version: "3.2.0"
- hermes-version: ${{ needs.prepare_hermes_workspace.outputs.hermes-version }}
- react-native-version: ${{ needs.prepare_hermes_workspace.outputs.react-native-version }}
flavor: Debug
+ test_ios_rntester_dynamic_frameworks:
+ runs-on: macos-15-large
+ strategy:
+ fail-fast: false
+ matrix:
+ flavor: [Debug, Release]
+ steps:
+ - name: Checkout
+ uses: actions/checkout@v6
+ - name: Run it
+ uses: ./.github/actions/test-ios-rntester
+ with:
+ flavor: ${{ matrix.flavor }}
+ use-frameworks: true
+ run-unit-tests: false # tests for dynamic frameworks are already run in the test_ios_rntester job; this is to just a test build from source (no prebuilds)
+
test_ios_rntester:
- runs-on: macos-14-large
+ runs-on: macos-15-large
needs:
- [build_apple_slices_hermes, prepare_hermes_workspace, build_hermes_macos, prebuild_apple_dependencies, prebuild_react_native_core]
- env:
- HERMES_WS_DIR: /tmp/hermes
- HERMES_TARBALL_ARTIFACTS_DIR: /tmp/hermes/hermes-runtime-darwin
+ [prebuild_apple_dependencies, prebuild_react_native_core]
continue-on-error: true
strategy:
fail-fast: false
matrix:
flavor: [Debug, Release]
- frameworks: [StaticLibraries, DynamicFrameworks]
+ frameworks: [false, true]
steps:
- name: Checkout
- uses: actions/checkout@v4
+ uses: actions/checkout@v6
- name: Run it
uses: ./.github/actions/test-ios-rntester
with:
use-frameworks: ${{ matrix.frameworks }}
- hermes-version: ${{ needs.prepare_hermes_workspace.outputs.hermes-version }}
- react-native-version: ${{ needs.prepare_hermes_workspace.outputs.react-native-version }}
flavor: ${{ matrix.flavor }}
test_e2e_ios_rntester:
- runs-on: macos-14-large
+ runs-on: macos-15-large
needs:
[test_ios_rntester]
- env:
- HERMES_WS_DIR: /tmp/hermes
- HERMES_TARBALL_ARTIFACTS_DIR: /tmp/hermes/hermes-runtime-darwin
strategy:
fail-fast: false
matrix:
flavor: [Debug, Release]
steps:
- name: Checkout
- uses: actions/checkout@v4
+ uses: actions/checkout@v6
- name: Setup Node.js
uses: ./.github/actions/setup-node
- name: Download App
- uses: actions/download-artifact@v4
+ uses: actions/download-artifact@v7
with:
name: RNTesterApp-NewArch-${{ matrix.flavor }}
path: /tmp/RNTesterBuild/RNTester.app
@@ -196,18 +124,15 @@ jobs:
flavor: ${{ matrix.flavor }}
test_e2e_ios_templateapp:
- runs-on: macos-14-large
+ runs-on: macos-15-large
needs: [build_npm_package, prebuild_apple_dependencies]
- env:
- HERMES_WS_DIR: /tmp/hermes
- HERMES_TARBALL_ARTIFACTS_DIR: /tmp/hermes/hermes-runtime-darwin
strategy:
fail-fast: false
matrix:
flavor: [Debug, Release]
steps:
- name: Checkout
- uses: actions/checkout@v4
+ uses: actions/checkout@v6
- name: Setup xcode
uses: ./.github/actions/setup-xcode
- name: Setup node.js
@@ -218,20 +143,15 @@ jobs:
uses: ruby/setup-ruby@v1
with:
ruby-version: 2.6.10
- - name: Download Hermes
- uses: actions/download-artifact@v4
- with:
- name: hermes-darwin-bin-${{matrix.flavor}}
- path: /tmp/react-native-tmp
- name: Download React Native Package
- uses: actions/download-artifact@v4
+ uses: actions/download-artifact@v7
with:
name: react-native-package
path: /tmp/react-native-tmp
- name: Print /tmp folder
run: ls -lR /tmp/react-native-tmp
- name: Download ReactNativeDependencies
- uses: actions/download-artifact@v4
+ uses: actions/download-artifact@v7
with:
name: ReactNativeDependencies${{ matrix.flavor }}.xcframework.tar.gz
path: /tmp/third-party
@@ -239,7 +159,7 @@ jobs:
shell: bash
run: ls -lR /tmp/third-party
- name: Download React Native Prebuilds
- uses: actions/download-artifact@v4
+ uses: actions/download-artifact@v7
with:
name: ReactCore${{ matrix.flavor }}.xcframework.tar.gz
path: /tmp/ReactCore
@@ -256,9 +176,6 @@ jobs:
REACT_NATIVE_PKG=$(find /tmp/react-native-tmp -type f -name "*.tgz")
echo "React Native tgs is $REACT_NATIVE_PKG"
- HERMES_PATH=$(find /tmp/react-native-tmp -type f -name "*.tar.gz")
- echo "Hermes path is $HERMES_PATH"
-
# For stable branches, we want to use the stable branch of the template
# In all the other cases, we want to use "main"
BRANCH=${{ github.ref_name }}
@@ -273,8 +190,9 @@ jobs:
NEW_ARCH_ENABLED=1
export RCT_USE_LOCAL_RN_DEP=/tmp/third-party/ReactNativeDependencies${{ matrix.flavor }}.xcframework.tar.gz
+ # Disable prebuilds for now, as they are causing issues with E2E tests for 0.82-stable branch
export RCT_TESTONLY_RNCORE_TARBALL_PATH="/tmp/ReactCore/ReactCore${{ matrix.flavor }}.xcframework.tar.gz"
- HERMES_ENGINE_TARBALL_PATH=$HERMES_PATH RCT_NEW_ARCH_ENABLED=$NEW_ARCH_ENABLED bundle exec pod install
+ RCT_NEW_ARCH_ENABLED=$NEW_ARCH_ENABLED bundle exec pod install
xcodebuild \
-scheme "RNTestProject" \
@@ -301,23 +219,23 @@ jobs:
flavor: [debug, release]
steps:
- name: Checkout
- uses: actions/checkout@v4
+ uses: actions/checkout@v6
- name: Setup node.js
uses: ./.github/actions/setup-node
- name: Run yarn
uses: ./.github/actions/yarn-install
- name: Set up JDK 17
- uses: actions/setup-java@v2
+ uses: actions/setup-java@v5
with:
java-version: '17'
distribution: 'zulu'
- name: Download Maven Local
- uses: actions/download-artifact@v4
+ uses: actions/download-artifact@v7
with:
name: maven-local
path: /tmp/react-native-tmp/maven-local
- name: Download React Native Package
- uses: actions/download-artifact@v4
+ uses: actions/download-artifact@v7
with:
name: react-native-package
path: /tmp/react-native-tmp
@@ -360,21 +278,6 @@ jobs:
flavor: ${{ matrix.flavor }}
working-directory: /tmp/RNTestProject
- build_hermesc_linux:
- runs-on: ubuntu-latest
- needs: prepare_hermes_workspace
- env:
- HERMES_WS_DIR: /tmp/hermes
- HERMES_TARBALL_ARTIFACTS_DIR: /tmp/hermes/hermes-runtime-darwin
- steps:
- - name: Checkout
- uses: actions/checkout@v4
- - name: Build HermesC Linux
- uses: ./.github/actions/build-hermesc-linux
- with:
- hermes-version: ${{ needs.prepare_hermes_workspace.outputs.hermes-version }}
- react-native-version: ${{ needs.prepare_hermes_workspace.outputs.react-native-version }}
-
run_fantom_tests:
runs-on: 8-core-ubuntu
needs: [set_release_type]
@@ -387,32 +290,13 @@ jobs:
ORG_GRADLE_PROJECT_SIGNING_KEY: ${{ secrets.ORG_GRADLE_PROJECT_SIGNING_KEY }}
steps:
- name: Checkout
- uses: actions/checkout@v4
+ uses: actions/checkout@v6
- name: Build and Test Fantom
uses: ./.github/actions/run-fantom-tests
with:
release-type: ${{ needs.set_release_type.outputs.RELEASE_TYPE }}
gradle-cache-encryption-key: ${{ secrets.GRADLE_CACHE_ENCRYPTION_KEY }}
- build_hermesc_windows:
- runs-on: windows-2025
- needs: prepare_hermes_workspace
- env:
- HERMES_WS_DIR: 'C:\tmp\hermes'
- HERMES_TARBALL_ARTIFACTS_DIR: 'C:\tmp\hermes\hermes-runtime-darwin'
- HERMES_OSXBIN_ARTIFACTS_DIR: 'C:\tmp\hermes\osx-bin'
- ICU_URL: "https://github.com/unicode-org/icu/releases/download/release-64-2/icu4c-64_2-Win64-MSVC2017.zip"
- MSBUILD_DIR: 'C:\Program Files (x86)\Microsoft Visual Studio\2019\BuildTools\MSBuild\Current\Bin'
- CMAKE_DIR: 'C:\Program Files\CMake\bin'
- steps:
- - name: Checkout
- uses: actions/checkout@v4
- - name: Build HermesC Windows
- uses: ./.github/actions/build-hermesc-windows
- with:
- hermes-version: ${{ needs.prepare_hermes_workspace.outputs.hermes-version }}
- react-native-version: ${{ needs.prepare_hermes_workspace.outputs.react-native-version }}
-
build_android:
runs-on: 8-core-ubuntu
needs: [set_release_type]
@@ -425,7 +309,7 @@ jobs:
ORG_GRADLE_PROJECT_SIGNING_KEY: ${{ secrets.ORG_GRADLE_PROJECT_SIGNING_KEY }}
steps:
- name: Checkout
- uses: actions/checkout@v4
+ uses: actions/checkout@v6
- name: Build Android
uses: ./.github/actions/build-android
with:
@@ -441,13 +325,13 @@ jobs:
flavor: [debug, release]
steps:
- name: Checkout
- uses: actions/checkout@v4
+ uses: actions/checkout@v6
- name: Setup node.js
uses: ./.github/actions/setup-node
- name: Install node dependencies
uses: ./.github/actions/yarn-install
- name: Download APK
- uses: actions/download-artifact@v4
+ uses: actions/download-artifact@v7
with:
name: rntester-${{ matrix.flavor }}
path: ./packages/rn-tester/android/app/build/outputs/apk/${{ matrix.flavor }}/
@@ -467,10 +351,6 @@ jobs:
needs:
[
set_release_type,
- prepare_hermes_workspace,
- build_hermes_macos,
- build_hermesc_linux,
- build_hermesc_windows,
build_android,
prebuild_apple_dependencies,
prebuild_react_native_core,
@@ -480,15 +360,12 @@ jobs:
env:
TERM: "dumb"
GRADLE_OPTS: "-Dorg.gradle.daemon=false"
- env:
- HERMES_WS_DIR: /tmp/hermes
steps:
- name: Checkout
- uses: actions/checkout@v4
+ uses: actions/checkout@v6
- name: Build NPM Package
uses: ./.github/actions/build-npm-package
with:
- hermes-ws-dir: ${{ env.HERMES_WS_DIR }}
release-type: ${{ needs.set_release_type.outputs.RELEASE_TYPE }}
gradle-cache-encryption-key: ${{ secrets.GRADLE_CACHE_ENCRYPTION_KEY }}
@@ -512,16 +389,16 @@ jobs:
flavor: [Debug, Release]
steps:
- name: Checkout
- uses: actions/checkout@v4
+ uses: actions/checkout@v6
- name: Setup git safe folders
run: git config --global --add safe.directory '*'
- name: Download npm package artifact
- uses: actions/download-artifact@v4.1.3
+ uses: actions/download-artifact@v7
with:
name: react-native-package
path: build
- name: Download maven-local artifact
- uses: actions/download-artifact@v4.1.3
+ uses: actions/download-artifact@v7
with:
name: maven-local
path: /tmp/maven-local
@@ -531,6 +408,12 @@ jobs:
cache-encryption-key: ${{ secrets.GRADLE_CACHE_ENCRYPTION_KEY }}
- name: Run yarn install
uses: ./.github/actions/yarn-install
+ - name: Set nightly Hermes versions
+ shell: bash
+ run: |
+ node ./scripts/releases/use-hermes-nightly.js
+ - name: Run yarn install again, with the correct hermes version
+ uses: ./.github/actions/yarn-install
- name: Prepare the Helloworld application
shell: bash
run: node ./scripts/e2e/init-project-e2e.js --useHelloWorld --pathToLocalReactNative "$GITHUB_WORKSPACE/build/$(cat build/react-native-package-version)"
@@ -544,63 +427,58 @@ jobs:
fi
yarn build android "${args[@]}" -P reactNativeArchitectures="$TARGET_ARCHITECTURE" -P react.internal.mavenLocalRepo="/tmp/maven-local"
- name: Upload artifact
- uses: actions/upload-artifact@v4.3.4
+ uses: actions/upload-artifact@v6
with:
name: helloworld-apk-${{ matrix.flavor }}-NewArch-hermes
path: ./private/helloworld/android/app/build/outputs/apk/
compression-level: 0
test_ios_helloworld_with_ruby_3_2_0:
- runs-on: macos-14
- needs: [prepare_hermes_workspace, build_hermes_macos, prebuild_apple_dependencies, prebuild_react_native_core] # prepare_hermes_workspace must be there because we need its reference to retrieve a couple of outputs
+ runs-on: macos-15
+ needs: [prebuild_apple_dependencies, prebuild_react_native_core]
env:
PROJECT_NAME: iOSTemplateProject
- HERMES_WS_DIR: /tmp/hermes
YARN_ENABLE_IMMUTABLE_INSTALLS: false
steps:
- name: Checkout
- uses: actions/checkout@v4
+ uses: actions/checkout@v6
- uses: ./.github/actions/test-ios-helloworld
with:
ruby-version: 3.2.0
flavor: Debug
- hermes-version: ${{ needs.prepare_hermes_workspace.outputs.hermes-version }}
- react-native-version: ${{ needs.prepare_hermes_workspace.outputs.react-native-version }}
test_ios_helloworld:
- runs-on: macos-14
- needs: [prepare_hermes_workspace, build_hermes_macos, prebuild_apple_dependencies, prebuild_react_native_core] # prepare_hermes_workspace must be there because we need its reference to retrieve a couple of outputs
+ runs-on: macos-15
+ needs: [prebuild_apple_dependencies, prebuild_react_native_core]
strategy:
matrix:
flavor: [Debug, Release]
- use_frameworks: [StaticLibraries, DynamicFrameworks]
+ use_frameworks: [false, true]
exclude:
# This config is tested with Ruby 3.2.0. Let's not double test it.
- flavor: Debug
use_frameworks: StaticLibraries
env:
PROJECT_NAME: iOSTemplateProject
- HERMES_WS_DIR: /tmp/hermes
YARN_ENABLE_IMMUTABLE_INSTALLS: false
steps:
- name: Checkout
- uses: actions/checkout@v4
+ uses: actions/checkout@v6
- uses: ./.github/actions/test-ios-helloworld
with:
flavor: ${{ matrix.flavor }}
use-frameworks: ${{ matrix.use_frameworks }}
- hermes-version: ${{ needs.prepare_hermes_workspace.outputs.hermes-version }}
- react-native-version: ${{ needs.prepare_hermes_workspace.outputs.react-native-version }}
test_js:
runs-on: ubuntu-latest
+ if: github.repository == 'facebook/react-native'
strategy:
fail-fast: false
matrix:
- node-version: ["24.4.1", "22", "20.19.4"]
+ node-version: ["24", "22", "20.19.4"]
steps:
- name: Checkout
- uses: actions/checkout@v4
+ uses: actions/checkout@v6
- name: Test JS
uses: ./.github/actions/test-js
with:
@@ -608,11 +486,12 @@ jobs:
lint:
runs-on: ubuntu-latest
+ if: github.repository == 'facebook/react-native'
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
steps:
- name: Checkout
- uses: actions/checkout@v4
+ uses: actions/checkout@v6
- name: Run all the linters
uses: ./.github/actions/lint
with:
@@ -629,11 +508,11 @@ jobs:
# This is exactly the same as rerunning failed tests from the GH UI, but automated.
rerun-failed-jobs:
runs-on: ubuntu-latest
- needs: [test_e2e_ios_rntester, test_e2e_android_rntester, test_e2e_ios_templateapp, test_e2e_android_templateapp]
+ needs: [test_e2e_ios_rntester, test_e2e_android_rntester, test_e2e_ios_templateapp, test_e2e_android_templateapp, run_fantom_tests]
if: ${{ github.ref == 'refs/heads/main' && always() }}
steps:
- name: Checkout
- uses: actions/checkout@v4
+ uses: actions/checkout@v6
- name: Rerun failed jobs in the current workflow
env:
GH_TOKEN: ${{ github.token }}
@@ -647,13 +526,15 @@ jobs:
TEMPLATE_ANDROID_FAILED=${{ needs.test_e2e_android_templateapp.result == 'failure' }}
RNTESTER_IOS_FAILED=${{ needs.test_e2e_ios_rntester.result == 'failure' }}
TEMPLATE_IOS_FAILED=${{ needs.test_e2e_ios_templateapp.result == 'failure' }}
+ FANTOM_TESTS_FAILED=${{ needs.run_fantom_tests.result == 'failure' }}
echo "RNTESTER_ANDROID_FAILED: $RNTESTER_ANDROID_FAILED"
echo "TEMPLATE_ANDROID_FAILED: $TEMPLATE_ANDROID_FAILED"
echo "RNTESTER_IOS_FAILED: $RNTESTER_IOS_FAILED"
echo "TEMPLATE_IOS_FAILED: $TEMPLATE_IOS_FAILED"
+ echo "FANTOM_TESTS_FAILED: $FANTOM_TESTS_FAILED"
- if [[ $RNTESTER_ANDROID_FAILED == "true" || $TEMPLATE_ANDROID_FAILED == "true" || $RNTESTER_IOS_FAILED == "true" || $TEMPLATE_IOS_FAILED == "true" ]]; then
+ if [[ $RNTESTER_ANDROID_FAILED == "true" || $TEMPLATE_ANDROID_FAILED == "true" || $RNTESTER_IOS_FAILED == "true" || $TEMPLATE_IOS_FAILED == "true" || $FANTOM_TESTS_FAILED == "true" ]]; then
echo "Rerunning failed jobs in the current workflow"
gh workflow run retry-workflow.yml -F run_id=${{ github.run_id }}
fi
diff --git a/.github/workflows/test-hermes-v1-android.yml b/.github/workflows/test-hermes-v1-android.yml
new file mode 100644
index 000000000000..1c7b7eedf12b
--- /dev/null
+++ b/.github/workflows/test-hermes-v1-android.yml
@@ -0,0 +1,70 @@
+name: Test Hermes V1 with nightly on Android
+
+on:
+ workflow_call:
+ inputs:
+ retry-count:
+ description: 'Number of times to retry the build on failure'
+ required: false
+ type: number
+ default: 3
+
+jobs:
+ test-hermes-v1-android:
+ name: Test Hermes V1 on Android
+ runs-on: 4-core-ubuntu
+ strategy:
+ matrix:
+ flavor: [debug, release]
+ steps:
+ - name: Checkout
+ uses: actions/checkout@v6
+
+ - name: Setup node.js
+ uses: actions/setup-node@v6
+ with:
+ node-version: '22.14.0'
+ cache: yarn
+
+ - name: Set up JDK 17
+ uses: actions/setup-java@v5
+ with:
+ java-version: '17'
+ distribution: 'zulu'
+
+ - name: Prepare the app with Hermes V1
+ uses: ./.github/actions/prepare-hermes-v1-app
+ with:
+ retry-count: ${{ inputs.retry-count }}
+
+ - name: Build Android with retry
+ uses: nick-fields/retry@v3
+ env:
+ CMAKE_VERSION: 3.31.5
+ ORG_GRADLE_PROJECT_reactNativeArchitectures: x86_64
+ with:
+ timeout_minutes: 45
+ max_attempts: ${{ inputs.retry-count }}
+ retry_wait_seconds: 30
+ shell: bash
+ command: |
+ cd /tmp/RNApp/android
+ CAPITALIZED_FLAVOR=$(echo "${{ matrix.flavor }}" | awk '{print toupper(substr($0, 1, 1)) substr($0, 2)}')
+ ./gradlew assemble${CAPITALIZED_FLAVOR} -PhermesV1Enabled=true
+ on_retry_command: |
+ echo "Cleaning up for Android retry..."
+ cd /tmp/RNApp/android
+ ./gradlew clean || true
+ rm -rf build app/build .gradle || true
+
+ - name: Run E2E Tests
+ uses: ./.github/actions/maestro-android
+ timeout-minutes: 60
+ with:
+ app-path: /tmp/RNApp/android/app/build/outputs/apk/${{ matrix.flavor }}/app-${{ matrix.flavor }}.apk
+ app-id: com.rnapp
+ maestro-flow: ./scripts/e2e/.maestro/
+ install-java: 'false'
+ flavor: ${{ matrix.flavor }}
+ working-directory: /tmp/RNApp
+ emulator-arch: x86_64
diff --git a/.github/workflows/test-hermes-v1-ios.yml b/.github/workflows/test-hermes-v1-ios.yml
new file mode 100644
index 000000000000..bdafd9181b81
--- /dev/null
+++ b/.github/workflows/test-hermes-v1-ios.yml
@@ -0,0 +1,76 @@
+name: Test Hermes V1 with nightly on iOS
+
+on:
+ workflow_call:
+ inputs:
+ retry-count:
+ description: 'Number of times to retry the build on failure'
+ required: false
+ type: number
+ default: 3
+
+jobs:
+ test-hermes-v1-ios:
+ name: Test Hermes V1 on iOS
+ runs-on: macos-15-large
+ strategy:
+ matrix:
+ flavor: [debug, release]
+ steps:
+ - name: Checkout
+ uses: actions/checkout@v6
+
+ - name: Setup node.js
+ uses: actions/setup-node@v6
+ with:
+ node-version: '22.14.0'
+ cache: yarn
+
+ - name: Prepare capitalized flavor
+ id: prepare-flavor
+ shell: bash
+ run: |
+ CAPITALIZED_FLAVOR=$(echo "${{ matrix.flavor }}" | awk '{print toupper(substr($0, 1, 1)) substr($0, 2)}')
+ echo "capitalized_flavor=$CAPITALIZED_FLAVOR" >> $GITHUB_OUTPUT
+
+ - name: Prepare the app with Hermes V1
+ uses: ./.github/actions/prepare-hermes-v1-app
+ with:
+ retry-count: ${{ inputs.retry-count }}
+
+ - name: Setup xcode
+ uses: maxim-lobanov/setup-xcode@v1
+
+ - name: Build iOS with retry
+ uses: nick-fields/retry@v3
+ with:
+ timeout_minutes: 45
+ max_attempts: ${{ inputs.retry-count }}
+ retry_wait_seconds: 30
+ shell: bash
+ command: |
+ cd /tmp/RNApp/ios
+ bundle install
+ RCT_HERMES_V1_ENABLED=1 bundle exec pod install
+ xcodebuild build \
+ -workspace "RNApp.xcworkspace" \
+ -scheme "RNApp" \
+ -configuration "${{ steps.prepare-flavor.outputs.capitalized_flavor }}" \
+ -sdk "iphonesimulator" \
+ -destination "generic/platform=iOS Simulator" \
+ -derivedDataPath "/tmp/RNApp" \
+ -quiet
+ on_retry_command: |
+ echo "Cleaning up for iOS retry..."
+ cd /tmp/RNApp/ios
+ rm -rf Pods Podfile.lock build
+ rm -rf ~/Library/Developer/Xcode/DerivedData/* || true
+
+ - name: Run E2E Tests
+ uses: ./.github/actions/maestro-ios
+ with:
+ app-path: "/tmp/RNApp/Build/Products/${{ steps.prepare-flavor.outputs.capitalized_flavor }}-iphonesimulator/RNApp.app"
+ app-id: org.reactjs.native.example.RNApp
+ maestro-flow: ./scripts/e2e/.maestro/
+ flavor: ${{ steps.prepare-flavor.outputs.capitalized_flavor }}
+ working-directory: /tmp/RNApp
diff --git a/.github/workflows/test-hermes-v1.yml b/.github/workflows/test-hermes-v1.yml
new file mode 100644
index 000000000000..d11e444e5ff6
--- /dev/null
+++ b/.github/workflows/test-hermes-v1.yml
@@ -0,0 +1,39 @@
+# This jobs runs every day 2 hours after the nightly job for React Native so we can verify how the nightly is behaving.
+name: Check Hermes V1 with the nightly build
+
+on:
+ workflow_dispatch:
+ # nightly build @ 4:15 AM UTC
+ schedule:
+ - cron: '15 4 * * *'
+
+concurrency:
+ group: ${{ github.workflow }}-${{ github.event_name }}-${{ github.ref }}
+ cancel-in-progress: true
+
+jobs:
+ check-nightly:
+ runs-on: ubuntu-latest
+ if: github.repository == 'facebook/react-native'
+ steps:
+ - name: Checkout
+ uses: actions/checkout@v6
+ - name: Check nightly
+ run: |
+ TODAY=$(date "+%Y%m%d")
+ echo "Checking nightly for $TODAY"
+ NIGHTLY="$(npm view react-native | grep $TODAY)"
+ if [[ -z $NIGHTLY ]]; then
+ echo 'Nightly job failed.'
+ exit 1
+ else
+ echo 'Nightly Worked, All Good!'
+ fi
+
+ test-hermes-v1-ios:
+ uses: ./.github/workflows/test-hermes-v1-ios.yml
+ needs: check-nightly
+
+ test-hermes-v1-android:
+ uses: ./.github/workflows/test-hermes-v1-android.yml
+ needs: check-nightly
diff --git a/.github/workflows/validate-dotslash-artifacts.yml b/.github/workflows/validate-dotslash-artifacts.yml
new file mode 100644
index 000000000000..c1baac14097d
--- /dev/null
+++ b/.github/workflows/validate-dotslash-artifacts.yml
@@ -0,0 +1,51 @@
+name: Validate DotSlash Artifacts
+
+on:
+ workflow_dispatch:
+ release:
+ types: [published]
+ push:
+ branches:
+ - main
+ paths:
+ - packages/debugger-shell/bin/react-native-devtools
+ - "scripts/releases/**"
+ - package.json
+ - yarn.lock
+ pull_request:
+ branches:
+ - main
+ paths:
+ - packages/debugger-shell/bin/react-native-devtools
+ - "scripts/releases/**"
+ - package.json
+ - yarn.lock
+ # Same time as the nightly build: 2:15 AM UTC
+ schedule:
+ - cron: "15 2 * * *"
+
+jobs:
+ validate-dotslash-artifacts:
+ runs-on: ubuntu-latest
+ if: github.repository == 'facebook/react-native'
+ steps:
+ - name: Checkout repository
+ uses: actions/checkout@v6
+ with:
+ fetch-depth: 0
+ fetch-tags: true
+ - name: Setup node.js
+ uses: ./.github/actions/setup-node
+ - name: Install dependencies
+ uses: ./.github/actions/yarn-install
+ - name: Configure Git
+ shell: bash
+ run: |
+ git config --local user.email "bot@reactnative.dev"
+ git config --local user.name "React Native Bot"
+ - name: Validate DotSlash artifacts
+ uses: actions/github-script@v8
+ with:
+ script: |
+ const {validateDotSlashArtifacts} = require('./scripts/releases/validate-dotslash-artifacts.js');
+ await validateDotSlashArtifacts();
diff --git a/.gitignore b/.gitignore
index 8533677fca9d..dd5a1d4431db 100644
--- a/.gitignore
+++ b/.gitignore
@@ -133,6 +133,7 @@ vendor/
# Swift Package build folder
/packages/react-native/.build
/packages/react-native/.swiftpm
+/packages/react-native/React/includes/
# @react-native/codegen
/packages/react-native/React/FBReactNativeSpec/
@@ -175,6 +176,3 @@ fix_*.patch
# [Experimental] Generated TS type definitions
/packages/**/types_generated/
-
-/packages/debugger-shell/build/
-/packages/*/dist/
diff --git a/CHANGELOG-0.6x.md b/CHANGELOG-0.6x.md
index 8e4e433af8e3..9cf3b2b4018f 100644
--- a/CHANGELOG-0.6x.md
+++ b/CHANGELOG-0.6x.md
@@ -606,7 +606,7 @@ This file contains all changelogs for releases in the 0.60-0.69 range. Please ch
- Fix crash on ReactEditText with AppCompat 1.4.0 ([e21f8ec349](https://github.com/facebook/react-native/commit/e21f8ec34984551f87a306672160cc88e67e4793) by [@cortinico](https://github.com/cortinico))
- Do not .lowerCase the library name when codegenerating TurboModule Specs ([28aeb7b865](https://github.com/facebook/react-native/commit/28aeb7b8659b38ee3a27fae213c4d0800f4d7e31) by [@cortinico](https://github.com/cortinico))
- Enable hitSlop to be set using a single number. ([a96bdb7154](https://github.com/facebook/react-native/commit/a96bdb7154b0d8c7f43977d8a583e8d2cbdcb795) by [@javache](https://github.com/javache))
-- Updated TextInput prop types to accomodate for new autoComplete values ([9eb0881c8f](https://github.com/facebook/react-native/commit/9eb0881c8fecd0e974b1cb9f479bad3075854340) by [@TheWirv](https://github.com/TheWirv))
+- Updated TextInput prop types to accommodate for new autoComplete values ([9eb0881c8f](https://github.com/facebook/react-native/commit/9eb0881c8fecd0e974b1cb9f479bad3075854340) by [@TheWirv](https://github.com/TheWirv))
- Don't reconstruct app components https://github.com/facebook/react-native/issues/25040 ([fc962c9b6c](https://github.com/facebook/react-native/commit/fc962c9b6c4bf9f88decbe014ab9a9d5c1cf51bc) by [@Somena1](https://github.com/Somena1))
- Do NOT skip the first child view in the scroll view group when measuring the lower and upper bounds for snapping. ([61e1b6f86c](https://github.com/facebook/react-native/commit/61e1b6f86cf98d8a74eeb9353143fe0c624fe6e6) by [@ryancat](https://github.com/ryancat))
- Fix crash when a Switch is initialised with both backgroundColor and thumbColor. ([456cf3db14](https://github.com/facebook/react-native/commit/456cf3db14c443c483d63aa97c88b45ffd25799b) by [@smarki](https://github.com/smarki))
diff --git a/CHANGELOG-0.7x.md b/CHANGELOG-0.7x.md
index fa8de8fe9d7d..6058d5ccfe24 100644
--- a/CHANGELOG-0.7x.md
+++ b/CHANGELOG-0.7x.md
@@ -1,5 +1,14 @@
# Changelog (pre 0.80)
+## v0.79.7
+
+### Fixed
+
+#### Android specific
+
+- **Layout:** Make missing parent view state in updateLayout a soft error ([56ad8d9bfd](https://github.com/facebook/react-native/commit/56ad8d9bfd08ea70bc6f5726a2b4a6afb6d2d7c2) by [@javache](https://github.com/javache))
+- **Layout:** Make missing parent view state in updateLayout a soft error ([f2e47d8dab](https://github.com/facebook/react-native/commit/f2e47d8dabcd61621ea81c86cd1e2488948c4229) by [@cipolleschi](https://github.com/cipolleschi))
+
## v0.79.6
### Added
diff --git a/CHANGELOG.md b/CHANGELOG.md
index d79913fa8142..c55b794917d8 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,602 @@
# Changelog
+## v0.84.0-rc.1
+
+### Breaking
+
+#### iOS specific
+
+- Make Hermes V1 the default engine for iOS ([f140c4906b](https://github.com/facebook/react-native/commit/f140c4906b286a85772d0b7d97eecd0798805fcd) by [@cipolleschi](https://github.com/cipolleschi))
+
+### Fixed
+
+- Fixed missing dependency breaking `react-native config` in pnpm setups ([5c43ed2348](https://github.com/facebook/react-native/commit/5c43ed2348d1a0123164f5246aa4a85f909c5560) by [@tido64](https://github.com/tido64))
+
+#### Android specific
+
+- Handle `unstable_path` query param in asset URLs ([42986f27a0](https://github.com/facebook/react-native/commit/42986f27a0285e501f71cf5cedacedefdc44c74e) by [@tido64](https://github.com/tido64))
+
+## v0.84.0-rc.0
+
+### Breaking
+
+- Bump minimum Node.js version to v22.11 ([8f10b339d4](https://github.com/facebook/react-native/commit/8f10b339d48ab3ee6a121e435b380cbe5f5fe36e) by [@robhogan](https://github.com/robhogan))
+- Make the TurboModuleBinding constructor private. ([53944eaa6c](https://github.com/facebook/react-native/commit/53944eaa6c99e6c916d7147b1ef7061fc1ce0e58) by [@RSNara](https://github.com/RSNara))
+- Remove TurboCxxModule ([2d6a3236ed](https://github.com/facebook/react-native/commit/2d6a3236ed2b82d8dc1868439ba958c9f888e48a) by [@christophpurrer](https://github.com/christophpurrer))
+- Removed microtask API from JSTimerManager ([60471cb268](https://github.com/facebook/react-native/commit/60471cb268a70546d6ea555d25c90ca47ad3d839) by [@javache](https://github.com/javache))
+- Remove CxxModule 2/2 C++ part ([a945cd99fa](https://github.com/facebook/react-native/commit/a945cd99fa106bcf327cb90c3349fb5511703663) by [@christophpurrer](https://github.com/christophpurrer))
+- Remove CxxModule 1/2 Java/Kotlin part ([75a11703a0](https://github.com/facebook/react-native/commit/75a11703a0baa0f3b48f977d5ca861eb177c5ab5) by [@christophpurrer](https://github.com/christophpurrer))
+- Remove CxxModule support from CatalystInstance ([c726c27537](https://github.com/facebook/react-native/commit/c726c27537d5fe81f3eeeef9a181888fcf1bb2c1) by [@christophpurrer](https://github.com/christophpurrer))
+- Remove RCTCxxModule ([2c8a376c47](https://github.com/facebook/react-native/commit/2c8a376c47cd112b765ef5b4003751875ba9a4b0) by [@christophpurrer](https://github.com/christophpurrer))
+
+#### Android specific
+
+- Remove unstable_shouldEnableLegacyModuleInterop() ([e4eb64d6cc](https://github.com/facebook/react-native/commit/e4eb64d6cc4ca8834f94d5262f52ac0f099d75a3) by [@RSNara](https://github.com/RSNara))
+- Delete deprecated NativeKind class from React Native Android ([284d841b3d](https://github.com/facebook/react-native/commit/284d841b3d82ff102ff0d839216212e7d6acccea) by [@mdvacca](https://github.com/mdvacca))
+- Remove unnecessary classes inside `com.facebook.react.uimanager.layoutanimation` used in legacy architecture ([0b09e6f696](https://github.com/facebook/react-native/commit/0b09e6f6968240f43db5fec8f2ff7dc1e8d8d7db) by [@cortinico](https://github.com/cortinico))
+- Remove unnecessary `LazyReactPackage` used in legacy architecture ([2b09ae8992](https://github.com/facebook/react-native/commit/2b09ae8992bde33e32e8241792b125449bd4365b) by [@cortinico](https://github.com/cortinico))
+- Remove unused internal `NotThreadSafeBridgeIdleDebugListener` ([0ee4a2d01a](https://github.com/facebook/react-native/commit/0ee4a2d01a7abac197851d648260a7a34648c59d) by [@cortinico](https://github.com/cortinico))
+- Remove unused internal `NotThreadSafeViewHierarchyUpdateDebugListener` ([991dff2322](https://github.com/facebook/react-native/commit/991dff2322eb5d36af4c493e0ad8531d8015c2dc) by [@cortinico](https://github.com/cortinico))
+
+#### iOS specific
+
+- Remove legacy arch by default ([c7f433a413](https://github.com/facebook/react-native/commit/c7f433a4130a04ff1fd765565f3b1bd030031767) by [@cipolleschi](https://github.com/cipolleschi))
+- Make `RCTPackagerConnection` instance of the `RCTDevSettings` and use bundle config. ([cf92cade49](https://github.com/facebook/react-native/commit/cf92cade4938518169aa52a12960d2d04501b78e) by [@coado](https://github.com/coado))
+
+### Added
+
+- A new test for the AnimationBackend ([8bc6214284](https://github.com/facebook/react-native/commit/8bc62142845960d53145bd350e632c7b28e32746) by Bartlomiej Bloniarz)
+- Added support for `maxWidth`, `maxHeight`, `minWidth`, and `minHeight` props to the AnimationBackend. ([3650ae3d08](https://github.com/facebook/react-native/commit/3650ae3d08755975287b7feffb10a85d0f8192fe) by [@coado](https://github.com/coado))
+- Added support for flex props to the AnimationBackend. ([33b2d6d367](https://github.com/facebook/react-native/commit/33b2d6d367f9236fa32a349203e0a6a003757437) by [@coado](https://github.com/coado))
+- Support parsing `Readonly` for the new Flow utility types ([a6b76c0c51](https://github.com/facebook/react-native/commit/a6b76c0c51bf37a864b88d48775afbc1143eebde) by [@marcoww6](https://github.com/marcoww6))
+- Support parsing `ReadonlyArray` for the new Flow utility types ([3bf7a09ecb](https://github.com/facebook/react-native/commit/3bf7a09ecba3fe9ed62631e29c192d7a64d43f1e) by [@marcoww6](https://github.com/marcoww6))
+- Added support for outline props to the AnimationBackend. ([4de9242e80](https://github.com/facebook/react-native/commit/4de9242e809a5ddef26c1c96f85f046309d4a9ba) by [@coado](https://github.com/coado))
+- Added support for filter props to Animation Backend ([e744329c3d](https://github.com/facebook/react-native/commit/e744329c3dc002ecd689e925974f62b0c00b61e0) by [@coado](https://github.com/coado))
+- Added support for border width props to the animation backend. ([782dc0e038](https://github.com/facebook/react-native/commit/782dc0e0381150ee8c7114944d210baf96ba7a6b) by [@coado](https://github.com/coado))
+- Add ResourceReceivedData trace events for network data chunks in Performance timeline ([c400b88ebf](https://github.com/facebook/react-native/commit/c400b88ebf749b00741a6abcce39007bff5ee4cb) by [@emily8rown](https://github.com/emily8rown))
+- Added support for positional `left`, `top`, `right`, `bottom` props to the animation backend. ([9931aeb830](https://github.com/facebook/react-native/commit/9931aeb8302686ce97b3590f1e2e1a2442c77859) by [@coado](https://github.com/coado))
+- Added support for margin and padding props to AnimationBackend. ([cd4744cb98](https://github.com/facebook/react-native/commit/cd4744cb985bb7f08ce94db7d41788cbf9ba2bd8) by [@coado](https://github.com/coado))
+- Added missing `experimental_backgroundSize`, `experimental_backgroundPosition`, `experimental_backgroundRepeat` to manually written types. ([37bf285836](https://github.com/facebook/react-native/commit/37bf285836f5cb0addd2acb0dbe6b85a706f9ab5) by [@tjzel](https://github.com/tjzel))
+- Added support for `shadowColor`, `shadowOffset`, `shadowOpacity`, and `shadowRadius` props to the animation backend. ([c31a5a8896](https://github.com/facebook/react-native/commit/c31a5a8896e31007ee76b7732564806af63a2ff1) by [@coado](https://github.com/coado))
+- Export `usePressability` hook and `PressabilityConfig`/`PressabilityEventHandlers` types from the public API ([d0e9b9c078](https://github.com/facebook/react-native/commit/d0e9b9c07858f140d9da97c080d47c833a82acae) by [@natew](https://github.com/natew))
+- Added missing standard properties to `URL` (hash, host, pathname, etc.) and methods to `URLSearchParams` (get, set, delete, etc.). ([f97b9a521d](https://github.com/facebook/react-native/commit/f97b9a521d6a1cd6141c39253267d26f4d0b359f) by Manish Balayan)
+- Use the commit hook to reconcile the UI updates with react ([d04e1528da](https://github.com/facebook/react-native/commit/d04e1528da262968a5e6e5fe0194dcd277552938) by Bartlomiej Bloniarz)
+- Add `connectAnimatedNodeToShadowNodeFamily` method to `NativeAnimatedModule` and `NativeAnimatedTurboModule` ([d7ef651c5c](https://github.com/facebook/react-native/commit/d7ef651c5cbfdd8a7289746d1afbe2c63bb61a83) by Bartlomiej Bloniarz)
+- Added support for transform, border radius, and background color props to Animation Backend. ([e167faa449](https://github.com/facebook/react-native/commit/e167faa4494e03073dc9fc53581fad532cc3f1ee) by [@coado](https://github.com/coado))
+- Bundle support for heic and heif files ([f472ef980a](https://github.com/facebook/react-native/commit/f472ef980a19fc710baf6203a67c72d73b378fed) by [@anthonybajoua](https://github.com/anthonybajoua))
+- Thread down rootTag/surfaceId to AnimatedInterpolation node ([b46427a673](https://github.com/facebook/react-native/commit/b46427a67399874bd827658191898eeffcc9e56e) by [@zeyap](https://github.com/zeyap))
+- DevServer fast refresh banners now have a dismiss button but still tap anywhere to dismiss. ([fcd63032d0](https://github.com/facebook/react-native/commit/fcd63032d029cf9ec31605e9be4bb63d5e44ce1e) by [@emily8rown](https://github.com/emily8rown))
+- Jest tests for PlatformColor support ([cbbba7b9a5](https://github.com/facebook/react-native/commit/cbbba7b9a5cf81d5454f13dbf399a4c35d7d6667) by [@zeyap](https://github.com/zeyap))
+- (js part) Support PlatformColor type of toValue and interpolation outputRange ([8b6b47bd57](https://github.com/facebook/react-native/commit/8b6b47bd57f5b3d47d729c335c304b4c744576d7) by [@zeyap](https://github.com/zeyap))
+- Expose methods for registering packager connection handlers. ([d9842fdbe3](https://github.com/facebook/react-native/commit/d9842fdbe32a4c6eeae7cbca92f0f1706d9004ce) by [@coado](https://github.com/coado))
+- Add support for Flat Config (eslint v9) ([18592451de](https://github.com/facebook/react-native/commit/18592451de8106071473a898cbc4b6d4efc7814b) by [@pipopotamasu](https://github.com/pipopotamasu))
+- UIManagerNativeAnimatedDelegateBackendImpl for running animation frame updates on android ([219c2b84c2](https://github.com/facebook/react-native/commit/219c2b84c284f162f2f261a09b5a94d197408357) by Bartlomiej Bloniarz)
+
+#### Android specific
+
+- Add `{add|remove}SchemeChangeListener()` function to `OverrideColorScheme` interface to support dynamic appearance updates via override ([80e384a801](https://github.com/facebook/react-native/commit/80e384a8011762f571ff6f47b6674de00aab0485) by [@alanleedev](https://github.com/alanleedev))
+- Include activeHitPath in payload when it's PointerUp/Down ([1d6d8fc058](https://github.com/facebook/react-native/commit/1d6d8fc058bbfbc529ddfa65a0d7658eeca75332) by [@zeyap](https://github.com/zeyap))
+- Add onKeyDown/onKeyUp support to Android ([79b09ce9c4](https://github.com/facebook/react-native/commit/79b09ce9c416ed2b9ac5e168579150dd26823673) by [@Abbondanzo](https://github.com/Abbondanzo))
+- Add c++ animated support for PlatformColor type of toValue and interpolation outputRange ([7941a621f9](https://github.com/facebook/react-native/commit/7941a621f955d6b62e7a359de67cd3b375c45d9b) by [@zeyap](https://github.com/zeyap))
+
+#### iOS specific
+
+- Allow invalidateDisplayLink on RCTAnimatedModuleProvider ([7c603ee261](https://github.com/facebook/react-native/commit/7c603ee261c3eb2d9bf160505427ba06607d3465) by [@zeyap](https://github.com/zeyap))
+- Add support for UIAccessibilityPriority in announcements ([4851fb2fc3](https://github.com/facebook/react-native/commit/4851fb2fc30c45da496bb982d13568767ddbad02) by [@maxencehenneron](https://github.com/maxencehenneron))
+- Added documentation for the prebuild scripts for precompiling React Native Core and React Native Dependencies. ([7a66582f60](https://github.com/facebook/react-native/commit/7a66582f60a743834a96101476dc6b54786b68a2) by [@chrfalch](https://github.com/chrfalch))
+- Add new `RCTBundleConfiguration` for modifying bundle URL on `RCTReactNativeFactory`. ([6fa75cce48](https://github.com/facebook/react-native/commit/6fa75cce48f4f3dc631c181a25a9401a2bf88eeb) by [@coado](https://github.com/coado))
+
+### Changed
+
+- Sync React 19.2.3 into React Native ([e6923dd1e1](https://github.com/facebook/react-native/commit/e6923dd1e1dbcab0cb9f7441331b99071663c55a) by [@cipolleschi](https://github.com/cipolleschi))
+- AnimatedPropsRegistry now also receive the updates from the synchronous updates that bypass the ShadowTree, so that these updates are not overwritten by React commits ([c52d30e79b](https://github.com/facebook/react-native/commit/c52d30e79b680db15bd2d39b74e4e1f38bb00649) by Bartlomiej Bloniarz)
+- C++ animated now passes the calculated `folly::dynamic` directly to the backend, without repacking it into `AnimatedProp` ([84e408cf89](https://github.com/facebook/react-native/commit/84e408cf89eb537439dc99db95d33df3c2a9394a) by Bartlomiej Bloniarz)
+- Extracted `cloneProp` from `AnimationBackend.cpp` to `AnimatedProps.h` ([33f783ae23](https://github.com/facebook/react-native/commit/33f783ae23dca139900767108b2ad4390ea865ca) by Bartlomiej Bloniarz)
+- CloneMultiple now invokes the callback for every cloned node, instead of doing that only for the nodes in `familiesToUpdate` ([976c849057](https://github.com/facebook/react-native/commit/976c849057ec6056727ffa71cac0d0c0a513a97e) by Bartlomiej Bloniarz)
+- Text components with onPress or onLongPress now automatically get accessibilityRole='link' for proper accessibility support ([4c732b4ccf](https://github.com/facebook/react-native/commit/4c732b4ccf2f5c458640f8024759f5f57877749e) by [@fabriziocucci](https://github.com/fabriziocucci))
+- Split the families by `SurfaceId` in `onAnimationFrame` ([5c078bd490](https://github.com/facebook/react-native/commit/5c078bd4905615b0fb3a640e81e53d594f195ca6) by Bartlomiej Bloniarz)
+- Move the animation backend callback scheduling, behind the `isRenderCallbackStarted` check. ([8b95fce84e](https://github.com/facebook/react-native/commit/8b95fce84ea0a7fef79e78582a8717e403fa7349) by Bartlomiej Bloniarz)
+- JSBigString mutable data accessor has been renamed to mutableData ([3012aac2ad](https://github.com/facebook/react-native/commit/3012aac2adc04659d6b882e910b1ecf14c8e5225) by [@javache](https://github.com/javache))
+
+#### Android specific
+
+- `VirtualView` not clips subviews even if its parent `ScrollView` does not have `removeClippedSubviews` enabled. ([b0e754bc7f](https://github.com/facebook/react-native/commit/b0e754bc7f7b55c13b7632d354aaf3ee48f7296d) by [@yungsters](https://github.com/yungsters))
+- Set isClickable=true by default or based on the pointerEvents value for all views to improve accessibility tool detection while maintaining the configured focusable state ([427995858d](https://github.com/facebook/react-native/commit/427995858d604ab749d4b550a91be19c60cbf840) by [@fabriziocucci](https://github.com/fabriziocucci))
+- Enabled shouldUseLinkRoleForPressableText and shouldSetEnabledBasedOnAccessibilityState feature flags by default to improve accessibility behavior. ([38e3075310](https://github.com/facebook/react-native/commit/38e3075310e2e0bc062406a06bfcdc232fe6100f) by [@fabriziocucci](https://github.com/fabriziocucci))
+
+#### iOS specific
+
+- Use prebuild by default ([df9d31b243](https://github.com/facebook/react-native/commit/df9d31b2435255f799aa024ffb0f87bcdb665645) by [@cipolleschi](https://github.com/cipolleschi))
+- Add `RCTBundleConfiguration` property on `RCTReactNativeFactory` and pass it down to `RCTHost`. ([5465a511f4](https://github.com/facebook/react-native/commit/5465a511f4c23692371ebe5756d260281386520a) by [@coado](https://github.com/coado))
+- Allow linking local SPM packages in CocoaPods ([d31fc32882](https://github.com/facebook/react-native/commit/d31fc328826a584a2351acf831ee987846ca7e21) by [@sbuggay](https://github.com/sbuggay))
+
+### Deprecated
+
+- Deprecate TurboModuleProviderFunctionType ([7a6a6ae2e6](https://github.com/facebook/react-native/commit/7a6a6ae2e63f907f95764e52bf958897462a5c8b) by [@RSNara](https://github.com/RSNara))
+- Deprecate `XHRInterceptor` and `WebSocketInterceptor` APIs. Developer tools should use the CDP `Network` domain instead. ([41380f39ab](https://github.com/facebook/react-native/commit/41380f39aba22913a2aa45a951a36cacc95fb57a) by [@huntie](https://github.com/huntie))
+
+### Removed
+
+- Remove Babel preset transforms for already-unsupported non-Hermes engines ([07bd24ed0d](https://github.com/facebook/react-native/commit/07bd24ed0dbd11e77743086a970b9e7507e15c8f) by [@robhogan](https://github.com/robhogan))
+- Legacy Arch: Remove Perf and Network tabs from in-app Element Inspector. See [RFC0777](https://github.com/react-native-community/discussions-and-proposals/blob/main/proposals/0777-remove-legacy-element-inspector-features.md) ([b7ca04844d](https://github.com/facebook/react-native/commit/b7ca04844d689116692c16fce251f3270250854e) by [@huntie](https://github.com/huntie))
+
+#### Android specific
+
+- Remove unnecessary `OnBatchCompleteListener` used in Legacy Architecture ([1bdd2a0aba](https://github.com/facebook/react-native/commit/1bdd2a0abac4ab2c420cadbf8796e44471201f06) by [@cortinico](https://github.com/cortinico))
+- Remove unnecessary and unused BridgeDevSupportManager ([13da82a337](https://github.com/facebook/react-native/commit/13da82a337826ac30fd2d4b581d963f5b872381b) by [@cortinico](https://github.com/cortinico))
+
+### Fixed
+
+- Added handling of missing props to `AnimatedPropsRegistry` ([31a9eeeba4](https://github.com/facebook/react-native/commit/31a9eeeba4d7c4790133f41df48b16aff6920601) by [@j-piasecki](https://github.com/j-piasecki))
+- Handle `Object.create(null)` correctly in AnimatedObject.js' `isPlainObject` function ([4e0b9233c0](https://github.com/facebook/react-native/commit/4e0b9233c0242f46239f0f8b21f82b4cbd5ba781) by [@maman](https://github.com/maman))
+- Hash generation includes `declare const` types in API snapshot ([c36665f7c6](https://github.com/facebook/react-native/commit/c36665f7c658c641cf1b6cca890415bdb149a623) by [@emily8rown](https://github.com/emily8rown))
+- Nullcheck result of getAnimatedNode in NativeAnimatedNodesManager::updateNodes ([3e9083b423](https://github.com/facebook/react-native/commit/3e9083b4234eabfd4f3444c6b6804c66389739a5) by [@zeyap](https://github.com/zeyap))
+- React Native DevTools: Fix a bug where we would incorrectly flag apps using additonal Hermes runtimes (e.g. Reanimated) as being multi-host ([c800503214](https://github.com/facebook/react-native/commit/c8005032140f1aff16027b5ed53caea6c9d299f5) by [@huntie](https://github.com/huntie))
+- Fixed `hermes-compiler` not being resolved correctly when your repo is set up as a monorepo using pnpm. ([e23e9add80](https://github.com/facebook/react-native/commit/e23e9add8080a0204221edd4d8cc5e2f1a2f621b) by [@tido64](https://github.com/tido64))
+- Ensure codegen CLI supports unspecified `--outputPath` argument and respects `codegenConfig.outputDir` configurations ([716303362a](https://github.com/facebook/react-native/commit/716303362aead08310e2101f15a319b64a602026) by [@kitten](https://github.com/kitten))
+- Fixed an `ENOENT` exception when a dependency does not export `package.json`, and your repo is set up as a monorepo using pnpm ([20550c45d2](https://github.com/facebook/react-native/commit/20550c45d276a9cb348116a24cddc20415449e0e) by [@tido64](https://github.com/tido64))
+- Fixed URLSearchParams duplicate issue. ([1e06c92404](https://github.com/facebook/react-native/commit/1e06c9240407611558f4905117335e792446125f) by [@riteshshukla04](https://github.com/riteshshukla04))
+- Check nodesManager_ in AnimatedModule::executeOperation ([199b8982de](https://github.com/facebook/react-native/commit/199b8982de55a470a05efb27b63e55365e5e9997) by [@zeyap](https://github.com/zeyap))
+- `color` and `blurRadius` of BoxShadowValue mistakenly swapped ([8fa8fb7a52](https://github.com/facebook/react-native/commit/8fa8fb7a5265dc879106dbec6ec0232268910c56) by [@Phecda](https://github.com/Phecda))
+
+#### Android specific
+
+- Fix BackHandler callbacks not working after app resume on API 36+ ([fef5b84996](https://github.com/facebook/react-native/commit/fef5b8499667f980c7ad7fe7400c3316722b90ba) by [@anferrat](https://github.com/anferrat))
+- Fix `ReactModalHostView` hover interception to call `super.onInterceptHoverEvent` instead of `super.onHoverEvent`. ([0fe23d7066](https://github.com/facebook/react-native/commit/0fe23d70660db0f97cec0a68a545ace8ee780666) by [@MegaManSec](https://github.com/MegaManSec))
+- DevSupport - fix small bugs with Host change dialog ([c4c587e5c3](https://github.com/facebook/react-native/commit/c4c587e5c3ce4c9d4bdcb9dd95b28cf222bdadee) by [@cortinico](https://github.com/cortinico))
+- Fix jni aborts when turbomodule constructors throw ([d67fc70497](https://github.com/facebook/react-native/commit/d67fc704978ec258b732d61f197d4faa6a784a9c) by [@RSNara](https://github.com/RSNara))
+- Make ReactDelegate.onBackPressed() return correct status ([17b3c1c698](https://github.com/facebook/react-native/commit/17b3c1c69877b674b61904ebec5b3a46d6075233) by [@RSNara](https://github.com/RSNara))
+- RNGP using node invocation non-compatible with Gradle Compilation Cache ([dd1f83e616](https://github.com/facebook/react-native/commit/dd1f83e61656f21769bd66b28a4c389d6ec31a72) by [@tjzel](https://github.com/tjzel))
+- RNGP using node invocation non-compatible with Gradle Compilation Cache ([dc73ec438a](https://github.com/facebook/react-native/commit/dc73ec438a00c17d3fe338db45919cf371828a3b) by [@tjzel](https://github.com/tjzel))
+- Fix text clipping on Android 15+ due to useBoundsForWidth change ([8347cc4b50](https://github.com/facebook/react-native/commit/8347cc4b50ca9229b638d0823d3148fed50b9a61) by [@chrfalch](https://github.com/chrfalch))
+- A11y: Mark virtual views for links as [`clickable`](https://developer.android.com/reference/android/view/accessibility/AccessibilityNodeInfo#setClickable(boolean%29) ([a9a0268953](https://github.com/facebook/react-native/commit/a9a02689533f9cf30fc20cfc7be1ade4f4a624da) by Tom Scallon)
+- Fixed `adjustsFontSizeToFit` scaling the font size too much down ([253fdf4753](https://github.com/facebook/react-native/commit/253fdf475365f6ad7c7c7ba17098589cf18a5c3e) by [@j-piasecki](https://github.com/j-piasecki))
+- Use FQCN to avoid collisions ([5bb3a6d68d](https://github.com/facebook/react-native/commit/5bb3a6d68db113d49528848df8704c5adeb1eba8) by [@riteshshukla04](https://github.com/riteshshukla04))
+- Allow nullable `code` in `Promise.reject` to prevent NPEs from Java modules ([47c45688c7](https://github.com/facebook/react-native/commit/47c45688c7db5aa8da512928b1d5b216b46fc8c6) by [@ramanverse](https://github.com/ramanverse))
+- A11y: prevent redundant double screen reader focus steps on `` ([06786a8afa](https://github.com/facebook/react-native/commit/06786a8afa037296c3f779eab7779a2af42fe294) by [@mdjastrzebski](https://github.com/mdjastrzebski))
+- Emit scroll event once on overscrolled ([f60789abac](https://github.com/facebook/react-native/commit/f60789abac75ad4d1feaadff3fed0b8796a4f8ef) by [@zeyap](https://github.com/zeyap))
+- Fix isClickable state for TextViews after recycling ([cf3af8bf4a](https://github.com/facebook/react-native/commit/cf3af8bf4ac99f8671036addeb60df101197d5b7) by [@fabriziocucci](https://github.com/fabriziocucci))
+- Fix isClickable state for TextViews based on onClickListener ([9ec41774b9](https://github.com/facebook/react-native/commit/9ec41774b942014e3c06c3a1f30bb3b6c0fc2de8) by [@fabriziocucci](https://github.com/fabriziocucci))
+- Fixed recycled TextViews incorrectly appearing as clickable to accessibility systems ([b34e9c542d](https://github.com/facebook/react-native/commit/b34e9c542d494e704f45b6b950c6f23d86bb326f) by [@fabriziocucci](https://github.com/fabriziocucci))
+- – Enabled shouldResetOnClickListenerWhenRecyclingView by default to reset OnClickListener to null when recycling views and prevent accessibility tools from detecting incorrect states. ([21b93d82df](https://github.com/facebook/react-native/commit/21b93d82df560f31fde9405184399630cbfa437b) by [@fabriziocucci](https://github.com/fabriziocucci))
+- Enabled shouldResetClickableWhenRecyclingView by default to reset isClickable to false when recycling views and prevent accessibility tools from detecting incorrect clickable states. ([a2e8bac60f](https://github.com/facebook/react-native/commit/a2e8bac60f343f4e28abd50fad0f89ecd18afc61) by [@fabriziocucci](https://github.com/fabriziocucci))
+- Fix NPE on ReactAccessibilityDelegate.performAccessibilityAction ([cf6de77408](https://github.com/facebook/react-native/commit/cf6de774088f87304080755a8110999ed88b9556) by [@cortinico](https://github.com/cortinico))
+- Reset isClickable when recycling views to prevent accessibility tools from detecting incorrect state ([d553c31160](https://github.com/facebook/react-native/commit/d553c31160294e6094b96f706f07d06a589da79b) by [@fabriziocucci](https://github.com/fabriziocucci))
+- Reset OnClickListener when recycling views to prevent accessibility tools from detecting incorrect state ([52a4f4b83d](https://github.com/facebook/react-native/commit/52a4f4b83dec615d2d6d67854aed42930682f708) by [@fabriziocucci](https://github.com/fabriziocucci))
+- Fixed antialiasing issues from border radius usage in API <= 28 ([e08abbcb99](https://github.com/facebook/react-native/commit/e08abbcb99270381c94145a33476f51684dffd93) by [@Abbondanzo](https://github.com/Abbondanzo))
+- View.setEnabled() now properly reflects accessibilityState.disabled ([6fbe284082](https://github.com/facebook/react-native/commit/6fbe284082aa603c44df5edba9d86f8519b7dbf0) by [@fabriziocucci](https://github.com/fabriziocucci))
+- Fix android_ripple not working with foreground: false in Pressable components ([ca077c6bf8](https://github.com/facebook/react-native/commit/ca077c6bf8e1c842857878deb153b1fdbc71b1a2) by [@ish1416](https://github.com/ish1416))
+- Fix keyboard navigation through items in horizontal ScrollView with snapToInterval enabled ([a460df2165](https://github.com/facebook/react-native/commit/a460df216527b1a4435bd72f027565c5fd5e05a3) by [@jgryko5](https://github.com/jgryko5))
+
+#### iOS specific
+
+- Moved setting xcconfig to after `add_rn_core` pod function is called. ([73d3429a44](https://github.com/facebook/react-native/commit/73d3429a44e67745a5c5df5d0a0560a40dbbb430) by [@chrfalch](https://github.com/chrfalch))
+- Fix listenerCount not resetting for RCTEventEmitter ([ac8fa25147](https://github.com/facebook/react-native/commit/ac8fa25147c3ee2cd3fefde79d09e3a8f87b95c1) by [@brainbicycle](https://github.com/brainbicycle))
+- Fix legacy module interop not handling hitTest correctly ([700d320a5f](https://github.com/facebook/react-native/commit/700d320a5f1615a2ae6ea69bcc68b645a2cd4618) by [@kruczy](https://github.com/kruczy))
+- Accessibility actions labels are not read by VoiceOver ([602a2d213a](https://github.com/facebook/react-native/commit/602a2d213a735e43c92edff3e2357085fa0d3af7) by [@maxencehenneron](https://github.com/maxencehenneron))
+- Respect `cancelsTouchesInView` when canceling touches in `RCTSurfaceTouchHandler` ([5634e8a601](https://github.com/facebook/react-native/commit/5634e8a601caf0faa174bac3511929de767609ac) by [@intmain](https://github.com/intmain))
+- Remove redundant gesture to tap button when the layer beneath is already tappable ([8b8cceac89](https://github.com/facebook/react-native/commit/8b8cceac89a5962fb2bc52025702f2c023d41055) by [@emily8rown](https://github.com/emily8rown))
+- Make rest of app responsive whilst dev loading banner present ([f97354368c](https://github.com/facebook/react-native/commit/f97354368ccdb5e72e5c233e90cd2a9755ffcf7f) by [@emily8rown](https://github.com/emily8rown))
+- Fixed dismiss button not appearing consistently in dev loading view ([336042ccb3](https://github.com/facebook/react-native/commit/336042ccb30903ee3e16ffbf9e100bb5ad3cf7e3) by [@emily8rown](https://github.com/emily8rown))
+- Fixed copying symbol bundles into correct slice folder ([ac31e96e49](https://github.com/facebook/react-native/commit/ac31e96e4925b3238ab548c91584a7e608a2e17c) by [@chrfalch](https://github.com/chrfalch))
+- Fixed crash from dismiss button in DevLoadingView ([6793f5cc51](https://github.com/facebook/react-native/commit/6793f5cc516170d1c28e3e762f0b7dd065330b8b) by [@emily8rown](https://github.com/emily8rown))
+- Address `-Wswitch-default` warnings for projects that use that compiler flag ([4c560b118c](https://github.com/facebook/react-native/commit/4c560b118c683c72e9eeebdca473b8ec3cdd7e41) by [@NSProgrammer](https://github.com/NSProgrammer))
+- Avoid reallocating views on RCTDevLoadingView progress updates ([55a5b6b015](https://github.com/facebook/react-native/commit/55a5b6b0156bfe81143caad6b0e69924939045e6) by [@shirakaba](https://github.com/shirakaba))
+- Fix missing default statements for projects that have `-Wswitch-default` enabled (along with `-Wswitch-enum`). ([a210409e03](https://github.com/facebook/react-native/commit/a210409e03c1951ab7c88100c763eff055b88e8a) by [@NSProgrammer](https://github.com/NSProgrammer))
+- Fix crash in RCTEnhancedScrollView when scrollViewDidScroll is called ([5f14001e92](https://github.com/facebook/react-native/commit/5f14001e929426144d1eaa5e5e52fb23a4d4f296) by Gabriel Cadden)
+- Fix undefined behavior for values outside of enum range in generated `switch` methods in Objective-C. ([4bf8204391](https://github.com/facebook/react-native/commit/4bf8204391c6dc4014944bc21c997bdb8a7ef584) by [@NSProgrammer](https://github.com/NSProgrammer))
+- A Crash when some error information are nil ([efd2f679f2](https://github.com/facebook/react-native/commit/efd2f679f2cf054bd1301a1e6e851de5cdc38cc7) by [@cipolleschi](https://github.com/cipolleschi))
+- Improve -Wswitch-default support ([8f91076397](https://github.com/facebook/react-native/commit/8f910763973a5b59b515951d7ec4c4f88d0c3b4d) by [@NSProgrammer](https://github.com/NSProgrammer))
+- Improve -Wswitch-default support ([fedd1cfbda](https://github.com/facebook/react-native/commit/fedd1cfbda093dd9c96ab63ed9c2b8d81b6af1c5) by [@NSProgrammer](https://github.com/NSProgrammer))
+- Fix duplicate shadow bug during component recycling by cleaning up visual layers in prepareForRecycle ([7dcedf1def](https://github.com/facebook/react-native/commit/7dcedf1def880163ab7ca07b2575a8153029a925) by Atharv Soni)
+- Make sure to only call onRender when NativeAnimatedNodesManagerProvider is not destroyed ([d8f9b3f1f5](https://github.com/facebook/react-native/commit/d8f9b3f1f59ebfea17105ea849469cf42325db1a) by [@zeyap](https://github.com/zeyap))
+- Fix rounding error occurring randomly in iOS text line height calculation ([581d643a9e](https://github.com/facebook/react-native/commit/581d643a9e59fd88f93757f80194e1efd11bd0e5) by [@soutua](https://github.com/soutua))
+- Fix incorrect source path resolution in dSYM remapping in precompiled framework scripts ([f383241b19](https://github.com/facebook/react-native/commit/f383241b197f4b98a8fca6bbd948de9ce1a756c9) by [@chrfalch](https://github.com/chrfalch))
+- Set the `CURRENT_ARCH=arm64` on M4 ([b78099b821](https://github.com/facebook/react-native/commit/b78099b821357a5449592c48bd4156e3b7c315dc) by [@ISeekTruth](https://github.com/ISeekTruth))
+- Fixed build with dynamic frameworks ([1033dbd1da](https://github.com/facebook/react-native/commit/1033dbd1da013a07ee5d2a13fadeba9f38fa8426) by [@cipolleschi](https://github.com/cipolleschi))
+- Improve support for projects with `-Wswitch-enum` compiler error ([f687292aad](https://github.com/facebook/react-native/commit/f687292aad20a79d9d8d8a706aa2fec64fe92f4b) by [@NSProgrammer](https://github.com/NSProgrammer))
+
+## v0.83.1
+
+### Fixed
+
+#### Android specific
+
+- **Networking**: Fix Network error that could occur for `FormData` uploads with binary data ([471ef7212e](https://github.com/facebook/react-native/commit/471ef7212e8f7778bb7692a372a58c6fba9d081d) by [@huntie](https://github.com/huntie))
+
+## v0.83.0
+
+### Breaking
+
+None
+
+### Deprecated
+
+#### Android specific
+
+- **Animated**: Mark `startOperationBatch` and `finishOperationBatch` as deprecated, replace with no-op ([c9dcd64ed5](https://github.com/facebook/react-native/commit/c9dcd64ed557d477828549e54afa71a12e5294ec) by [@zeyap](https://github.com/zeyap))
+- **Networking**: Mark `NetworkingModule.sendRequestInternal` as deprecated ([30999b868c](https://github.com/facebook/react-native/commit/30999b868cf1655b6799edfa65dba2cc9fa8161a) by [@motiz88](https://github.com/motiz88))
+
+### Added
+
+- **Accessibility**: Add meaningful error reporting when `AccessibilityInfo`'s methods are not available ([9cadfe6607](https://github.com/facebook/react-native/commit/9cadfe6607159f78bdd45929e0eb9b3292240cb9) by [@vzaidman](https://github.com/vzaidman))
+- **Animated**: `AnimationBackend` initialisation and style updates ([e091759947](https://github.com/facebook/react-native/commit/e09175994759a8868148b4a5d31768e18057d5a4) by [@bartlomiejbloniarz](https://github.com/bartlomiejbloniarz))
+- **Animated**: Make `AnimatedNodesManager` use the backend behind the flag ([325c681cb1](https://github.com/facebook/react-native/commit/325c681cb17996c15b246ad0012cbde3d4631f08) by Bartlomiej Bloniarz)
+- **Animated**: Add `unstable_setAnimationBackend`, `unstable_getAnimationBackend` in UIManager ([7ec470d49a](https://github.com/facebook/react-native/commit/7ec470d49abded215fef260d577b8424207f7fb9) by Bartlomiej Bloniarz)
+- **Dev Server**: Dev server banners can now be closed on tap. On iOS, don't close them after 15s anymore ([6936bd9f6b](https://github.com/facebook/react-native/commit/6936bd9f6bcb4fce5af33442e72992e7aa3767d6) by [@vzaidman](https://github.com/vzaidman))
+- **Fast Refresh**: New banner Add to indicate that Fast Refresh has lost connection, and that the app needs to be restarted to reconnect ([4148746941](https://github.com/facebook/react-native/commit/4148746941f957031dd65fe94481bb3ea6367a47) by [@vzaidman](https://github.com/vzaidman))
+- **IntersectionObserver**: Gate `IntersectionObserver` in the Canary release level ([5119db44ce](https://github.com/facebook/react-native/commit/5119db44ce5b600edc79dd9fe752d6e0a53375f4) by [@lunaleaps](https://github.com/lunaleaps))
+- **JavaScript API**: `ListViewToken` is now exposed when using `"react-native-strict-api"` ([0a0b48b5ff](https://github.com/facebook/react-native/commit/0a0b48b5fff508a1976604bedc931a1b5110a4f2) by [@huntie](https://github.com/huntie))
+- **JavaScript API**: `unstable_NativeText` and `unstable_NativeView` are now exported from the `react-native` package ([90ac3ac7bd](https://github.com/facebook/react-native/commit/90ac3ac7bd2c7f8761d02e503224828f8af97fec) by [@huntie](https://github.com/huntie))
+- **JavaScript API**: Expose `NativeComponentRegistry` API to index.d.ts ([3f7f9d8fb8](https://github.com/facebook/react-native/commit/3f7f9d8fb8beb41408d092870a7c7cac58029a4d) by [@gabrieldonadel](https://github.com/gabrieldonadel))
+- **Performance**: Enable Web Performance APIs ([beccee2164](https://github.com/facebook/react-native/commit/beccee21649eb0353e2828c65f0045053f04c6db) by [@rubennorte](https://github.com/rubennorte))
+- **React Native DevTools**: Enable Network inspection features [66469b58d8](https://github.com/facebook/react-native/commit/66469b58d85e820e401b82028b3fda57c53f08c1) by [@cipolleschi](https://github.com/cipolleschi)
+- **React Native DevTools**: Enable standalone app shell by default (https://github.com/facebook/react-native/commit/3341bb57b188d0e20ac6e9ebb1e8b1fbb6b26514 by [@huntie](https://github.com/huntie))
+- **StyleSheet**: Background image native parser ([a9780f9102](https://github.com/facebook/react-native/commit/a9780f9102800a53e381271bcf27542eaea4a46e) by [@intergalacticspacehighway](https://github.com/intergalacticspacehighway))
+- **StyleSheet**: Merge the [iOS](https://github.com/facebook/react-native/pull/52283) and [android](https://github.com/facebook/react-native/pull/52282) PR into this, this PR includes `BackgroundImageExample`. I have also Add testcases for parsing syntax in JS ([3d08683d0f](https://github.com/facebook/react-native/commit/3d08683d0fcb66cd657e3f72388a53605c7c3974) by [@intergalacticspacehighway](https://github.com/intergalacticspacehighway))
+- **TypeScript**: Add `@react-native/typescript-config/strict` export enabling the `react-native-strict-api` custom condition ([0198c92c71](https://github.com/facebook/react-native/commit/0198c92c714cdfe48bb8d84771e5ef25c17fb47f) by [@kraenhansen](https://github.com/kraenhansen))
+
+#### Android specific
+
+- **Dev Menu**: Add new configuration for `RCTDevMenu` ([4ddf2ce64f](https://github.com/facebook/react-native/commit/4ddf2ce64f8c6886a575c69872273005fd4d90cd) by [@coado](https://github.com/coado))
+- **ReactHost**: Add new `setBundleSource` method to `ReactHost` for changing bundle URL at runtime ([005d705aff](https://github.com/facebook/react-native/commit/005d705aff70e560ac937740798b69582a5b6954) by [@coado](https://github.com/coado))
+- **StyleSheet**: Background size, position and repeat styles ([e859293674](https://github.com/facebook/react-native/commit/e859293674243d94895f710d1cb197e9e6f2e9e8) by [@intergalacticspacehighway](https://github.com/intergalacticspacehighway))
+
+#### iOS specific
+
+- **Build options**: Add way to set the `RCT_REMOVE_LEGACY_ARCH` flag from Cocoapods to compile ou the legacy arch ([5abda9c7da](https://github.com/facebook/react-native/commit/5abda9c7dacc5533fac35675c09100c7120dd634) by [@cipolleschi](https://github.com/cipolleschi))
+- **Build options**: Add support for symbolication of precompiled `React.xcframework` ([07f40ec6b4](https://github.com/facebook/react-native/commit/07f40ec6b48bf4b6507bda5819b873f3a7334dea) by [@chrfalch](https://github.com/chrfalch))
+- **Codegen**: Update Codegen to generate `Package.swift` file for Codegen targets ([a7cd3cc08f](https://github.com/facebook/react-native/commit/a7cd3cc08fd2679bb00666162d91ee2fb7107d06) by [@cipolleschi](https://github.com/cipolleschi))
+- **Dev Menu**: Add new configuration for `RCTDevMenu` ([29d5aa582f](https://github.com/facebook/react-native/commit/29d5aa582ffd6c395e34a1d03d2fdd742df647af) by [@coado](https://github.com/coado))
+- **Font**: Add support for condensed system font when using the New Architecture ([07da2ff3e1](https://github.com/facebook/react-native/commit/07da2ff3e18bbb71f428985f185d5f971843ec26) by [@ismarbesic](https://github.com/ismarbesic))
+- **StyleSheet**: Add contrast and hue-rotate CSS filters ([20ba98e00d](https://github.com/facebook/react-native/commit/20ba98e00da84b629cf2c1b11fa24c28c7046093) by [@intergalacticspacehighway](https://github.com/intergalacticspacehighway))
+- **StyleSheet**: Add grayscale, drop-shadow and saturate CSS filters ([1198a55d50](https://github.com/facebook/react-native/commit/1198a55d50809b9086771fa0b40415dd487afe0f) by [@intergalacticspacehighway](https://github.com/intergalacticspacehighway))
+- **StyleSheet**: Background size, position and repeat styles ([d8c2f1c883](https://github.com/facebook/react-native/commit/d8c2f1c883180828ce2784c4b30565e2bec194cf) by [@intergalacticspacehighway](https://github.com/intergalacticspacehighway))
+- **StyleSheet**: Filter blur ([b365e26593](https://github.com/facebook/react-native/commit/b365e26593112fee8824c53a2787679a29cbe9ab) by [@intergalacticspacehighway](https://github.com/intergalacticspacehighway))
+
+### Changed
+
+- **Animated**: Initialize the backend in `NativeAnimatedNodesManagerProvider` ([3f396616d2](https://github.com/facebook/react-native/commit/3f396616d20beaebeb1fa7ab35deebc195bbcd2b) by Bartlomiej Bloniarz)
+- **Animated**: Move using declarations into `AnimationBackend` class ([9e98c72ad3](https://github.com/facebook/react-native/commit/9e98c72ad34e0124df4ae846381fbc862d87206c) by [@zeyap](https://github.com/zeyap))
+- **Codegen**: Improve Codegen error when iOS native project not found ([bc3503452f](https://github.com/facebook/react-native/commit/bc3503452f70e1f6917070f3a1b00d75bcd46b3f) by [@vonovak](https://github.com/vonovak))
+- **ESLint**: Bump `eslint-plugin-react-hooks` to 7.0.1 ([28101284a9](https://github.com/facebook/react-native/commit/28101284a92ac0c93f646636423e6edf5e830006) by [@cipolleschi](https://github.com/cipolleschi))
+- **Hermes**: Use Hermes artifacts published independently from React Native ([27bb34c006](https://github.com/facebook/react-native/commit/27bb34c006bb5daaac639d065aaa4c963528814e) by [@j-piasecki](https://github.com/j-piasecki))
+- **Metro**: Metro bump to ^0.83.3 ([89f0a37800](https://github.com/facebook/react-native/commit/89f0a3780066e1d74b0cf45ff65a79534638f157) by [@robhogan](https://github.com/robhogan))
+- **React**: Bump React version to 19.2 ([6f482708b5](https://github.com/facebook/react-native/commit/6f482708b5abd31ec12c18afc874420f06eb22e3) by [@cipolleschi](https://github.com/cipolleschi))
+- **React Native DevTools**: Remove network experiment and experimental icon, Add conditional disabling of features incompatible with multiple hosts ([19359ed095](https://github.com/facebook/react-native/commit/19359ed095059c5d6befcc7e2ff3472447680add) by [@huntie](https://github.com/huntie))
+- **Yoga**: Update copyright header in Yoga CMake file from Facebook to Meta ([118a6621f5](https://github.com/facebook/react-native/commit/118a6621f5c4b15d89505b4dc12f05870c042194) by [@aialok](https://github.com/aialok))
+
+#### Android specific
+
+- **Animated**: [c++ animated] Course correct props at `SurfaceMountingManager.updateProps()` ([dae2f606c7](https://github.com/facebook/react-native/commit/dae2f606c76905de74e76db7b0a20052a5caea46) by [@zeyap](https://github.com/zeyap))
+- **Fast Refresh**: Hot reload banner is now displayed in blue background like on iOS ([4d45e5987c](https://github.com/facebook/react-native/commit/4d45e5987c1d85e5f56ae9501ba74eed48939307) by [@vzaidman](https://github.com/vzaidman))
+- **Font**: Request layout on configuration change only when the font scale has changed ([e02e7b1a29](https://github.com/facebook/react-native/commit/e02e7b1a2943b3ec6e1eb15723c86a8255b100a6) by [@j-piasecki](https://github.com/j-piasecki))
+- **Hermes**: Changed value of `HERMESVM_HEAP_HV_MODE` to `HEAP_HV_PREFER32` for Hermes V1 ([fcb51b1392](https://github.com/facebook/react-native/commit/fcb51b13921dea7ed7d478d6944b52df470e2bef) by [@j-piasecki](https://github.com/j-piasecki))
+- **Kotlin**: Migrated `ReactRoot` to Kotlin ([0b14a19ea6](https://github.com/facebook/react-native/commit/0b14a19ea6f0bfd97fc8d3e3663615feab875d66) by [@sbuggay](https://github.com/sbuggay))
+- **New Architecture**: Runtime check that `NewArchitecture` is enabled in `DefaultNewArchitectureEntryPoint` ([d0d08e4554](https://github.com/facebook/react-native/commit/d0d08e4554c2b3a7676793fe2a43cedcf54b523f) by [@cortinico](https://github.com/cortinico))
+- **React Native DevTools**: Add Log error to discourage usages of `getJSModule(RCTEventEmitter)` API ([aab0d3397c](https://github.com/facebook/react-native/commit/aab0d3397c67bb3e27c3607ff2ed240859b5b039) by [@mdvacca](https://github.com/mdvacca))
+- **Touch Handling**: Defer to responder system to terminate on scroll ([1e1af623b1](https://github.com/facebook/react-native/commit/1e1af623b14f7952c2f39a601098533f899bb464) by [@zeyap](https://github.com/zeyap))
+- **UI**: Split `VirtualViewContainerState` into classic, experimental versions [Android] ([793f99d949](https://github.com/facebook/react-native/commit/793f99d949049c7ab9a7991af0a19010d5444b9f) by [@CalixTang](https://github.com/CalixTang))
+
+#### iOS specific
+
+- **Image**: Use `CGImageSourceCreateImageAtIndex` instead of `CGImageSourceCreateThumbnailAtIndex` to decode full-sized images ([be4fcdafb1](https://github.com/facebook/react-native/commit/be4fcdafb13c2cee702bb120b0feb9b5966ca50e) by [@tsapeta](https://github.com/tsapeta))
+- **Prebuild**: Update logging functions for prebuilds ([f0f8b95719](https://github.com/facebook/react-native/commit/f0f8b957190f2f9bf162528210c41f1437346af9) by [@chrfalch](https://github.com/chrfalch))
+
+### Fixed
+
+- **Animated**: Fix array type parsing in `DynamicEventPayload::extractValue` ([cf5040b4f8](https://github.com/facebook/react-native/commit/cf5040b4f82934c075a72b35d5f2d1d0dfa7aac1) by [@zeyap](https://github.com/zeyap))
+- **Babel**: Invalidate transform cache when `react-native/babel-preset` is Update ([2d2011c7ae](https://github.com/facebook/react-native/commit/2d2011c7ae0145369ad226417e9ecc3bf6df7890) by [@robhogan](https://github.com/robhogan))
+- **Build**: Fixed `hermes-compiler` not being resolved correctly when your repo is set up as a monorepo using pnpm (https://github.com/facebook/react-native/commit/45281ba48fc17508539c0b881327ef8b4bf8e530 by [@tido64](https://github.com/tido64))
+- **Codegen**: Fixed an `ENOENT` exception when a dependency does not export `package.json`, and your repo is set up as a monorepo using pnpm (https://github.com/facebook/react-native/commit/ad5e2680c8e491d89d7544ffb2fff45190cd5ef6 by [@tido64](https://github.com/tido64))
+- **Codegen**: Ensure codegen CLI supports unspecified `--outputPath` argument and respects `codegenConfig.outputDir` configurations (https://github.com/facebook/react-native/commit/f8207d6c757552ddac472aa278d7dd56ad04fb7e by [@kitten](https://github.com/kitten))
+- **Events**: Allow `EventEmitter`s to be optional (for push safety) ([4308185b64](https://github.com/facebook/react-native/commit/4308185b64145f315132865cc69f219bc3299eb3) by Tom Scallon)
+- **Fast Refresh**: Only remove the Fast Refresh "Refreshing..." toast when all bundles being loaded finished loading ([92cae27cb2](https://github.com/facebook/react-native/commit/92cae27cb24590e96b01a1dc9547687bafea877b) by [@vzaidman](https://github.com/vzaidman))
+- **FlatList**: The `ItemSeparatorComponent` prop on list components now accepts a React element as well as a component function ([35f6ed1146](https://github.com/facebook/react-native/commit/35f6ed1146fae2c36113f5705230188790a0d70c) by [@huntie](https://github.com/huntie))
+- **Image**: `ResizeMethod` was not propagated correctly on Android with Props 2.0 ([7c543db181](https://github.com/facebook/react-native/commit/7c543db181a0c2dfce46cb26428e7bbc0341945c) by [@Abbondanzo](https://github.com/Abbondanzo))
+- **LogBox**: Fixing an issue with the error LogBox formatting on windows causing text to wrap ([e2b62bc435](https://github.com/facebook/react-native/commit/e2b62bc43549545dfb29e7efad7aaf115cadc1f2) by Gianni Moschini)
+- **Renderer**: Avoid data loss during CSS property conversion ([c629019080](https://github.com/facebook/react-native/commit/c62901908088b9c03baffb8903e9b19ba1bc919d) by [@vineethkuttan](https://github.com/vineethkuttan))
+- **Renderer**: Use `size_t` instead of `int` for vector iteration in `cloneMultipleRecursive` ([f9754d3459](https://github.com/facebook/react-native/commit/f9754d34590fe4d988065a92de5d512883de3b33) by Harini Malothu)
+- **Renderer**: Fix 9-element (2D) transform matrix conversions ([ce243df972](https://github.com/facebook/react-native/commit/ce243df9725baff265fcd275b420ee78971e75cb) by [@cortinico](https://github.com/cortinico))
+- **Runtime**: [ReactCxxPlatform] Don't crash on reload ([5d65794ee4](https://github.com/facebook/react-native/commit/5d65794ee4fadc135d1c47ccd3bcce36e594ab8d) by [@christophpurrer](https://github.com/christophpurrer))
+- **TypeScript**: Fixed missing type definitions for new DOM APIs in legacy TypeScript types ([05ec7e0ad1](https://github.com/facebook/react-native/commit/05ec7e0ad13cce59e7e3161aa1005392584d6c59) by [@rubennorte](https://github.com/rubennorte))
+- **TypeScript**: Fixed Types in Refresh control ([ed24a4d05b](https://github.com/facebook/react-native/commit/ed24a4d05bb2e1e4a7e32a955777e59e827ebce5) by [@riteshshukla04](https://github.com/riteshshukla04))
+- **TypeScript**: TypeScript types of `positions` in `GradientValue` ([f7ea40bc28](https://github.com/facebook/react-native/commit/f7ea40bc28605fb712910e20d150af0bb9942611) by [@SimpleCreations](https://github.com/SimpleCreations))
+- **Yoga**: Update copyright headers ([0b68dcfac8](https://github.com/facebook/react-native/commit/0b68dcfac80e37423c886cc481a616506351bd81) by [@willspag](https://github.com/willspag))
+
+#### Android specific
+
+- **API**: Correct deprecation message for `ReactContextBaseJavaModule#getCurrentActivity()` ([81bbbe3c45](https://github.com/facebook/react-native/commit/81bbbe3c458628187c078fe2c0ef2b5d13867fe5) by [@vladd-g](https://github.com/vladd-g))
+- **Build**: Fix build failures with `RNGP` due to `AGP` 9.0.0-alpha05 ([69dc655005](https://github.com/facebook/react-native/commit/69dc655005bc20feb119ddeca7f663d2d64a6275) by [@cortinico](https://github.com/cortinico))
+- **Dev Menu**: Fix displaying dev menu items in light mode ([269b0bd877](https://github.com/facebook/react-native/commit/269b0bd877b018e9d54e7b08ab9b4d265daaaef3) by [@coado](https://github.com/coado))
+- **React Native DevTools**: Fix `SoLoader` race condition in `InspectorNetworkRequestListener` ([6c874f25e2](https://github.com/facebook/react-native/commit/6c874f25e20499f6f5a2ccac38b157018e3ccb33) by [@vzaidman](https://github.com/vzaidman))
+- **Hermes**: Read the Hermes V1 opt-in flag from the apps properties when building from source ([813b9441ca](https://github.com/facebook/react-native/commit/813b9441cad3c5bd45ef25f438217281e66dcf65) by [@j-piasecki](https://github.com/j-piasecki))
+- **Permissions**: Fix request permission not always resolving in Android 16 ([39ede95921](https://github.com/facebook/react-native/commit/39ede959211e10032f147d2b0b7af783cba049c8) by [@lukmccall](https://github.com/lukmccall))
+- **Fabric**: Do not crash inside `getEncodedScreenSizeWithoutVerticalInsets` if `SurfaceMountingManager` is null ([f59a6f9508](https://github.com/facebook/react-native/commit/f59a6f9508f92391b26d44854f3da238ccbc5e62) by [@cortinico](https://github.com/cortinico))
+- **Runtime**: Request layout on attached surfaces when font scale changes ([417e068220](https://github.com/facebook/react-native/commit/417e0682203d70bd5ca510f7999a7f6c6990566f) by [@j-piasecki](https://github.com/j-piasecki))
+- **ScrollView**: Controller-driven scroll events now honor paging/snap alignment ([ed75963c0d](https://github.com/facebook/react-native/commit/ed75963c0d14ba0b7c85b0aaed8fe635d60d1b99) by [@Abbondanzo](https://github.com/Abbondanzo))
+- **ScrollView**: Focused scroll into view behaviors for nested vertical scroll views ([26502c6319](https://github.com/facebook/react-native/commit/26502c63193c3f4814af82ca6f8ff4c45abbb76b) by [@rozele](https://github.com/rozele))
+- **ScrollView**: Issue with restarting scroll in `maintainVisibleContentPosition` ([a034841fd6](https://github.com/facebook/react-native/commit/a034841fd68a93778d4999f8bc540cf6a5fef8d4) by [@rozele](https://github.com/rozele))
+- **Text**: Fix text not scaling down when system `fontScale` < 1.0 ([642f086b8c](https://github.com/facebook/react-native/commit/642f086b8ce4088d7f0b3c6453e2bb8c5f75e41b) by [@kdwkr](https://github.com/kdwkr))
+- **View**: Defers focus until View is attached ([9d498f676d](https://github.com/facebook/react-native/commit/9d498f676d96b1c8d3d6c58dc188ea51e88e3474) by [@rozele](https://github.com/rozele))
+- **View**: Resolves an int overflow in `findNextFocusableElement` ([363d297260](https://github.com/facebook/react-native/commit/363d2972608e90abb423f9e0592270978a73fb9f) by [@rozele](https://github.com/rozele))
+
+#### iOS specific
+
+- **ActionSheet**: Apply tint color to Actions sheets buttons ([535efc1403](https://github.com/facebook/react-native/commit/535efc1403e53bde190ce5ddb7ecf97918c5e5fd) by [@cipolleschi](https://github.com/cipolleschi))
+- **ActionSheet**: Revert action sheet behavior not to break apps on iOS 26 ([82d2352b19](https://github.com/facebook/react-native/commit/82d2352b19b5255c74d17efea467bdad2ba93f29) by [@cipolleschi](https://github.com/cipolleschi))
+- **Build**: Fix loading bundle using `debug_http_host` preferences (https://github.com/facebook/react-native/commit/2ac54881f3967346faafa4e5a6bc3b9a68c29e46 by [@coado](https://github.com/coado))
+- **Build**: Fixed copying symbol bundles into correct slice folder (https://github.com/facebook/react-native/commit/2bc6b0083237839b224d5427407d33cab3e2de6b by [@chrfalch](https://github.com/chrfalch))
+- **Codegen**: Fix autolinking-generated `react-native-config` output not being used in `ReactCodegen` script phase due to temp output directory ([c0290329cd](https://github.com/facebook/react-native/commit/c0290329cdb1771ec087c8552049a287c67259c6) by [@kitten](https://github.com/kitten))
+- **DeviceInfo**: Fix `RCTDeviceInfo` crash when `application.delegate.window` is nil in modern iOS app architectures ([968909488a](https://github.com/facebook/react-native/commit/968909488a844c695a92ce000497840e577190dd) by [@25harsh](https://github.com/25harsh))
+- **Events**: Add missing `break;` to `-[RCTViewManager pointerEvents]` ([916e53f845](https://github.com/facebook/react-native/commit/916e53f845cdb438c1bb38590d7743f113eed8f7) by [@NSProgrammer](https://github.com/NSProgrammer))
+- **Events**: Raised the maximum number of pointers tracked at the same time to 17 ([58bd51e7e2](https://github.com/facebook/react-native/commit/58bd51e7e23cbd1f5f0f360587610c9fc70c0d76) by [@j-piasecki](https://github.com/j-piasecki))
+- **Fabric**: Address unexpected warning about "Unbalanced calls start/end for tag 20/19" ([796d182d89](https://github.com/facebook/react-native/commit/796d182d8989ff826eaa3a57458bdfc79750f820) by [@lokshunhung](https://github.com/lokshunhung))
+- **Font**: Make `RCTSetDefaultFontHandler` compatible with the new arch, and add a more powerful version as `RCTSetDefaultFontResolver` ([64b30a9376](https://github.com/facebook/react-native/commit/64b30a937607e436b7979e245c456e7ca45bfd11) by [@javache](https://github.com/javache))
+- **Image**: Images are removed from memory more aggressively to prevent OOMs ([3895831c2b](https://github.com/facebook/react-native/commit/3895831c2bc83faf68223bb2a491e796d2799b24) by [@sammy-SC](https://github.com/sammy-SC))
+- **Image**: Update the `source`property to avoid multiple downloads ([0a71b43fbc](https://github.com/facebook/react-native/commit/0a71b43fbc9d759bb8effd0197031a955687d07a) by [@chrfalch](https://github.com/chrfalch))
+- **Modal**: Modal swipe dismissal works only for the first time ([3a0c402d26](https://github.com/facebook/react-native/commit/3a0c402d26c366126fe7b36b2d504be4f658d68d) by [@okwasniewski](https://github.com/okwasniewski))
+- **Prebuild**: Fix iOS version mismatch when using nightly prebuilds ([790860782e](https://github.com/facebook/react-native/commit/790860782e07c02b3d89742006d9e73fea62bcfc) by [@gabrieldonadel](https://github.com/gabrieldonadel))
+- **Prebuild**: Fix using iOS nightly prebuilds in release mode ([19d87c874e](https://github.com/facebook/react-native/commit/19d87c874edb534d3acf5cb6576c6335983b661e) by [@gabrieldonadel](https://github.com/gabrieldonadel))
+- **StyleSheet**: `BoxShadow` + overflow hidden combination interfering with pointerEvents and transform scale ([c8e5f9766b](https://github.com/facebook/react-native/commit/c8e5f9766b8caaf66aa61ef48eeab740a10a725a) by [@intergalacticspacehighway](https://github.com/intergalacticspacehighway))
+
+## v0.82.1
+
+### Fixed
+
+#### Android specific
+
+- Fixed representation of transforms when view is originally zero-sized ([a81e94a40c](https://github.com/facebook/react-native/commit/a81e94a40ca8dca9e57b562db21f8f235c5b25a0) by [@javache](https://github.com/javache))
+
+#### iOS specific
+
+- Fixed issue when using gnu coreutils cp command when using precompiled binaries causing compilation error ([068ec39aea](https://github.com/facebook/react-native/commit/068ec39aea543617e5159fe22274b294bfb29026) by [@chrfalch](https://github.com/chrfalch))
+
+## v0.82.0
+
+### Breaking
+
+- **Appearance.setColorScheme:** `Appearance.setColorScheme` no longer accepts a nullable value ([a4581ecd8b](https://github.com/facebook/react-native/commit/a4581ecd8b6df5efa44dfe6d43708320209c900b) by [@huntie](https://github.com/huntie))
+- **`CxxSharedModuleWrapper`:** Removed CxxSharedModuleWrapper ([fafbee2402](https://github.com/facebook/react-native/commit/fafbee240235ea0e63eb01abd31ce32d6a576429) by [@javache](https://github.com/javache))
+- **DOM API:** Enable DOM APIs in host component refs ([2ad845ccb2](https://github.com/facebook/react-native/commit/2ad845ccb2fea277e05513dcf41407026a8224f0) by [@rubennorte](https://github.com/rubennorte))
+- **Error Handling:** Unhandled promises are now handled by ExceptionsManager.handleException, instead of being swallowed as Logbox Warnings. ([c4082c9ce2](https://github.com/facebook/react-native/commit/c4082c9ce208a324c2d011823ca2ba432411aafc) by [@krystofwoldrich](https://github.com/krystofwoldrich))
+- **InteractionManager:** InteractionManager has been deprecated and no longer respects interaction handles. Instead, it is now recommended to avoid executing long-running JavaScript tasks by breaking them up into smaller tasks and scheduling them using `requestIdleCallback()`. ([03d9f34a82](https://github.com/facebook/react-native/commit/03d9f34a8252456d389d9f9a3bd04b99a2828c16) by [@yungsters](https://github.com/yungsters))
+- **`shouldEmitW3CPointerEvents`:** Migrate `shouldPressibilityUseW3CPointerEventsForHover` to common private feature flags and remove `shouldEmitW3CPointerEvents` flag. ([fb4587780e](https://github.com/facebook/react-native/commit/fb4587780e8d6111139d73598a9a26ff392dee28) by [@coado](https://github.com/coado))
+- **TurboModuleUtils:** Remove unused ReactCommon/TurboModuleUtils functions #deepCopyJSIObject and #deepCopyJSIArray ([ead669ade3](https://github.com/facebook/react-native/commit/ead669ade31ee703c407f96c0ce98d8f2991bdc8) by [@christophpurrer](https://github.com/christophpurrer))
+- **TurboModules:** Delete old location of CallbackWrapper.h / LongLivedObject.h by ([cb94e71](https://github.com/facebook/react-native/commit/cb94e71845259ae7fa823eb4d21cde74fccd7435) [@christophpurrer](https://github.com/christophpurrer))
+
+#### Android specific
+
+- **Deps:** Gradle to 9.0 ([7f93b664b4](https://github.com/facebook/react-native/commit/7f93b664b41ba11226aae7cca0e7c9b7f38a7d18) by [@cortinico](https://github.com/cortinico))
+- **Image Prefetching:** Android: Image Prefetching send ImageResizeMode as enum value ([e30f34eda6](https://github.com/facebook/react-native/commit/e30f34eda689994cab8cd62aa38175238da8638b) by [@christophpurrer](https://github.com/christophpurrer))
+- **New Architecture:** Remove possibility to newArchEnabled=false in 0.82 ([d5d21d0614](https://github.com/facebook/react-native/commit/d5d21d061493ee973c789a7c6ab8cceebc1f04f9) by [@cortinico](https://github.com/cortinico))
+- **`reactNativeHost`:** Throw Exception if ReactApplication.reactNativeHost is not overriden ([0d3791ca0a](https://github.com/facebook/react-native/commit/0d3791ca0ab30d5a12881c9901f31291b3e998c6) by [@mdvacca](https://github.com/mdvacca))
+- **ViewManagerInterfaces:** Migrate ViewManagerInterfaces to kotlin. Some types in code generated ViewManagerInterfaces might differ. e.g. this will start enforcing nullability in parameters of viewManagerInterface methods (e.g. String commands parameters are not nullable, view params are not nullable in any method, etc) ([79ca9036d3](https://github.com/facebook/react-native/commit/79ca9036d39c16cd115dc0427cb7092f358ac47e) by [@mdvacca](https://github.com/mdvacca))
+
+#### iOS Specific
+- **New Architecture:** Removed the opt-out from the New Architecture. ([83e6eaf693](https://github.com/facebook/react-native/commit/83e6eaf693f967b7870a5d4896cbb799206a14f0) by [@cipolleschi](https://github.com/cipolleschi))
+
+### Added
+
+- **Animated:** `Animated.CompositeAnimation` is now exposed when using `"react-native-strict-api"` ([024d25794a](https://github.com/facebook/react-native/commit/024d25794a51c94c877c1dfa115a82ebbf559614) by [@huntie](https://github.com/huntie))
+- **Animated:** Allow calling createAnimatedNode without batching ([d9d9a49e18](https://github.com/facebook/react-native/commit/d9d9a49e18f3c51caa18cf7da0a1fcd62f1ecf18) by [@zeyap](https://github.com/zeyap))
+- **Animated:** Allow filter usage with native animated driver. ([138d0eb01d](https://github.com/facebook/react-native/commit/138d0eb01dbe597261459a37d364d1780c3ef228) by [@intergalacticspacehighway](https://github.com/intergalacticspacehighway))
+- **API:** Expose NativeComponentRegistry API as JavaScript root export ([f936780cd5](https://github.com/facebook/react-native/commit/f936780cd5c0c17797f9d2bbc8f5cee81c2eefce) by [@zhongwuzw](https://github.com/zhongwuzw))
+- **API:** Expose `ReactNativeVersion` API as JavaScript root export ([ec5638abd0](https://github.com/facebook/react-native/commit/ec5638abd0e872be62b6ea5d8df9bed6335c2191) by [@huntie](https://github.com/huntie))
+- **Codegen:** Added getDebugProps to codegen ([e547f466ee](https://github.com/facebook/react-native/commit/e547f466ee41415a75ec6b6f910171285ee7bfc3) by [@cipolleschi](https://github.com/cipolleschi))
+- **Hermes V1:** Added a dependency on hermes-compiler ([0caf8e70d5](https://github.com/facebook/react-native/commit/0caf8e70d53f611a73ad9b55879dfe0a5f036371) by [@j-piasecki](https://github.com/j-piasecki))
+- **Pressable:** Allow setting `blockNativeResponder` on Pressable ([6e4d23ded2](https://github.com/facebook/react-native/commit/6e4d23ded2da4a717bafcc032e3d7a0a5fbe3731) by [@zeyap](https://github.com/zeyap))
+- **Yoga/API:** Make yoga/Yoga.h an umbrell header ([8ed2cee80e](https://github.com/facebook/react-native/commit/8ed2cee80e0aaac2f2a6a897ba450888f274a5a4) by [@rudybear](https://github.com/rudybear))
+
+#### Android specific
+
+- **Build Type:** Create a `debugOptimized` `buildType` for Android ([eb2461c7c9](https://github.com/facebook/react-native/commit/eb2461c7c902ebed272bd2d22d6cff4d3c586da6) by [@cortinico](https://github.com/cortinico))
+- **DevMenu:** Add long-press back as an option to open the DevMenu for devices that lack menu & fast-forward. ([32d37f03ad](https://github.com/facebook/react-native/commit/32d37f03ad05290205a4f04d756f6e1880c4ff89) by [@sbuggay](https://github.com/sbuggay))
+- **DevTools:** `DevSupportManager::openDebugger` now supports an optional `panel` param determining the starting panel ([7eb3536728](https://github.com/facebook/react-native/commit/7eb3536728c4a20f7e51245f4f7b64aa505bd799) by [@huntie](https://github.com/huntie))
+- **DevTools:** Adds a landing view parameter to opening RNDT, enabling arbitrary view focus on launch. ([635c707eec](https://github.com/facebook/react-native/commit/635c707eec18f6d2ceceac2dcee9f458f17f8aab) by [@sbuggay](https://github.com/sbuggay))
+- **Hermes V1:** Added opt-in to use the new Hermes ([3e9990f860](https://github.com/facebook/react-native/commit/3e9990f860eb9380837ef431ca02def32c4261ad) by [@j-piasecki](https://github.com/j-piasecki))
+- **HWInput:** Channel up/down hardware events. ([c2a3e4420e](https://github.com/facebook/react-native/commit/c2a3e4420e07147f9a040a665da98dbe22b87a2a) by [@sbuggay](https://github.com/sbuggay))
+- **Manifest:** Add support to specify a single Manifest rather than 2 (main/debug) by using the `usesCleartextTraffic` manifest placeholder which is autoconfigured by RNGP. ([d89acc1596](https://github.com/facebook/react-native/commit/d89acc1596345534882938d2bbf40275a6cb89bd) by [@cortinico](https://github.com/cortinico))
+
+#### iOS specific
+
+- **API:** Add deprecation message for RCTAppdelegate APIs ([d503ea4efc](https://github.com/facebook/react-native/commit/d503ea4efc84b6511cef2a46421a16e044862e88) by [@cipolleschi](https://github.com/cipolleschi))
+- **Fabric:** Add invalidation callback for non-recycled component instances ([dc4a6d2c7e](https://github.com/facebook/react-native/commit/dc4a6d2c7e2ed421b61929896f60b1a864a60d97) by [@kkafar](https://github.com/kkafar))
+- **Hermes V1:** Added opt-in to use the new Hermes ([e9cdc308b4](https://github.com/facebook/react-native/commit/e9cdc308b4c04753d85757e8877ac00c3c687b95) by [@j-piasecki](https://github.com/j-piasecki))
+- **New Architecture:** Add warning if RCT_NEW_ARCH_ENABLED is set to 0 ([7d0bef2f25](https://github.com/facebook/react-native/commit/7d0bef2f25a206d917e7f5cc2b9a6c088f13a832) by [@cipolleschi](https://github.com/cipolleschi))
+- **New Architecture:** Crash the app if they force the legacy architecture. ([dc132a4fd4](https://github.com/facebook/react-native/commit/dc132a4fd4ca8dc28dc7dbb2406ac67dac1a0ee7) by [@cipolleschi](https://github.com/cipolleschi))
+
+### Changed
+
+- **Font:** Enabled `enableFontScaleChangesUpdatingLayout` feature flag by default ([686d14f1d1](https://github.com/facebook/react-native/commit/686d14f1d16c2f02720104ddd395f7d27c908350) by [@j-piasecki](https://github.com/j-piasecki))
+- **Hermes:** Changed names of hermes binaries ([776fca1e7c](https://github.com/facebook/react-native/commit/776fca1e7c978a2d8f817d042836073e4dcb4e0e) by [@j-piasecki](https://github.com/j-piasecki))
+- **Hermes V1:** Changed the source of hermesc binary to be an npm package ([2e0bd13a25](https://github.com/facebook/react-native/commit/2e0bd13a2533fe7ab64125a95b9215b806018c6e) by [@j-piasecki](https://github.com/j-piasecki))
+- **Metro:** Bump Metro to ^0.83.1 ([840fd6c83f](https://github.com/facebook/react-native/commit/840fd6c83f45326a796bf2823f8c2fa942aed06c) by [@robhogan](https://github.com/robhogan))
+- **React:** Bumped React to 19.1.1 ([ec5a98b1f5](https://github.com/facebook/react-native/commit/ec5a98b1f5c2137f5f6ff5f5f6706f20384c44df) by [@cipolleschi](https://github.com/cipolleschi))
+- **Runtime:** CDP backend now accepts `addBinding` and `removeBinding` methods earlier, before a Runtime exists. ([3271e57c75](https://github.com/facebook/react-native/commit/3271e57c751e7d1193c1e9f7b53e545231511b9d) by [@motiz88](https://github.com/motiz88))
+- **Typing:** Update types for Platform.version ([f6ba2dbf3b](https://github.com/facebook/react-native/commit/f6ba2dbf3b4c85da1a7f9079fd366a41b160fa69) by [@riteshshukla04](https://github.com/riteshshukla04))
+- **UIManager:** Avoid unnecessary copy of view props map in UIManager::updateShadowTree ([5b38bb4745](https://github.com/facebook/react-native/commit/5b38bb47457f853c2c3d5f275facbb9fbc150683) by [@zeyap](https://github.com/zeyap))
+
+#### Android specific
+
+- **AGP:** AGP to 8.12.0 ([742ef3d661](https://github.com/facebook/react-native/commit/742ef3d6615c8c1202e9f683e6127ac97d7a9e23) by [@cortinico](https://github.com/cortinico))
+- **DevSupportManager:** DevSupport `openDebugger()` methods now accept a `panel: String?` param. Frameworks directly implementing `DevSupportManager` will need to adjust call signatures. ([9dba7112cf](https://github.com/facebook/react-native/commit/9dba7112cfd09b02300869a77dba3dca16f49a28) by [@huntie](https://github.com/huntie))
+- **Kotlin:** Migrated TextAttributeProps to Kotlin. You might need to update your property access to use camelCase instead of Hungarian notation. ([fa921b3c7b](https://github.com/facebook/react-native/commit/fa921b3c7b289800a79196468f993a0eb0bf693f) by [@mateoguzmana](https://github.com/mateoguzmana))
+- **Kotlin:** Migrated ReactBaseTextShadowNode to Kotlin. You might need to update your property access to use camelCase instead of Hungarian notation. ([8ccfff9a46](https://github.com/facebook/react-native/commit/8ccfff9a46f317fd78f478c8b3f180441535d1ca) by [@mateoguzmana](https://github.com/mateoguzmana))
+- **Kotlin:** Migrated com.facebook.react.bridge.Arguments to Kotlin. ([2534aeaddb](https://github.com/facebook/react-native/commit/2534aeaddb0490b69dfaba6b8d316616c7e10a9c) by [@mateoguzmana](https://github.com/mateoguzmana))
+- **Kotlin:** Migrate `YogaConfig` to Kotlin ([4d5caef76b](https://github.com/facebook/react-native/commit/4d5caef76b83eb7e983364ecc81abb6027e5f98e) by [@mateoguzmana](https://github.com/mateoguzmana))
+- **Kotlin:** Migrate `YogaValue` to Kotlin ([4340dcbae8](https://github.com/facebook/react-native/commit/4340dcbae8fc41cde844e805a1ebfc23d23d164f) by [@mateoguzmana](https://github.com/mateoguzmana))
+- **Kotlin:** Migrate `YogaNative` to Kotlin ([bc54a06fcb](https://github.com/facebook/react-native/commit/bc54a06fcb5b5d1efd8996d8568733b657fc1b06) by [@mateoguzmana](https://github.com/mateoguzmana))
+- **Kotlin:** Migrate `YogaConfigFactory` to Kotlin ([33ca53d9db](https://github.com/facebook/react-native/commit/33ca53d9dbe53b92d65f82dbd53a2e9f23efd4f3) by [@mateoguzmana](https://github.com/mateoguzmana))
+- **Kotlin:** Migrate `DoNotStrip` to Kotlin ([35d8086881](https://github.com/facebook/react-native/commit/35d8086881fac643b0ebc0d53aaf7e79b7ccd830) by [@mateoguzmana](https://github.com/mateoguzmana))
+- **Kotlin:** Migrate `YogaLayoutType` to Kotlin ([7e461003c6](https://github.com/facebook/react-native/commit/7e461003c6592c8c539960bd5e8169c48dd27f50) by [@mateoguzmana](https://github.com/mateoguzmana))
+- **Kotlin:** Migrate `LayoutPassReason` to Kotlin ([db2a9c089c](https://github.com/facebook/react-native/commit/db2a9c089cd5802d99e0fc86e4dc0dbf7c888307) by [@mateoguzmana](https://github.com/mateoguzmana))
+- **Kotlin:** Migrate `YogaNodeFactory` to Kotlin ([40afa75a7c](https://github.com/facebook/react-native/commit/40afa75a7c816a5581223c7bcd1b65b8713edf47) by [@mateoguzmana](https://github.com/mateoguzmana))
+- **Kotlin:** Migrate `YogaMeasureOutput` to Kotlin ([453508ada8](https://github.com/facebook/react-native/commit/453508ada837554455733e3ca94440a7143f51b1) by [@mateoguzmana](https://github.com/mateoguzmana))
+- **Kotlin:** Migrate `YogaMeasureFunction` to Kotlin ([05eddd354e](https://github.com/facebook/react-native/commit/05eddd354e2e80ad3c95ed5a2199a59a77317891) by [@mateoguzmana](https://github.com/mateoguzmana))
+- **Kotlin:** Migrate `YogaStyleInputs` to Kotlin ([001736000f](https://github.com/facebook/react-native/commit/001736000f69ce98db86c17707408bbf3f0ae9a5) by [@mateoguzmana](https://github.com/mateoguzmana))
+- **Kotlin:** Migrate `YogaBaselineFunction` to Kotlin ([a2eb3b299d](https://github.com/facebook/react-native/commit/a2eb3b299dddea60c510821b662dfed55b334df7) by [@mateoguzmana](https://github.com/mateoguzmana))
+- **Kotlin:** Migrate `YogaLogger` to Kotlin ([9c9a39b58e](https://github.com/facebook/react-native/commit/9c9a39b58e12bc734c27a5d9306e792b0dcaf927) by [@mateoguzmana](https://github.com/mateoguzmana))
+- **OnBatchCompleteListener:** Make OnBatchCompleteListener interface internal ([046ff8e58b](https://github.com/facebook/react-native/commit/046ff8e58bed5da0f19adc860b327c7248b19f48) by [@cortinico](https://github.com/cortinico))
+- **ReactSurface:** Changed return type of ReactSurfaceImpl.view to ReactSurfaceView to align with parameter recived by ReactSurfaceImpl.attachView() ([41029d8e91](https://github.com/facebook/react-native/commit/41029d8e91492c34c377374b442b31755874618c) by [@mdvacca](https://github.com/mdvacca))
+- **TextAttributeProps:** Deprecate the field `TextAttributeProps.effectiveLineHeight`. This field was public but never used in OSS. ([ede037ade7](https://github.com/facebook/react-native/commit/ede037ade795bd44725f9bd82cace193a74aa68d) by [@cortinico](https://github.com/cortinico))
+- **ViewManagers:** Changed method arguments names for Core ViewManagers to match the names of ViewManagerInterfaces ([e7d9e0d197](https://github.com/facebook/react-native/commit/e7d9e0d1977c136a85b9a78ef36a258631d1e9ba) by [@mdvacca](https://github.com/mdvacca))
+
+### Deprecated
+
+- **APIs:** Deprecate legacy javascript react native apis ([e7aeea26bd](https://github.com/facebook/react-native/commit/e7aeea26bde6e9cda0a3a0a55fc2a0421fb0c0e5) by [@RSNara](https://github.com/RSNara))
+- **StyleSheet:** `StyleSheet.absoluteFillObject` is deprecated in favor of `StyleSheet.absoluteFill` (equivalent). ([83e19813ff](https://github.com/facebook/react-native/commit/83e19813ff5498ab3497d97fe38dba63a5554425) by [@huntie](https://github.com/huntie))
+- Deprecate all the c++ classes not used by interop, or the new architecture. ([9539cd2626](https://github.com/facebook/react-native/commit/9539cd26261aef646379104833c7f719e3d83d02) by [@RSNara](https://github.com/RSNara))
+
+#### Android specific
+
+- **DevMenu:** Remove bridge mode string from React Native Dev Menu title ([1c838f32a9](https://github.com/facebook/react-native/commit/1c838f32a9bcee3867ec0502b344889308302f26) by [@sbuggay](https://github.com/sbuggay))
+- **New Architecture:** DefaultDevSupportManagerFactory.create() method used for Old Arch ([026e22bb8d](https://github.com/facebook/react-native/commit/026e22bb8d7b38b3bd66ffcc7d4ee446adfee943) by [@cortinico](https://github.com/cortinico))
+- **New Architecture:** Deprecate `BridgelessReactContext.getCatalystInstance()` method ([4583fbe052](https://github.com/facebook/react-native/commit/4583fbe052924df1ad030e51ad80e8d754a4c5a4) by [@cortinico](https://github.com/cortinico))
+- **New Architecture:** Deprecate legacy architecture classes ReactInstanceManager and ReactInstanceManagerBuilder, these classes will be deleted in a future release ([fb84932e48](https://github.com/facebook/react-native/commit/fb84932e4894a45c0a2725e1d665acdf7bcea435) by [@mdvacca](https://github.com/mdvacca))
+- **New Architecture:** Depreacate `CoreModulesPackage` and `NativeModuleRegistryBuilder` legacy architecture classes, these classes unused in the new architecture and will be deleted in the future ([d3bbbd893a](https://github.com/facebook/react-native/commit/d3bbbd893acd500237ab4e1778c6a2e0fe1948a9) by [@mdvacca](https://github.com/mdvacca))
+- **New Architecture:** Deprecate Legacy Architecture ViewManagers, these classes are not used as part of the new architecture and will be deleted in the future ([da74d5da2c](https://github.com/facebook/react-native/commit/da74d5da2cac5306e37368c65490c434e7ff9f4f) by [@mdvacca](https://github.com/mdvacca))
+- **New Architecture:** Deprecate LegacyArchitecture ShadowNode classes included in React Native ([07091a9ae8](https://github.com/facebook/react-native/commit/07091a9ae8d70a601d969d9def4952563d3b7bcf) by [@mdvacca](https://github.com/mdvacca))
+- **New Architecture:** Depreacte all LegacyArchitecture classes from the bridge package ([c1f7c5e321](https://github.com/facebook/react-native/commit/c1f7c5e3217a7e8a77a859652aadff2a41e3ea58) by [@mdvacca](https://github.com/mdvacca))
+- **New Architecture:** Deprecate LegacyArchitecture class UIManagerProvider ([b29b86f275](https://github.com/facebook/react-native/commit/b29b86f27553eac50daa18ffb6bca07be3f24f25) by [@mdvacca](https://github.com/mdvacca))
+- **New Architecture:** Deprecate BridgeDevSupportManager and JSInstance ([25c011eb4d](https://github.com/facebook/react-native/commit/25c011eb4d403040b57e338bec704769de20793c) by [@mdvacca](https://github.com/mdvacca))
+- **New Architecture:** Deprecate NativeModuleRegistry Legacy Architecture class ([22e4c25211](https://github.com/facebook/react-native/commit/22e4c252116da1a6658b15a84720e0ee314dddd6) by [@mdvacca](https://github.com/mdvacca))
+- **New Architecture:** Deprecate subset of LegacyArchitecture classes in com/facebook/react/bridge ([78a3ff81eb](https://github.com/facebook/react-native/commit/78a3ff81eb38ae26fb15106580de841477897101) by [@mdvacca](https://github.com/mdvacca))
+- **New Architecture:** Deprecate LegacyArchitecture class FrescoBasedReactTextInlineImageShadowNode ([25f466cc4d](https://github.com/facebook/react-native/commit/25f466cc4dd28c962b967475c04c284d26efb722) by [@mdvacca](https://github.com/mdvacca))
+- **New Architecture:** Deprecate Legacy Architecture class CallbackImpl ([718126fcf0](https://github.com/facebook/react-native/commit/718126fcf0296969ee659c31fae51b4317c896d3) by [@mdvacca](https://github.com/mdvacca))
+- **New Architecture:** Deprecate LegacyArchitecture class JavaMethodWrapper ([19a99dd088](https://github.com/facebook/react-native/commit/19a99dd0882d786daea3db486fd3aed3c10419b5) by [@mdvacca](https://github.com/mdvacca))
+- **New Architecture:** Deprecate Legacy Architecture ShadowNode classes ([c4715886a9](https://github.com/facebook/react-native/commit/c4715886a917eb3eb63aab366de5225090dff5a1) by [@mdvacca](https://github.com/mdvacca))
+- **New Architecture:** Deprecate LegacyArchitecture UIManagerModules class ([85610c8b43](https://github.com/facebook/react-native/commit/85610c8b43ea132154cddcfed973ee6ceb3e55b3) by [@mdvacca](https://github.com/mdvacca))
+- **New Architecture:** Deprecate LegacyArchitecture classes from com/facebook/react/uimanager ([7f5b2b8f84](https://github.com/facebook/react-native/commit/7f5b2b8f84d7941891a447978c6adc17929ef87f) by [@mdvacca](https://github.com/mdvacca))
+- **New Architecture:** Deprecate LegacyArchitecture classes from package com.facebook.react.uimanager ([39d24bade3](https://github.com/facebook/react-native/commit/39d24bade317920544a3715e3a1f131663d8cded) by [@mdvacca](https://github.com/mdvacca))
+- **New Architecture:** Deprecate LegacyArchitecture classes from LayoutAnimation package ([f67078df07](https://github.com/facebook/react-native/commit/f67078df07b6c9ad995eb43ff47fc4a43bb2eaee) by [@mdvacca](https://github.com/mdvacca))
+- **New Architecture:** ReactPackageLogger is not supported in the new architecture and being deprecated ([65671108f6](https://github.com/facebook/react-native/commit/65671108f69d9b23a011841102e4141293581d9c) by [@mdvacca](https://github.com/mdvacca))
+
+#### iOS specific
+
+- **DevMenu:** Remove bridge mode title and description from React Native Dev Menu title ([775daf5972](https://github.com/facebook/react-native/commit/775daf597280db94354ed484f2ce81690f1eb7b0) by [@sbuggay](https://github.com/sbuggay))
+- **New Architecture:** Deprecate all the objc classes not used by interop, or the new architecture. ([70f53ac4ea](https://github.com/facebook/react-native/commit/70f53ac4ea144020560906f5931e480ed4dee87c) by [@RSNara](https://github.com/RSNara))
+
+### Removed
+
+- **New Architecture:** Core: Remove legacy components ([9c8a4c2297](https://github.com/facebook/react-native/commit/9c8a4c22973c7ce6fcf6b5d22c6d5fd4c6dc0d92) by [@RSNara](https://github.com/RSNara))
+
+#### Android specific
+
+- **DefaultReactHost:** Delete unused `DefaultReactHost.getDefaultReactHost()` overload ([d35ddb5e59](https://github.com/facebook/react-native/commit/d35ddb5e59a8cb990dd61a154a8e15e9542f8b15) by [@cortinico](https://github.com/cortinico))
+- **DefaultReactHost:** Remove deprecated DefaultReactHost.getDefaultReactHost() overload - part 2 ([bda6acf3b0](https://github.com/facebook/react-native/commit/bda6acf3b08779c0dae7bdadbc9913eea79acd0d) by [@cortinico](https://github.com/cortinico))
+- **DefaultReactHost:** Remove deprecated DefaultReactHost.getDefaultReactHost() overload - part 1 ([474f455a75](https://github.com/facebook/react-native/commit/474f455a7591049382da0d0308ddd21589f0cc7e) by [@cortinico](https://github.com/cortinico))
+- **Inspector:** Removed unused `Inspector` public class from React Android ([cf528526cc](https://github.com/facebook/react-native/commit/cf528526cc375f1003125cf63f66fbd88790ceae) by [@cortinico](https://github.com/cortinico))
+- **JSONArguments:** Remove the `com.facebook.react.bridge.JSONArguments` class ([04ae15d99b](https://github.com/facebook/react-native/commit/04ae15d99bb2ee6f7987bbe8c3d7acfdd46a482f) by [@cortinico](https://github.com/cortinico))
+- **MessageQueueThreadPerfStats:** Deprecated MessageQueueThreadPerfStats API and replaced with stub. ([3bf5cb3d0e](https://github.com/facebook/react-native/commit/3bf5cb3d0e7d9d1749ef19a8392b9bbd3ec7ab7d) by [@javache](https://github.com/javache))
+
+### Fixed
+
+- **Accessibility:** Fix for setting the default value for accessibility props ([586f5ba89c](https://github.com/facebook/react-native/commit/586f5ba89cc20a81a9e2d5d0f2708e9cd1b440c0) by Vineeth K)
+- **Accessibility:** `aria-hidden` support for `Text`, non-editable `TextInput` and `Image` ([0f39fc3000](https://github.com/facebook/react-native/commit/0f39fc3000411a43711814e0ab9cca1f7093b625) by [@mdjastrzebski](https://github.com/mdjastrzebski))
+- **Build:** Fixed babel plugin validation error when coverage instrumentation is enabled ([191ddc1ec7](https://github.com/facebook/react-native/commit/191ddc1ec72be6641ebb8b9cb729cf0e142fff55) by Umar Mohammad)
+- **Casting:** Casting rawValue to int was incorrectly truncating ([31b9f10364](https://github.com/facebook/react-native/commit/31b9f103645e67586bdfc5c2f590c28c04ca3871) by [@javache](https://github.com/javache))
+- **Codegen:** Help Codegen find library's package.json if some libraries using `exports` field in their package.json file and the `./package.json` subpath is not explicitly defined ([739dfd2141](https://github.com/facebook/react-native/commit/739dfd2141015a8126448bda64a559f5bf22672e) by [@RakaDoank](https://github.com/RakaDoank))
+- **Hermes:** Change leftover references to `hermes.framework` to `hermesvm.framework` ([7f051c5470](https://github.com/facebook/react-native/commit/7f051c54701b3585f76f63846abbf7e68e2688d2) by [@j-piasecki](https://github.com/j-piasecki))
+- **Hermes V1:** Fixed coordinates for Hermes V1 artifacts ([674fb77d93](https://github.com/facebook/react-native/commit/674fb77d93dfe67a5fe90449dc71b195b1851e13) by [@j-piasecki](https://github.com/j-piasecki))
+- **Performance Panel:** Fix typo in Performance.js type checking condition ([6caf2dfa38](https://github.com/facebook/react-native/commit/6caf2dfa382fd4f1184b8d21b030c36687a256e4) by [@YangJonghun](https://github.com/YangJonghun))
+- **Performance Panel:** Add default cases to switch statements in headers ([323fe3a5d4](https://github.com/facebook/react-native/commit/323fe3a5d471ae5a2f94d5c2bd13cc97feffe0a5) by [@NSProgrammer](https://github.com/NSProgrammer))
+- **ReactCommon:** Bring back ContextContainer::Shared = std::shared_ptr alias ([daeb6e99ab](https://github.com/facebook/react-native/commit/daeb6e99abbca2b6395a9a703d2b0bb9e5091fb7) by [@christophpurrer](https://github.com/christophpurrer))
+- **ReactCommon:** Bring back SharedImageManager = std::shared_ptr alias ([4718b35259](https://github.com/facebook/react-native/commit/4718b35259135b3503033a0061ae84e15d4eb450) by [@christophpurrer](https://github.com/christophpurrer))
+- **ReactCommon:** Fixed Type Conversion Error in DynamicEventPayload ([ff38d59cff](https://github.com/facebook/react-native/commit/ff38d59cff92e0a50f0dd70384fbc4dd11d969c4) by Harini Malothu)
+- **ReactCommon:** Fixed Type Conversion Error in CSSHexColor ([2ca88a0069](https://github.com/facebook/react-native/commit/2ca88a0069969bf115da6f0ea9f2fbbae9c9226c) by [@anupriya13](https://github.com/anupriya13))
+- **TestCallInvoker:** Fix memory leak in TestCallInvoker ([9f2fbc23e4](https://github.com/facebook/react-native/commit/9f2fbc23e48af9be56b3729d514fbb3fff4ba376) by [@christophpurrer](https://github.com/christophpurrer))
+
+#### Android specific
+
+- **Accessability:** Stabilize custom accessibility action IDs to prevent "incompatible action" errors in TalkBack. ([626568f9a3](https://github.com/facebook/react-native/commit/626568f9a3f956a52f6c55df1dc3bc5cd017e353) by [@leg234-png](https://github.com/leg234-png))
+- **Build From Source:** Fix build from source due to missing folder error on Gradle 9.0 ([9fbce3eff1](https://github.com/facebook/react-native/commit/9fbce3eff18060f16e796badc415ba733ede19af) by [@cortinico](https://github.com/cortinico))
+- **Determinism:** Turned off build IDs for native libraries, fixing issues with reproducibility ([4b8dbe7642](https://github.com/facebook/react-native/commit/4b8dbe7642be53d0ccfc68ca8c9b3f5e750a68c0) by [@Rexogamer](https://github.com/Rexogamer))
+- **DevTools:** Fix stack trace linkifying failing when using Android emulator and other situations where the device and debugger have different bundle urls ([794df48ad6](https://github.com/facebook/react-native/commit/794df48ad6a259022e66de1a38ff54b5ec67c3e4) by [@vzaidman](https://github.com/vzaidman))
+- **Edge to Edge:** Fix `Dimensions` `window` values on Android < 15 when edge-to-edge is enabled ([3b185e4bce](https://github.com/facebook/react-native/commit/3b185e4bcef24e0689cccd4cf250d469b114d4da) by [@zoontek](https://github.com/zoontek))
+- **Fonts:** Update font scale when recreating `RootView` ([5cda3065ce](https://github.com/facebook/react-native/commit/5cda3065ce635460a7458cbab5c10e24bea3bfe2) by [@j-piasecki](https://github.com/j-piasecki))
+- **Fonts:** Fix incorrect positioning of inline view at the end of string when RTL text in LTR container ([7f224941bb](https://github.com/facebook/react-native/commit/7f224941bb807919b487d8e1634dd2124f9258b8) by [@NickGerleman](https://github.com/NickGerleman))
+- **Hermes V1:** Changed the coordinates of hermes artifacts when using Hermes V1 ([d0fb33822d](https://github.com/facebook/react-native/commit/d0fb33822de38183895c8b3421f46966909beaf3) by [@j-piasecki](https://github.com/j-piasecki))
+- **Locale:** Use the first available locale instead of the default one to decide `isDevicePreferredLanguageRTL` ([a03780d279](https://github.com/facebook/react-native/commit/a03780d279d0944e0dcbbf5a93680775006598b0) by Kaining Zhong)
+- **New Architecture:** Correctly account for insets on first render of Modals on New Arch ([2e76fc8e8e](https://github.com/facebook/react-native/commit/2e76fc8e8ea01fbce5bd131f675364e688f49088) by [@cortinico](https://github.com/cortinico))
+- **Performance:** Fix mounting is very slow on Android by shipping native transform optimizations ([c557311ed8](https://github.com/facebook/react-native/commit/c557311ed836cded8548c5bca32f3eded0abc7ff) by [@cortinico](https://github.com/cortinico))
+- **Scroll:** Fixed an issue where shadow tree and native tree layouts mismatch at the end of a scroll event ([1828c53f85](https://github.com/facebook/react-native/commit/1828c53f85faf599a485b3859f8b62586696265f) by [@Abbondanzo](https://github.com/Abbondanzo))
+- **Start up:** Fix wrong default for `jsBundleAssetPath` on `DefaultReactHost` ([2246e2b82c](https://github.com/facebook/react-native/commit/2246e2b82cf0c433f9a9b385ea98e532c6f322c6) by [@cortinico](https://github.com/cortinico))
+
+#### iOS specific
+
+- **Build:** Fixed using USE_FRAMEWORKS (static/dynamic) with precompiled binaries ([e723ca4d6b](https://github.com/facebook/react-native/commit/e723ca4d6b86d5a98449498395c700513ceba555) by [@chrfalch](https://github.com/chrfalch))
+- **Build:** Non-UTF8 crashes Info.plist local frameworks ([91e69b5d4c](https://github.com/facebook/react-native/commit/91e69b5d4c768278680a8d9ae979bc267624ce98) by [@philipheinser](https://github.com/philipheinser))
+- **Build:** Fixed variable naming error in `set_fast_float_config` method in `react_native_pods.rb` ([327057fad5](https://github.com/facebook/react-native/commit/327057fad5c78a95e6c039bfe380d78672e83a43) by [@eliotfallon213](https://github.com/eliotfallon213))
+- **Build:** Fix pure cocoapods dynamic framework build ([aa4555eaf1](https://github.com/facebook/react-native/commit/aa4555eaf1b6aab83660c600e867fa6c2da4128e) by [@cipolleschi](https://github.com/cipolleschi))
+- **Codegen:** Fix regression that skips artifacts code generation ([f6f5ea0b2e](https://github.com/facebook/react-native/commit/f6f5ea0b2eed894725d8f6e8bd045c99c3182026) by [@kitten](https://github.com/kitten))
+- **Native Modules:** Fix concurrent calls into resolve/reject inside native modules ([dc879950d1](https://github.com/facebook/react-native/commit/dc879950d196dfd429229f1c4c8e743ef1799d11) by [@RSNara](https://github.com/RSNara))
+- **New Architecture:** Fix overriding (xc)framework Info.plist files with RCTNewArchEnabled field ([f84514a88b](https://github.com/facebook/react-native/commit/f84514a88be00f8dcae7972f84aa89d829392a58) by [@msynowski](https://github.com/msynowski))
+- **Prebuild:** Fix Node scripts related to prebuilt tarball extraction for paths containing whitespaces ([9731e8ebc5](https://github.com/facebook/react-native/commit/9731e8ebc5ea87526a91b9903172639e062cd920) by [@kitten](https://github.com/kitten))
+- **Prebuild:** Use autolinking-generated react-native-config output in second step of cocoapods linking that generates artifacts and generated source ([f170db412b](https://github.com/facebook/react-native/commit/f170db412b3ab46fd0894d5d66431d9c230cd3a8) by [@kitten](https://github.com/kitten))
+- **RCTAlertController:** Simplify RCTAlertController, don't create additional UIWindow ([05c4321b19](https://github.com/facebook/react-native/commit/05c4321b194c3d0e146b6085bcaccc75acd3fd67) by [@okwasniewski](https://github.com/okwasniewski))
+- **RCTPullToRefreshViewComponentView:** Properly initialize the `RCTPullToRefreshViewComponentView` ([27217e8bd6](https://github.com/facebook/react-native/commit/27217e8bd601757b5db6efc022db428b552a2aa4) by [@cipolleschi](https://github.com/cipolleschi))
+- **RCTReactNativeFactory:** Ask the delegate for `getModuleForClass` and `getModuleInstanceFromClass` ([85b47afb48](https://github.com/facebook/react-native/commit/85b47afb48e50b036d2c2c79a008f571d3bfcb43) by [@cipolleschi](https://github.com/cipolleschi))
+- **ScrollView:** Correctly propagate `ScrollView` props to `RefreshControl` ([09daad27ea](https://github.com/facebook/react-native/commit/09daad27ea22b83fab65176ea3c7f5f1488ba408) by [@cipolleschi](https://github.com/cipolleschi))
+- **ScrollView:** Make sure that `ScrollView` recycled refresh control have the right props setup. ([21b93d8d7d](https://github.com/facebook/react-native/commit/21b93d8d7d46a26f728df19764f85a8aebf318bb) by [@cipolleschi](https://github.com/cipolleschi))
+- **Switch:** Fixed a crash when rendering the `Switch` component ([28275a0f7b](https://github.com/facebook/react-native/commit/28275a0f7b182a215010d47fb841d9c2c36bb24c) by [@cipolleschi](https://github.com/cipolleschi))
+- **Switch:** Fix Switch layout to work with iOS26 ([91d427fe52](https://github.com/facebook/react-native/commit/91d427fe52a307f9aa8579912ef956d61808dad2) by [@cipolleschi](https://github.com/cipolleschi))
+- **Text:** Fix selectable prop not working correctly ([f004cd39bc](https://github.com/facebook/react-native/commit/f004cd39bc4b632006085cbcf61df52bc5d25242) by [@iamAbhi-916](https://github.com/iamAbhi-916))
+- **TextInput:** Update TextInput recycling logic to clean up the `inputAccessoryView` dependency. ([eb08f54594](https://github.com/facebook/react-native/commit/eb08f545948de9e2eca91ab3cb7569670c553b15) by [@ArturKalach](https://github.com/ArturKalach))
+- **TextInput:** Fixed TextInput behavior when `maxLength={null}` is passed ([56ad53cb14](https://github.com/facebook/react-native/commit/56ad53cb14b5c842714fcf976b6ba81f68c140f2) by [@cipolleschi](https://github.com/cipolleschi))
+- **View:** Inline `View` alignment with `lineHeight` in Text ([6da351a5ed](https://github.com/facebook/react-native/commit/6da351a5ed80a10138a5558afcb380410c8a93c9) by [@intergalacticspacehighway](https://github.com/intergalacticspacehighway))
+
+### Security
+
+- **Network:** Fixed vulnerability on undici and on-headers ([dd00c9055a](https://github.com/facebook/react-native/commit/dd00c9055a8f0c9ceac1716385a8a9874f7a4c2e) by [@cipolleschi](https://github.com/cipolleschi))
+
+## v0.81.5
+
+### Fixed
+
+- Fixed switch ([4106d54a6d](https://github.com/facebook/react-native/commit/4106d54a6ddacbb784fc8335e9a82054f51a2d02) by [@cipolleschi](https://github.com/cipolleschi))
+
+#### Android specific
+
+- Fix request permission not always resolving in Android 16 ([39ede95921](https://github.com/facebook/react-native/commit/39ede959211e10032f147d2b0b7af783cba049c8) by [@lukmccall](https://github.com/lukmccall))
+
+#### iOS specific
+
+- Fix RCTDeviceInfo crash when application.delegate.window is nil in modern iOS app architectures ([968909488a](https://github.com/facebook/react-native/commit/968909488a844c695a92ce000497840e577190dd) by [@25harsh](https://github.com/25harsh))
+
+## v0.81.4
+
+### Fixed
+
+#### iOS specific
+
+- Fix regression that skips artifacts code generation ([f6f5ea0b2e](https://github.com/facebook/react-native/commit/f6f5ea0b2eed894725d8f6e8bd045c99c3182026) by [@kitten](https://github.com/kitten))
+- Reapplied "Use autolinking-generated react-native-config output in second step of cocoapods linking that generates artifacts and generated source" ([bb73315a3f](https://github.com/facebook/react-native/commit/bb73315a3fd8cd203c4ddb3ffa10bfec307c7e92) by [@kitten](https://github.com/kitten))
+
+## v0.81.3
+
+### Fixed
+
+#### iOS specific
+
+- Reverted "Use autolinking-generated react-native-config output in second step of cocoapods linking that generates artifacts and generated source" ([537e3ad930](https://github.com/facebook/react-native/commit/537e3ad93041c0cef959f0d20586fe97818900a6) by [@gabrieldonadel](https://github.com/gabrieldonadel))
+
+## v0.81.2
+
+### Added
+
+#### Android specific
+
+- Create a debugOptimized buildType for Android ([5e3edafec6](https://github.com/facebook/react-native/commit/5e3edafec6c69558521061dced7a6bcd046576b0) by [@cortinico](https://github.com/cortinico))
+- Add `useNativeEqualsInNativeReadableArrayAndroid` and `useNativeTransformHelperAndroid` feature flag to the experimental channel. This should alleviate some of the perf issue users are seeing on Android + Reanimated + NewArch on 0.81([a346096da8](https://github.com/facebook/react-native/commit/a346096da81fccf5fbc82d83bfc128695e6ec3a5) by [@cortinico](https://github.com/cortinico))
+
+### Fixed
+
+#### iOS specific
+
+- Fix Node scripts related to prebuilt tarball extraction for paths containing whitespaces ([366f2ad505](https://github.com/facebook/react-native/commit/366f2ad5057ffecc1f5b211f6aae29567ae6b7e5) by [@kitten](https://github.com/kitten))
+- Use autolinking-generated react-native-config output in second step of cocoapods linking that generates artifacts and generated source ([a2eb29e5e7](https://github.com/facebook/react-native/commit/a2eb29e5e7aef8bbdf4c647c8467b5292b013b20) by [@kitten](https://github.com/kitten))
+
## v0.81.1
### Added
@@ -14,7 +611,6 @@
- **Infra:** Add missing Babel dependencies ([bf2c3af93b](https://github.com/facebook/react-native/commit/bf2c3af93b146943cb35866fa9badcd188e63f5b) by [@tido64](https://github.com/tido64))
- **Accessibility:** fix `aria-label` on `TextInput` ([6965d57e75](https://github.com/facebook/react-native/commit/6965d57e75ed0cf9f265c6020d478ddb9af4bf10) by [@mdjastrzebski](https://github.com/mdjastrzebski))
-
#### iOS specific
- **TextInput:** Setting maxLength to 0 in TextInput now correctly blocks typing ([c5956da8c0](https://github.com/facebook/react-native/commit/c5956da8c0b735d47761af51019ed25b49001c00) by [@riteshshukla04](https://github.com/riteshshukla04))
@@ -28,7 +624,6 @@
- **Prebuild:** Fix "file exists" error in `ReactNativeDependencies.podspec` ([4c570b5d31](https://github.com/facebook/react-native/commit/4c570b5d31ef46e04e5fa26fa92d7f7090bf15e2) by [@vonovak](https://github.com/vonovak))
- **Prebuild:** added explicit handling of ReactCodegen ([6526a98d68](https://github.com/facebook/react-native/commit/6526a98d68dbc8578ea15cbf117c0a216c6e9af0) by [@cipolleschi](https://github.com/cipolleschi))
-
## v0.81.0
### Breaking
@@ -583,6 +1178,10 @@
- **Text:** Selection range not respected when changing text or selection when selection is forced ([d32ea66e6a](https://github.com/facebook/react-native/commit/d32ea66e6a945dd84092532401b265b12d482668) by Olivier Bouillet)
- **TextInput:** Fix TextInput `onContentSizeChange` event being dispatched only once on iOS on the new architecture ([5fd5188172](https://github.com/facebook/react-native/commit/5fd51881727b2d86f87abf04db032940ac0ec8c4) by [@j-piasecki](https://github.com/j-piasecki))
+## v0.79.7
+
+See [CHANGELOG-0.7x](./CHANGELOG-0.7x.md#v0797)
+
## v0.79.6
See [CHANGELOG-0.7x](./CHANGELOG-0.7x.md#v0796)
diff --git a/README.md b/README.md
index 502b38bcd2a4..b4280bb6abd8 100644
--- a/README.md
+++ b/README.md
@@ -17,10 +17,13 @@
-
+
-
+
+
+
+
diff --git a/build.gradle.kts b/build.gradle.kts
index 866560d63884..2154d20f22ed 100644
--- a/build.gradle.kts
+++ b/build.gradle.kts
@@ -104,39 +104,70 @@ tasks.register("build") {
tasks.register("publishAllToMavenTempLocal") {
description = "Publish all the artifacts to be available inside a Maven Local repository on /tmp."
dependsOn(":packages:react-native:ReactAndroid:publishAllPublicationsToMavenTempLocalRepository")
- // We don't publish the external-artifacts to Maven Local as ci is using it via workspace.
- dependsOn(
- ":packages:react-native:ReactAndroid:hermes-engine:publishAllPublicationsToMavenTempLocalRepository"
- )
}
tasks.register("publishAndroidToSonatype") {
description = "Publish the Android artifacts to Sonatype (Maven Central or Snapshot repository)"
dependsOn(":packages:react-native:ReactAndroid:publishToSonatype")
- dependsOn(":packages:react-native:ReactAndroid:hermes-engine:publishToSonatype")
}
-if (project.findProperty("react.internal.useHermesNightly")?.toString()?.toBoolean() == true) {
+var hermesSubstitution: Pair? = null
+
+if (project.findProperty("react.internal.useHermesStable")?.toString()?.toBoolean() == true) {
+ val hermesVersions = java.util.Properties()
+ val hermesVersionPropertiesFile =
+ File("./packages/react-native/sdks/hermes-engine/version.properties")
+ hermesVersionPropertiesFile.inputStream().use { hermesVersions.load(it) }
+ val selectedHermesVersion = hermesVersions["HERMES_V1_VERSION_NAME"] as String
+
+ hermesSubstitution = selectedHermesVersion to "Users opted to use stable hermes release"
+} else if (
+ project.findProperty("react.internal.useHermesNightly")?.toString()?.toBoolean() == true
+) {
+ val reactNativePackageJson = File("./packages/react-native/package.json")
+ val reactNativePackageJsonContent = reactNativePackageJson.readText()
+ val packageJson = groovy.json.JsonSlurper().parseText(reactNativePackageJsonContent) as Map<*, *>
+
+ val hermesCompilerVersion =
+ (packageJson["dependencies"] as Map<*, *>)["hermes-compiler"] as String
+
+ if (hermesCompilerVersion == "0.0.0") {
+ throw RuntimeException(
+ "Trying to use Hermes Nightly but hermes-compiler version is not specified"
+ )
+ }
+
+ hermesSubstitution = "$hermesCompilerVersion-SNAPSHOT" to "Users opted to use hermes nightly"
+} else {
logger.warn(
"""
********************************************************************************
- INFO: You're using Hermes from nightly as you set
+ INFO: You're building Hermes from source as you set
- react.internal.useHermesNightly=true
+ react.internal.useHermesStable=false
+ react.internal.useHermesNightly=false
in the ./gradle.properties file.
That's fine for local development, but you should not commit this change.
********************************************************************************
- """
+ """
.trimIndent()
)
+}
+
+if (hermesSubstitution != null) {
+ val (hermesVersion, reason) = hermesSubstitution!!
+ project(":packages:react-native:ReactAndroid:hermes-engine") {
+ tasks.configureEach { enabled = false }
+ }
+
allprojects {
configurations.all {
resolutionStrategy.dependencySubstitution {
substitute(project(":packages:react-native:ReactAndroid:hermes-engine"))
- .using(module("com.facebook.react:hermes-android:0.+"))
- .because("Users opted to use hermes from nightly")
+ .using(module("com.facebook.hermes:hermes-android:$hermesVersion"))
+ .because(reason)
}
}
}
diff --git a/flow-typed/environment/node.js b/flow-typed/environment/node.js
index 7969e444e116..47c30518aa42 100644
--- a/flow-typed/environment/node.js
+++ b/flow-typed/environment/node.js
@@ -21,6 +21,12 @@ interface ErrnoError extends Error {
syscall?: string;
}
+type Node$Conditional = T extends true
+ ? IfTrue
+ : T extends false
+ ? IfFalse
+ : IfTrue | IfFalse;
+
type buffer$NonBufferEncoding =
| 'hex'
| 'HEX'
@@ -192,18 +198,33 @@ declare type Node$Buffer = typeof Buffer;
declare module 'buffer' {
declare var kMaxLength: number;
declare var INSPECT_MAX_BYTES: number;
+
+ declare var constants: Readonly<{
+ MAX_LENGTH: number,
+ MAX_STRING_LENGTH: number,
+ }>;
+
declare function transcode(
source: Node$Buffer,
fromEnc: buffer$Encoding,
toEnc: buffer$Encoding,
): Node$Buffer;
+
+ declare function isUtf8(input: Buffer | ArrayBuffer | $TypedArray): boolean;
+
+ declare function isAscii(input: Buffer | ArrayBuffer | $TypedArray): boolean;
+
+ declare function resolveObjectURL(id: string): Blob | void;
+
declare var Buffer: Node$Buffer;
+ declare var Blob: typeof globalThis.Blob;
+ declare var File: typeof globalThis.File;
}
-type child_process$execOpts = {
+type child_process$execOpts = Readonly<{
cwd?: string,
- env?: Object,
- encoding?: string,
+ env?: Readonly<{[key: string]: string | number | void}>,
+ encoding?: buffer$NonBufferEncoding | 'buffer' | string,
shell?: string,
timeout?: number,
maxBuffer?: number,
@@ -211,8 +232,8 @@ type child_process$execOpts = {
uid?: number,
gid?: number,
windowsHide?: boolean,
- ...
-};
+ signal?: AbortSignal,
+}>;
declare class child_process$Error extends Error {
code: number | string | null;
@@ -225,32 +246,31 @@ declare class child_process$Error extends Error {
cmd: string;
}
-type child_process$execCallback = (
+type child_process$execCallback = (
error: ?child_process$Error,
- stdout: string | Buffer,
- stderr: string | Buffer,
+ stdout: T,
+ stderr: T,
) => void;
-type child_process$execSyncOpts = {
+type child_process$execSyncOpts = Readonly<{
cwd?: string,
input?: string | Buffer | $TypedArray | DataView,
stdio?: string | Array,
- env?: Object,
+ env?: Readonly<{[key: string]: string | number | void}>,
shell?: string,
uid?: number,
gid?: number,
timeout?: number,
killSignal?: string | number,
maxBuffer?: number,
- encoding?: string,
+ encoding?: buffer$NonBufferEncoding | 'buffer' | string,
windowsHide?: boolean,
- ...
-};
+}>;
-type child_process$execFileOpts = {
+type child_process$execFileOpts = Readonly<{
cwd?: string,
- env?: Object,
- encoding?: string,
+ env?: Readonly<{[key: string]: string | number | void}>,
+ encoding?: buffer$NonBufferEncoding | 'buffer' | string,
timeout?: number,
maxBuffer?: number,
killSignal?: string | number,
@@ -259,168 +279,414 @@ type child_process$execFileOpts = {
windowsHide?: boolean,
windowsVerbatimArguments?: boolean,
shell?: boolean | string,
- ...
-};
+ signal?: AbortSignal,
+}>;
-type child_process$execFileCallback = (
- error: ?child_process$Error,
- stdout: string | Buffer,
- stderr: string | Buffer,
-) => void;
+type child_process$execFileCallback =
+ child_process$execCallback;
-type child_process$execFileSyncOpts = {
+type child_process$execFileSyncOpts = Readonly<{
cwd?: string,
input?: string | Buffer | $TypedArray | DataView,
stdio?: string | Array,
- env?: Object,
+ env?: {[key: string]: string | number | void},
uid?: number,
gid?: number,
timeout?: number,
killSignal?: string | number,
maxBuffer?: number,
- encoding?: string,
+ encoding?: buffer$NonBufferEncoding | 'buffer' | string,
windowsHide?: boolean,
shell?: boolean | string,
- ...
-};
+}>;
-type child_process$forkOpts = {
+type child_process$forkOpts = Readonly<{
cwd?: string,
- env?: Object,
+ env?: Readonly<{[key: string]: string | number | void}>,
execPath?: string,
- execArgv?: Array,
+ execArgv?: ReadonlyArray,
silent?: boolean,
- stdio?: Array | string,
+ stdio?:
+ | child_process$StdioPipe
+ | string
+ | Readonly<
+ [
+ child_process$StdioPipe,
+ child_process$StdioPipe,
+ child_process$StdioPipe,
+ ...
+ ],
+ >
+ | Readonly<
+ [
+ child_process$StdioPipe,
+ child_process$StdioPipe,
+ string | number,
+ ...
+ ],
+ >
+ | Readonly<
+ [
+ child_process$StdioPipe,
+ string | number,
+ child_process$StdioPipe,
+ ...
+ ],
+ >
+ | Readonly<
+ [
+ string | number,
+ child_process$StdioPipe,
+ child_process$StdioPipe,
+ ...
+ ],
+ >
+ | Readonly<[child_process$StdioPipe, string | number, string | number, ...]>
+ | Readonly<[string | number, child_process$StdioPipe, string | number, ...]>
+ | Readonly<[string | number, string | number, child_process$StdioPipe, ...]>
+ | Readonly<[string | number, string | number, string | number, ...]>,
windowsVerbatimArguments?: boolean,
uid?: number,
gid?: number,
- ...
-};
+ serialization?: 'json' | 'advanced',
+ killSignal?: string | number,
+ timeout?: number,
+ signal?: AbortSignal,
+}>;
type child_process$Handle = any; // TODO
-type child_process$spawnOpts = {
+type child_process$StdioPipe = 'pipe' | 'overlapped';
+
+type child_process$spawnOpts = Readonly<{
cwd?: string,
- env?: Object,
+ env?: Readonly<{[key: string]: string | number | void}>,
+ encoding?: buffer$NonBufferEncoding | 'buffer' | string,
argv0?: string,
- stdio?: string | Array,
+ stdio?:
+ | child_process$StdioPipe
+ | string
+ | Readonly<
+ [
+ child_process$StdioPipe,
+ child_process$StdioPipe,
+ child_process$StdioPipe,
+ ...
+ ],
+ >
+ | Readonly<
+ [
+ child_process$StdioPipe,
+ child_process$StdioPipe,
+ string | number,
+ ...
+ ],
+ >
+ | Readonly<
+ [
+ child_process$StdioPipe,
+ string | number,
+ child_process$StdioPipe,
+ ...
+ ],
+ >
+ | Readonly<
+ [
+ string | number,
+ child_process$StdioPipe,
+ child_process$StdioPipe,
+ ...
+ ],
+ >
+ | Readonly<[child_process$StdioPipe, string | number, string | number, ...]>
+ | Readonly<[string | number, child_process$StdioPipe, string | number, ...]>
+ | Readonly<[string | number, string | number, child_process$StdioPipe, ...]>
+ | Readonly<[string | number, string | number, string | number, ...]>,
detached?: boolean,
uid?: number,
gid?: number,
shell?: boolean | string,
windowsVerbatimArguments?: boolean,
windowsHide?: boolean,
- ...
-};
+ signal?: AbortSignal,
+ killSignal?: string | number,
+ timeout?: number,
+ serialization?: 'json' | 'advanced',
+}>;
-type child_process$spawnRet = {
+type child_process$spawnSyncRet = Readonly<{
pid: number,
output: Array,
- stdout: Buffer | string,
- stderr: Buffer | string,
+ // TODO: subprocess.stdout may be null in case of error
+ stdout: T,
+ // TODO: subprocess.stderr may be null in case of error
+ stderr: T,
+ // TODO: subprocess.status may be null in case of error or signal
status: number,
- signal: string,
- error: Error,
- ...
-};
+ signal: string | null,
+ error: Error | void,
+}>;
-type child_process$spawnSyncOpts = {
+type child_process$spawnSyncOpts = Readonly<{
cwd?: string,
input?: string | Buffer,
- stdio?: string | Array,
- env?: Object,
+ stdio?: string | ReadonlyArray,
+ env?: Readonly<{[key: string]: string | number | void}>,
uid?: number,
gid?: number,
timeout?: number,
- killSignal?: string,
+ killSignal?: string | number,
maxBuffer?: number,
- encoding?: string,
+ encoding?: buffer$NonBufferEncoding | 'buffer' | string,
shell?: boolean | string,
- ...
-};
-
-type child_process$spawnSyncRet = child_process$spawnRet;
-
-declare class child_process$ChildProcess extends events$EventEmitter {
- channel: Object;
- connected: boolean;
- killed: boolean;
- pid: number;
- exitCode: number | null;
- stderr: stream$Readable;
- stdin: stream$Writable;
- stdio: Array;
- stdout: stream$Readable;
+ windowsHide?: boolean,
+ windowsVerbatimArguments?: boolean,
+}>;
+type child_process$Serializable =
+ | string
+ | number
+ | boolean
+ | bigint
+ | {[key: string]: child_process$Serializable}
+ | Array;
+
+type child_process$SendHandle = net$Server | net$Socket;
+
+declare class child_process$ChildProcessTyped<
+ TStdin: stream$Writable | null,
+ TStdout: stream$Readable | null,
+ TStderr: stream$Readable | null,
+> extends events$EventEmitter
+{
+ +stdin: TStdin;
+ +stdout: TStdout;
+ +stderr: TStderr;
+ +channel: unknown;
+ +stdio: [TStdin, TStdout, TStderr, ...];
+ +killed: boolean;
+ +pid: number;
+ +connected: boolean;
+ +exitCode: number | null;
+ +signalCode: string | null;
+ +spawnargs: Array;
+ +spawnfile: string;
disconnect(): void;
- kill(signal?: string): void;
+ kill(signal?: string | number): boolean;
send(
- message: Object,
- sendHandleOrCallback?: child_process$Handle,
- optionsOrCallback?: Object | Function,
- callback?: Function,
+ message: child_process$Serializable,
+ callback?: (error: Error | null) => void,
+ ): boolean;
+ send(
+ message: child_process$Serializable,
+ sendHandle: child_process$SendHandle,
+ callback?: (error: Error | null) => void,
+ ): boolean;
+ send(
+ message: child_process$Serializable,
+ sendHandle: child_process$SendHandle,
+ options: Readonly<{keepOpen?: boolean}>,
+ callback?: (error: Error | null) => void,
): boolean;
unref(): void;
ref(): void;
}
+/**
+ * @deprecated - Unsafely assumes stdio is piped
+ */
+declare type child_process$ChildProcess = child_process$ChildProcessTyped<
+ stream$Writable,
+ stream$Readable,
+ stream$Readable,
+>;
+
declare module 'child_process' {
- declare var ChildProcess: typeof child_process$ChildProcess;
+ declare type ExecOptions = child_process$execOpts;
+ declare type ExecFileOptions = child_process$execFileOpts;
+ declare type ExecSyncOptions = child_process$execSyncOpts;
+ declare type ForkOptions = child_process$forkOpts;
+ declare type SpawnOptions = child_process$spawnOpts;
+ declare type SpawnSyncOptions = child_process$spawnSyncOpts;
+
+ declare var ChildProcess: typeof child_process$ChildProcessTyped<
+ stream$Writable,
+ stream$Readable,
+ stream$Readable,
+ >;
+
+ type StringOrBuffer =
+ Opts extends Readonly<{encoding: infer E, ...}>
+ ? E extends buffer$NonBufferEncoding
+ ? string
+ : E extends 'buffer'
+ ? Buffer
+ : string | Buffer
+ : Default;
+
+ type StreamForChannel = Channel extends 0
+ ? stream$Writable
+ : stream$Readable;
+
+ type MaybeStream =
+ Opts extends Readonly<{stdio: infer E, ...}>
+ ? E extends child_process$StdioPipe
+ ? StreamForChannel
+ : E extends string
+ ? null
+ : E[FD] extends child_process$StdioPipe
+ ? StreamForChannel
+ : E[FD] extends string | number
+ ? null
+ : null | StreamForChannel
+ : PipeByDefault extends true
+ ? StreamForChannel
+ : null;
declare function exec(
command: string,
- optionsOrCallback?: child_process$execOpts | child_process$execCallback,
- callback?: child_process$execCallback,
- ): child_process$ChildProcess;
-
- declare function execSync(
+ callback?: child_process$execCallback,
+ ): child_process$ChildProcessTyped<
+ stream$Writable,
+ stream$Readable,
+ stream$Readable,
+ >;
+
+ declare function exec(
command: string,
- options: {
- encoding: buffer$NonBufferEncoding,
- ...
- } & child_process$execSyncOpts,
- ): string;
-
- declare function execSync(
+ options: Opts,
+ callback?: child_process$execCallback>,
+ ): child_process$ChildProcessTyped<
+ stream$Writable,
+ stream$Readable,
+ stream$Readable,
+ >;
+
+ declare function execSync(
command: string,
- options?: child_process$execSyncOpts,
): Buffer;
+ declare function execSync(
+ command: string,
+ options: Opts,
+ ): StringOrBuffer;
+
declare function execFile(
file: string,
- argsOrOptionsOrCallback?:
- | Array
- | child_process$execFileOpts
- | child_process$execFileCallback,
- optionsOrCallback?:
- | child_process$execFileOpts
- | child_process$execFileCallback,
- callback?: child_process$execFileCallback,
- ): child_process$ChildProcess;
+ argsOrCallback?:
+ | ReadonlyArray
+ | child_process$execFileCallback,
+ callback?: child_process$execFileCallback,
+ ): child_process$ChildProcessTyped<
+ stream$Writable,
+ stream$Readable,
+ stream$Readable,
+ >;
+
+ declare function execFile(
+ file: string,
+ args: ReadonlyArray,
+ options: Opts,
+ callback?: child_process$execFileCallback>,
+ ): child_process$ChildProcessTyped<
+ stream$Writable,
+ stream$Readable,
+ stream$Readable,
+ >;
+
+ declare function execFile(
+ file: string,
+ options: Opts,
+ callback?: child_process$execFileCallback>,
+ ): child_process$ChildProcessTyped<
+ stream$Writable,
+ stream$Readable,
+ stream$Readable,
+ >;
declare function execFileSync(
command: string,
- argsOrOptions?: Array | child_process$execFileSyncOpts,
- options?: child_process$execFileSyncOpts,
- ): Buffer | string;
+ args?: ReadonlyArray,
+ ): Buffer;
+
+ declare function execFileSync(
+ command: string,
+ args: ReadonlyArray,
+ options: Opts,
+ ): StringOrBuffer;
+
+ declare function execFileSync(
+ command: string,
+ options: Opts,
+ ): StringOrBuffer;
declare function fork(
modulePath: string,
- argsOrOptions?: Array | child_process$forkOpts,
- options?: child_process$forkOpts,
- ): child_process$ChildProcess;
+ args?: ReadonlyArray,
+ ): child_process$ChildProcessTyped;
+
+ declare function fork(
+ modulePath: string,
+ args: ReadonlyArray,
+ options: Opts,
+ ): child_process$ChildProcessTyped<
+ MaybeStream,
+ MaybeStream,
+ MaybeStream,
+ >;
+
+ declare function fork(
+ modulePath: string,
+ options: Opts,
+ ): child_process$ChildProcessTyped<
+ MaybeStream,
+ MaybeStream,
+ MaybeStream,
+ >;
declare function spawn(
command: string,
- argsOrOptions?: Array | child_process$spawnOpts,
- options?: child_process$spawnOpts,
- ): child_process$ChildProcess;
+ args?: ReadonlyArray,
+ ): child_process$ChildProcessTyped<
+ stream$Writable,
+ stream$Readable,
+ stream$Readable,
+ >;
+
+ declare function spawn(
+ command: string,
+ args: ReadonlyArray,
+ options: Opts,
+ ): child_process$ChildProcessTyped<
+ MaybeStream,
+ MaybeStream,
+ MaybeStream,
+ >;
+
+ declare function spawn(
+ command: string,
+ options: Opts,
+ ): child_process$ChildProcessTyped<
+ MaybeStream,
+ MaybeStream,
+ MaybeStream,
+ >;
declare function spawnSync(
command: string,
- argsOrOptions?: Array | child_process$spawnSyncOpts,
- options?: child_process$spawnSyncOpts,
- ): child_process$spawnSyncRet;
+ args?: ReadonlyArray,
+ ): child_process$spawnSyncRet;
+
+ declare function spawnSync(
+ command: string,
+ args: ReadonlyArray,
+ options: Opts,
+ ): child_process$spawnSyncRet>;
+
+ declare function spawnSync(
+ command: string,
+ options: Opts,
+ ): child_process$spawnSyncRet>;
}
declare module 'cluster' {
@@ -597,6 +863,7 @@ declare class crypto$Hash extends stream$Duplex {
data: string | Buffer,
input_encoding?: 'utf8' | 'ascii' | 'latin1' | 'binary',
): crypto$Hash;
+ copy(options?: unknown): crypto$Hash;
}
declare class crypto$Hmac extends stream$Duplex {
@@ -655,6 +922,83 @@ type crypto$key =
...
};
+declare class crypto$KeyObject {
+ +asymmetricKeyType?:
+ | 'rsa'
+ | 'rsa-pss'
+ | 'dsa'
+ | 'ec'
+ | 'ed25519'
+ | 'ed448'
+ | 'x25519'
+ | 'x448';
+ +asymmetricKeySize?: number;
+ +symmetricKeySize?: number;
+ +type: 'secret' | 'public' | 'private';
+
+ export(
+ options: Readonly<{
+ type: 'pkcs1' | 'spki' | 'pkcs8' | 'sec1',
+ format: 'pem',
+ }>,
+ ): string;
+ export(
+ options: Readonly<{
+ type: 'pkcs1' | 'spki' | 'pkcs8' | 'sec1',
+ format: 'der',
+ }>,
+ ): Buffer;
+ export(options: Readonly<{format: 'jwk'}>): unknown;
+ equals(otherKeyObject: crypto$KeyObject): boolean;
+}
+
+declare class crypto$X509Certificate {
+ constructor(buffer: string | Buffer | $TypedArray | DataView): void;
+
+ +ca: boolean;
+ +fingerprint: string;
+ +fingerprint256: string;
+ +fingerprint512: string;
+ +issuer: string;
+ +issuerCertificate?: crypto$X509Certificate;
+ +keyUsage: Array;
+ +publicKey: crypto$KeyObject;
+ +raw: Buffer;
+ +serialNumber: string;
+ +subject: string;
+ +subjectAltName: string;
+ +validFrom: string;
+ +validTo: string;
+ +validFromDate: Date;
+ +validToDate: Date;
+
+ checkEmail(
+ email: string,
+ options?: Readonly<{subject?: 'always' | 'default' | 'never'}>,
+ ): string | void;
+ checkHost(
+ name: string,
+ options?: Readonly<{subject?: 'always' | 'default' | 'never'}>,
+ ): string | void;
+ checkIP(ip: string): string | void;
+ checkIssued(otherCert: crypto$X509Certificate): boolean;
+ checkPrivateKey(privateKey: crypto$KeyObject): boolean;
+ toJSON(): string;
+ toLegacyObject(): unknown;
+ toString(): string;
+ verify(publicKey: crypto$KeyObject): boolean;
+}
+
+declare class crypto$Certificate {
+ static exportChallenge(
+ spkac: string | Buffer | $TypedArray | DataView,
+ ): Buffer;
+ static exportPublicKey(
+ spkac: string | Buffer | $TypedArray | DataView,
+ ): Buffer;
+ static verifySpkac(spkac: Buffer | $TypedArray | DataView): boolean;
+}
+
declare module 'crypto' {
declare var DEFAULT_ENCODING: string;
@@ -808,12 +1152,85 @@ declare module 'crypto' {
callback: (err: ?Error, buffer: Buffer) => void,
): void;
declare function randomUUID(
- options?: $ReadOnly<{|disableEntropyCache?: boolean|}>,
+ options?: Readonly<{disableEntropyCache?: boolean}>,
): string;
declare function timingSafeEqual(
a: Buffer | $TypedArray | DataView,
b: Buffer | $TypedArray | DataView,
): boolean;
+ declare function hash(
+ algorithm: string,
+ data: string | Buffer | $TypedArray | DataView,
+ ): Buffer;
+ declare function hash(
+ algorithm: string,
+ data: string | Buffer | $TypedArray | DataView,
+ outputEncoding: buffer$Encoding,
+ ): string;
+ declare function createSecretKey(
+ key: Buffer | $TypedArray | DataView,
+ ): crypto$KeyObject;
+ declare function createSecretKey(
+ key: string,
+ encoding: buffer$Encoding,
+ ): crypto$KeyObject;
+ declare function createPublicKey(
+ key: string | Buffer | crypto$KeyObject | unknown,
+ ): crypto$KeyObject;
+ declare function createPrivateKey(
+ key: string | Buffer | unknown,
+ ): crypto$KeyObject;
+ declare function generateKeyPair(
+ type:
+ | 'rsa'
+ | 'rsa-pss'
+ | 'dsa'
+ | 'ec'
+ | 'ed25519'
+ | 'ed448'
+ | 'x25519'
+ | 'x448',
+ options: unknown,
+ callback: (
+ err: ?Error,
+ publicKey: crypto$KeyObject,
+ privateKey: crypto$KeyObject,
+ ) => void,
+ ): void;
+ declare function generateKeyPairSync(
+ type:
+ | 'rsa'
+ | 'rsa-pss'
+ | 'dsa'
+ | 'ec'
+ | 'ed25519'
+ | 'ed448'
+ | 'x25519'
+ | 'x448',
+ options: unknown,
+ ): {publicKey: crypto$KeyObject, privateKey: crypto$KeyObject, ...};
+ declare function generateKey(
+ type: 'hmac' | 'aes',
+ options: Readonly<{length: number}>,
+ callback: (err: ?Error, key: crypto$KeyObject) => void,
+ ): void;
+ declare function generateKeySync(
+ type: 'hmac' | 'aes',
+ options: Readonly<{length: number}>,
+ ): crypto$KeyObject;
+ declare function checkPrime(
+ candidate: Buffer | $TypedArray | DataView | bigint,
+ options?: Readonly<{checks?: number}>,
+ callback: (err: ?Error, result: boolean) => void,
+ ): void;
+ declare function checkPrimeSync(
+ candidate: Buffer | $TypedArray | DataView | bigint,
+ options?: Readonly<{checks?: number}>,
+ ): boolean;
+ declare class Certificate extends crypto$Certificate {}
+ declare class X509Certificate extends crypto$X509Certificate {}
+ declare class KeyObject extends crypto$KeyObject {}
+ declare var webcrypto: unknown;
}
type net$Socket$address = {
@@ -841,7 +1258,7 @@ declare class dgram$Socket extends events$EventEmitter {
msg: Buffer,
port: number,
address: string,
- callback?: (err: ?Error, bytes: any) => mixed,
+ callback?: (err: ?Error, bytes: any) => unknown,
): void;
send(
msg: Buffer,
@@ -849,7 +1266,7 @@ declare class dgram$Socket extends events$EventEmitter {
length: number,
port: number,
address: string,
- callback?: (err: ?Error, bytes: any) => mixed,
+ callback?: (err: ?Error, bytes: any) => unknown,
): void;
setBroadcast(flag: boolean): void;
setMulticastLoopback(flag: boolean): void;
@@ -1044,6 +1461,8 @@ declare module 'fs' {
declare class FSWatcher extends events$EventEmitter {
close(): void;
+ ref(): this;
+ unref(): this;
}
declare class ReadStream extends stream$Readable {
@@ -1057,6 +1476,7 @@ declare module 'fs' {
declare class Dirent {
name: string | Buffer;
+ parentPath: string;
isBlockDevice(): boolean;
isCharacterDevice(): boolean;
@@ -1290,12 +1710,24 @@ declare module 'fs' {
declare function mkdtempSync(prefix: string): string;
declare function readdir(
path: string,
- options: string | {encoding?: string, withFileTypes?: false, ...},
+ options:
+ | string
+ | Readonly<{
+ encoding?: string,
+ recursive?: boolean,
+ withFileTypes?: false,
+ ...
+ }>,
callback: (err: ?ErrnoError, files: Array) => void,
): void;
declare function readdir(
path: string,
- options: {encoding?: string, withFileTypes: true, ...},
+ options: Readonly<{
+ encoding?: string,
+ recursive?: boolean,
+ withFileTypes: true,
+ ...
+ }>,
callback: (err: ?ErrnoError, files: Array) => void,
): void;
declare function readdir(
@@ -1304,11 +1736,23 @@ declare module 'fs' {
): void;
declare function readdirSync(
path: string,
- options?: string | {encoding?: string, withFileTypes?: false, ...},
+ options?:
+ | string
+ | Readonly<{
+ encoding?: string,
+ recursive?: boolean,
+ withFileTypes?: false,
+ }>,
): Array;
declare function readdirSync(
path: string,
- options?: string | {encoding?: string, withFileTypes: true, ...},
+ options?:
+ | string
+ | Readonly<{
+ encoding?: string,
+ recursive?: boolean,
+ withFileTypes: true,
+ }>,
): Array;
declare function close(
fd: number,
@@ -1326,6 +1770,29 @@ declare module 'fs' {
flags: string | number,
callback: (err: ?ErrnoError, fd: number) => void,
): void;
+ declare function openAsBlob(
+ path: string | Buffer | URL,
+ options?: Readonly<{
+ type?: string, // Optional MIME type hint
+ }>,
+ ): Promise;
+ declare function opendir(
+ path: string,
+ options?: Readonly<{
+ encoding?: string,
+ bufferSize?: number,
+ recursive?: boolean,
+ }>,
+ callback: (err: ?ErrnoError, dir: Dir) => void,
+ ): void;
+ declare function opendirSync(
+ path: string,
+ options?: Readonly<{
+ encoding?: string,
+ bufferSize?: number,
+ recursive?: boolean,
+ }>,
+ ): Dir;
declare function openSync(
path: string | Buffer,
flags: string | number,
@@ -1544,7 +2011,15 @@ declare module 'fs' {
): void;
declare function watchFile(
filename: string,
- options?: Object,
+ listener?: (curr: Stats, prev: Stats) => void,
+ ): void;
+ declare function watchFile(
+ filename: string,
+ options?: Readonly<{
+ bigint?: boolean,
+ persistent?: boolean,
+ interval?: number,
+ }>,
listener?: (curr: Stats, prev: Stats) => void,
): void;
declare function unwatchFile(
@@ -1553,7 +2028,16 @@ declare module 'fs' {
): void;
declare function watch(
filename: string,
- options?: Object,
+ listener?: (event: string, filename: string) => void,
+ ): FSWatcher;
+ declare function watch(
+ filename: string,
+ options?: Readonly<{
+ persistent?: boolean,
+ recursive?: boolean,
+ encoding?: string,
+ signal?: AbortSignal,
+ }>,
listener?: (event: string, filename: string) => void,
): FSWatcher;
declare function exists(
@@ -1593,6 +2077,105 @@ declare module 'fs' {
dest: string,
flags?: number,
): void;
+ declare function cp(
+ src: string | URL,
+ dest: string | URL,
+ options: Readonly<{
+ dereference?: boolean,
+ errorOnExist?: boolean,
+ filter?: (src: string, dest: string) => boolean | Promise,
+ force?: boolean,
+ mode?: number,
+ preserveTimestamps?: boolean,
+ recursive?: boolean,
+ verbatimSymlinks?: boolean,
+ }>,
+ callback: (err: ?Error) => void,
+ ): void;
+ declare function cp(
+ src: string | URL,
+ dest: string | URL,
+ callback: (err: ?Error) => void,
+ ): void;
+ declare function cpSync(
+ src: string | URL,
+ dest: string | URL,
+ options?: Readonly<{
+ dereference?: boolean,
+ errorOnExist?: boolean,
+ filter?: (src: string, dest: string) => boolean,
+ force?: boolean,
+ mode?: number,
+ preserveTimestamps?: boolean,
+ recursive?: boolean,
+ verbatimSymlinks?: boolean,
+ }>,
+ ): void;
+
+ declare type GlobOptions = Readonly<{
+ /**
+ * Current working directory.
+ * @default process.cwd()
+ */
+ cwd?: string | void,
+ /**
+ * `true` if the glob should return paths as `Dirent`s, `false` otherwise.
+ * @default false
+ * @since v22.2.0
+ */
+ withFileTypes?: WithFileTypes,
+ /**
+ * Function to filter out files/directories or a
+ * list of glob patterns to be excluded. If a function is provided, return
+ * `true` to exclude the item, `false` to include it.
+ * @default undefined
+ */
+ exclude?:
+ | ((fileName: Node$Conditional) => boolean)
+ | ReadonlyArray,
+ ...
+ }>;
+
+ /**
+ * Retrieves the files matching the specified pattern.
+ *
+ * ```js
+ * import { glob } from 'node:fs';
+ *
+ * glob('*.js', (err, matches) => {
+ * if (err) throw err;
+ * console.log(matches);
+ * });
+ * ```
+ * @since v22.0.0
+ */
+ declare function glob(
+ pattern: string | ReadonlyArray,
+ callback: (err: ?ErrnoError, matches: Array) => void,
+ ): void;
+
+ declare function glob(
+ pattern: string | ReadonlyArray,
+ options: GlobOptions,
+ callback: (
+ err: ?ErrnoError,
+ matches: Node$Conditional, Array>,
+ ) => void,
+ ): void;
+
+ /**
+ * ```js
+ * import { globSync } from 'node:fs';
+ *
+ * console.log(globSync('*.js'));
+ * ```
+ * @since v22.0.0
+ * @returns paths of files that match the pattern.
+ */
+ declare function globSync(
+ pattern: string | ReadonlyArray,
+ options?: GlobOptions,
+ ): Node$Conditional, Array>;
declare var F_OK: number;
declare var R_OK: number;
@@ -1658,14 +2241,52 @@ declare module 'fs' {
retryDelay?: number,
...
};
+ declare class Dir {
+ +path: string;
+ close(): Promise;
+ closeSync(): void;
+ read(): Promise;
+ read(cb: (err?: Error, dirent: ?Dirent) => void): void;
+ readSync(): ?Dirent;
+ @@asyncIterator(): AsyncIterator;
+ }
+ type AppendOrWriteToFileHandle = (
+ data:
+ | string
+ | Buffer
+ | Uint8Array
+ | DataView
+ | AsyncIterable
+ | Iterable
+ | stream$Readable,
+ options: WriteOptions | string,
+ ) => Promise;
declare class FileHandle {
- appendFile(
- data: string | Buffer,
- options: WriteOptions | string,
- ): Promise;
+ appendFile: AppendOrWriteToFileHandle;
chmod(mode: number): Promise;
chown(uid: number, guid: number): Promise;
close(): Promise;
+ createReadStream(
+ options?: Readonly<{
+ encoding?: string,
+ autoClose?: boolean,
+ emitClose?: boolean,
+ start?: number,
+ end?: number,
+ highWaterMark?: number,
+ signal?: AbortSignal,
+ }>,
+ ): ReadStream;
+ createWriteStream(
+ options?: Readonly<{
+ encoding?: string,
+ autoClose?: boolean,
+ emitClose?: boolean,
+ start?: number,
+ highWaterMark?: number,
+ flush?: boolean,
+ }>,
+ ): WriteStream;
datasync(): Promise;
fd: number;
read(
@@ -1678,8 +2299,25 @@ declare module 'fs' {
buffer: T,
...
}>;
+ readableWebStream(
+ options?: Readonly<{autoClose?: boolean}>,
+ ): ReadableStream;
readFile(options: EncodingFlag): Promise;
readFile(options: string): Promise;
+ readLines(
+ options?: Readonly<{
+ encoding?: string,
+ autoClose?: boolean,
+ emitClose?: boolean,
+ start?: number,
+ end?: number,
+ highWaterMark?: number,
+ }>,
+ ): readline$Interface;
+ readv | Array | Array>(
+ buffers: T,
+ position?: number | null,
+ ): Promise<{buffers: T, bytesRead: number}>;
stat(): Promise;
sync(): Promise;
truncate(len?: number): Promise;
@@ -1688,15 +2326,24 @@ declare module 'fs' {
mtime: number | string | Date,
): Promise;
write(
- buffer: Buffer | Uint8Array,
+ buffer: Buffer | Uint8Array | DataView,
offset: number,
length: number,
position: number,
): Promise;
- writeFile(
- data: string | Buffer | Uint8Array,
- options: WriteOptions | string,
+ write(
+ buffer: Buffer | Uint8Array | DataView,
+ options?: Readonly<{
+ offset?: number,
+ length?: number,
+ position?: number,
+ }>,
): Promise;
+ writeFile: AppendOrWriteToFileHandle;
+ writev | Array | Array>(
+ buffers: T,
+ position?: number | null,
+ ): Promise<{buffers: T, bytesWritten: number}>;
}
declare type FSPromisePath = string | Buffer | URL;
@@ -1714,6 +2361,20 @@ declare module 'fs' {
dest: FSPromisePath,
flags?: number,
): Promise,
+ cp(
+ src: string | URL,
+ dest: string | URL,
+ options?: Readonly<{
+ dereference?: boolean,
+ errorOnExist?: boolean,
+ filter?: (src: string, dest: string) => boolean | Promise,
+ force?: boolean,
+ mode?: number,
+ preserveTimestamps?: boolean,
+ recursive?: boolean,
+ verbatimSymlinks?: boolean,
+ }>,
+ ): Promise,
fchmod(filehandle: FileHandle, mode: number): Promise,
fchown(filehandle: FileHandle, uid: number, guid: number): Promise,
fdatasync(filehandle: FileHandle): Promise,
@@ -1725,6 +2386,14 @@ declare module 'fs' {
atime: number | string | Date,
mtime: number | string | Date,
): Promise,
+ glob(
+ pattern: string | ReadonlyArray,
+ options?: GlobOptions,
+ ): Node$Conditional<
+ WithFileTypes,
+ AsyncIterator,
+ AsyncIterator,
+ >,
lchmod(path: FSPromisePath, mode: number): Promise,
lchown(path: FSPromisePath, uid: number, guid: number): Promise,
link(existingPath: FSPromisePath, newPath: FSPromisePath): Promise,
@@ -1745,6 +2414,14 @@ declare module 'fs' {
flags?: string | number,
mode?: number,
): Promise,
+ opendir(
+ path: string,
+ options?: Readonly<{
+ encoding?: string,
+ bufferSize?: number,
+ recursive?: boolean,
+ }>,
+ ): Promise,
read(
filehandle: FileHandle,
buffer: T,
@@ -1758,11 +2435,21 @@ declare module 'fs' {
}>,
readdir: ((
path: FSPromisePath,
- options: string | {encoding?: string, withFileTypes?: false, ...},
+ options:
+ | string
+ | Readonly<{
+ encoding?: string,
+ recursive?: boolean,
+ withFileTypes?: false,
+ }>,
) => Promise>) &
((
path: FSPromisePath,
- options: {encoding?: string, withFileTypes: true, ...},
+ options: Readonly<{
+ encoding?: string,
+ recursive?: boolean,
+ withFileTypes: true,
+ }>,
) => Promise>) &
((path: FSPromisePath) => Promise>),
readFile: ((
@@ -1805,6 +2492,17 @@ declare module 'fs' {
atime: number | string | Date,
mtime: number | string | Date,
): Promise,
+ watch(
+ filename: FSPromisePath,
+ options?: Readonly<{
+ persistent?: boolean,
+ recursive?: boolean,
+ encoding?: string,
+ signal?: AbortSignal,
+ maxQueue?: number,
+ overflow?: 'ignore' | 'throw',
+ }>,
+ ): AsyncIterator<{eventType: string, filename: ?string}>,
write(
filehandle: FileHandle,
buffer: T,
@@ -1827,6 +2525,10 @@ declare module 'fs' {
declare var promises: FSPromise;
}
+declare module 'fs/promises' {
+ declare module.exports: $Exports<'fs'>['promises'];
+}
+
type http$agentOptions = {
keepAlive?: boolean,
keepAliveMsecs?: number,
@@ -1838,7 +2540,8 @@ type http$agentOptions = {
declare class http$Agent<+SocketT = net$Socket> {
constructor(options: http$agentOptions): void;
destroy(): void;
- freeSockets: {[name: string]: $ReadOnlyArray, ...};
+ // $FlowFixMe[incompatible-variance]
+ freeSockets: {[name: string]: ReadonlyArray, ...};
getName(options: {
host: string,
port: number,
@@ -1847,8 +2550,10 @@ declare class http$Agent<+SocketT = net$Socket> {
}): string;
maxFreeSockets: number;
maxSockets: number;
- requests: {[name: string]: $ReadOnlyArray>, ...};
- sockets: {[name: string]: $ReadOnlyArray, ...};
+ // $FlowFixMe[incompatible-variance]
+ requests: {[name: string]: ReadonlyArray>, ...};
+ // $FlowFixMe[incompatible-variance]
+ sockets: {[name: string]: ReadonlyArray, ...};
}
declare class http$IncomingMessage
@@ -1939,7 +2644,7 @@ declare class http$Server extends net$Server {
callback?: Function,
): this;
listening: boolean;
- close(callback?: (error: ?Error) => mixed): this;
+ close(callback?: (error: ?Error) => unknown): this;
closeAllConnections(): void;
closeIdleConnections(): void;
maxHeadersCount: number;
@@ -1975,7 +2680,7 @@ declare class https$Server extends tls$Server {
},
callback?: Function,
): this;
- close(callback?: (error: ?Error) => mixed): this;
+ close(callback?: (error: ?Error) => unknown): this;
closeAllConnections(): void;
closeIdleConnections(): void;
keepAliveTimeout: number;
@@ -1988,7 +2693,7 @@ type requestOptions = {|
auth?: string,
defaultPort?: number,
family?: number,
- headers?: {[key: string]: mixed, ...},
+ headers?: {[key: string]: unknown, ...},
host?: string,
hostname?: string,
localAddress?: string,
@@ -2126,14 +2831,14 @@ declare class net$Socket extends stream$Duplex {
bufferSize: number;
bytesRead: number;
bytesWritten: number;
- connect(path: string, connectListener?: () => mixed): net$Socket;
+ connect(path: string, connectListener?: () => unknown): net$Socket;
connect(
port: number,
host?: string,
- connectListener?: () => mixed,
+ connectListener?: () => unknown,
): net$Socket;
- connect(port: number, connectListener?: () => mixed): net$Socket;
- connect(options: Object, connectListener?: () => mixed): net$Socket;
+ connect(port: number, connectListener?: () => unknown): net$Socket;
+ connect(options: Object, connectListener?: () => unknown): net$Socket;
destroyed: boolean;
end(
chunkOrEncodingOrCallback?:
@@ -2193,7 +2898,7 @@ type net$connectOptions = {
domain: string,
options?: ?number | ?Object,
callback?: (err: ?Error, address: string, family: number) => void,
- ) => mixed,
+ ) => unknown,
path?: string,
...
};
@@ -2241,9 +2946,7 @@ type os$CPU = {
nice: number,
sys: number,
user: number,
- ...
},
- ...
};
type os$NetIFAddr = {
@@ -2252,7 +2955,8 @@ type os$NetIFAddr = {
internal: boolean,
mac: string,
netmask: string,
- ...
+ scopeid?: number,
+ cidr: ?string,
};
type os$UserInfo$buffer = {
@@ -2261,7 +2965,6 @@ type os$UserInfo$buffer = {
username: Buffer,
homedir: Buffer,
shell: ?Buffer,
- ...
};
type os$UserInfo$string = {
@@ -2270,43 +2973,117 @@ type os$UserInfo$string = {
username: string,
homedir: string,
shell: ?string,
- ...
};
declare module 'os' {
- declare function arch(): 'x64' | 'arm' | 'ia32';
+ declare function arch():
+ | 'arm'
+ | 'arm64'
+ | 'ia32'
+ | 'loong64'
+ | 'mips'
+ | 'mipsel'
+ | 'ppc64'
+ | 'riscv64'
+ | 's390x'
+ | 'x64';
declare function availableParallelism(): number;
declare function cpus(): Array;
declare function endianness(): 'BE' | 'LE';
declare function freemem(): number;
+ declare function getPriority(pid?: number): number;
declare function homedir(): string;
declare function hostname(): string;
declare function loadavg(): [number, number, number];
+ declare function machine(): string;
declare function networkInterfaces(): {
[ifName: string]: Array,
- ...
};
- declare function platform(): string;
+ declare function platform():
+ | 'aix'
+ | 'android'
+ | 'darwin'
+ | 'freebsd'
+ | 'haiku'
+ | 'linux'
+ | 'openbsd'
+ | 'sunos'
+ | 'win32'
+ | 'cygwin';
declare function release(): string;
+ declare function setPriority(priority: number): void;
+ declare function setPriority(pid: number, priority: number): void;
declare function tmpdir(): string;
declare function totalmem(): number;
declare function type(): string;
declare function uptime(): number;
- declare function userInfo(options: {
- encoding: 'buffer',
- ...
- }): os$UserInfo$buffer;
- declare function userInfo(options?: {
- encoding: 'utf8',
- ...
- }): os$UserInfo$string;
+ declare function userInfo(
+ options: Readonly<{
+ encoding: 'buffer',
+ }>,
+ ): os$UserInfo$buffer;
+ declare function userInfo(
+ options?: Readonly<{
+ encoding: 'utf8',
+ }>,
+ ): os$UserInfo$string;
+ declare function version(): string;
declare var EOL: string;
+ declare var devNull: string;
+ declare var constants: Readonly<{
+ signals: {[key: string]: number, ...},
+ errno: {[key: string]: number, ...},
+ priority: Readonly<{
+ PRIORITY_LOW: number,
+ PRIORITY_BELOW_NORMAL: number,
+ PRIORITY_NORMAL: number,
+ PRIORITY_ABOVE_NORMAL: number,
+ PRIORITY_HIGH: number,
+ PRIORITY_HIGHEST: number,
+ }>,
+ dlopen: {[key: string]: number, ...},
+ }>;
}
+type path$PlatformPath = {
+ normalize(path: string): string,
+ join(...parts: Array): string,
+ resolve(...parts: Array): string,
+ matchesGlob(path: string, pattern: string): boolean,
+ isAbsolute(path: string): boolean,
+ relative(from: string, to: string): string,
+ dirname(path: string): string,
+ basename(path: string, ext?: string): string,
+ extname(path: string): string,
+ sep: string,
+ delimiter: string,
+ parse(pathString: string): Readonly<{
+ root: string,
+ dir: string,
+ base: string,
+ ext: string,
+ name: string,
+ }>,
+ format(
+ pathObject: Readonly<{
+ root?: string,
+ dir?: string,
+ base?: string,
+ ext?: string,
+ name?: string,
+ }>,
+ ): string,
+ toNamespacedPath(path: string): string,
+ posix: path$PlatformPath,
+ win32: path$PlatformPath,
+ ...
+};
+
declare module 'path' {
declare function normalize(path: string): string;
declare function join(...parts: Array): string;
declare function resolve(...parts: Array): string;
+ declare function matchesGlob(path: string, pattern: string): boolean;
declare function isAbsolute(path: string): boolean;
declare function relative(from: string, to: string): string;
declare function dirname(path: string): string;
@@ -2320,18 +3097,221 @@ declare module 'path' {
base: string,
ext: string,
name: string,
- ...
};
- declare function format(pathObject: {
- root?: string,
- dir?: string,
- base?: string,
- ext?: string,
- name?: string,
- ...
- }): string;
- declare var posix: any;
- declare var win32: any;
+ declare function format(
+ pathObject: Readonly<{
+ root?: string,
+ dir?: string,
+ base?: string,
+ ext?: string,
+ name?: string,
+ }>,
+ ): string;
+ declare function toNamespacedPath(path: string): string;
+ declare var posix: path$PlatformPath;
+ declare var win32: path$PlatformPath;
+}
+
+declare module 'perf_hooks' {
+ declare export type EntryType =
+ | 'function'
+ | 'gc'
+ | 'http'
+ | 'http2'
+ | 'mark'
+ | 'measure'
+ | 'navigation'
+ | 'node'
+ | 'resource';
+
+ declare export interface Histogram {
+ +count: number;
+ +countBigInt: bigint;
+ +exceeds: number;
+ +exceedsBigInt: bigint;
+ +max: number;
+ +maxBigInt: bigint;
+ +mean: number;
+ +min: number;
+ +minBigInt: bigint;
+ +stddev: number;
+ +percentiles: Map;
+ +percentilesBigInt: Map;
+ percentile(percentile: number): number;
+ percentileBigInt(percentile: number): bigint;
+ reset(): void;
+ }
+
+ declare export interface IntervalHistogram extends Histogram {
+ enable(): boolean;
+ disable(): boolean;
+ }
+
+ declare export interface RecordableHistogram extends Histogram {
+ record(val: number | bigint): void;
+ recordDelta(): void;
+ }
+
+ declare export class PerformanceEntry {
+ +duration: number;
+ +entryType: EntryType;
+ +name: string;
+ +startTime: number;
+ +detail?: unknown;
+ toJSON(): unknown;
+ }
+
+ declare export class PerformanceMark extends PerformanceEntry {
+ +entryType: 'mark';
+ +duration: 0;
+ +detail?: T;
+ }
+
+ declare export class PerformanceMeasure
+ extends PerformanceEntry
+ {
+ +entryType: 'measure';
+ +detail?: T;
+ }
+
+ declare export class PerformanceNodeEntry extends PerformanceEntry {
+ +entryType: 'node';
+ }
+
+ declare export class PerformanceNodeTiming extends PerformanceEntry {
+ +entryType: 'node';
+ +bootstrapComplete: number;
+ +environment: number;
+ +idleTime: number;
+ +loopExit: number;
+ +loopStart: number;
+ +nodeStart: number;
+ +v8Start: number;
+ }
+
+ declare export class PerformanceResourceTiming extends PerformanceEntry {
+ +entryType: 'resource';
+ +connectEnd: number;
+ +connectStart: number;
+ +decodedBodySize: number;
+ +domainLookupEnd: number;
+ +domainLookupStart: number;
+ +encodedBodySize: number;
+ +fetchStart: number;
+ +redirectEnd: number;
+ +redirectStart: number;
+ +requestStart: number;
+ +responseEnd: number;
+ +secureConnectionStart: number;
+ +transferSize: number;
+ +workerStart: number;
+ }
+
+ declare export class PerformanceObserverEntryList {
+ getEntries(): Array;
+ getEntriesByName(name: string, type?: EntryType): Array;
+ getEntriesByType(type: EntryType): Array;
+ }
+
+ declare export type PerformanceObserverCallback = (
+ list: PerformanceObserverEntryList,
+ observer: PerformanceObserver,
+ ) => void;
+
+ declare export class PerformanceObserver {
+ static supportedEntryTypes: ReadonlyArray;
+ constructor(callback: PerformanceObserverCallback): this;
+ observe(
+ options: Readonly<{
+ entryTypes?: ReadonlyArray,
+ type?: EntryType,
+ buffered?: boolean,
+ }>,
+ ): void;
+ disconnect(): void;
+ takeRecords(): Array;
+ }
+
+ declare export type EventLoopUtilization = {
+ +utilization: number,
+ +idle: number,
+ +active: number,
+ };
+
+ declare export type PerformanceMarkOptions = Readonly<{
+ detail?: T,
+ startTime?: number,
+ }>;
+
+ declare export type PerformanceMeasureOptions = Readonly<{
+ detail?: T,
+ duration?: number,
+ end?: number | string,
+ start?: number | string,
+ }>;
+
+ declare class Performance {
+ clearMarks(name?: string): void;
+ clearMeasures(name?: string): void;
+ clearResourceTimings(name?: string): void;
+ eventLoopUtilization(
+ elu1?: EventLoopUtilization,
+ elu2?: EventLoopUtilization,
+ ): EventLoopUtilization;
+ getEntries(): Array;
+ getEntriesByName(name: string, type?: EntryType): Array;
+ getEntriesByType(type: EntryType): Array;
+ mark(
+ name: string,
+ options?: PerformanceMarkOptions,
+ ): PerformanceMark;
+ measure(
+ name: string,
+ startMarkOrOptions?: string | PerformanceMeasureOptions,
+ endMark?: string,
+ ): PerformanceMeasure;
+ +nodeTiming: PerformanceNodeTiming;
+ now(): number;
+ setResourceTimingBufferSize(maxSize: number): void;
+ +timeOrigin: number;
+ timerify, TReturn>(
+ fn: (...TArgs) => TReturn,
+ options?: Readonly<{histogram?: RecordableHistogram}>,
+ ): (...TArgs) => TReturn;
+ toJSON(): unknown;
+ }
+
+ declare export var performance: Performance;
+
+ declare export var constants: Readonly<{
+ NODE_PERFORMANCE_GC_MAJOR: number,
+ NODE_PERFORMANCE_GC_MINOR: number,
+ NODE_PERFORMANCE_GC_INCREMENTAL: number,
+ NODE_PERFORMANCE_GC_WEAKCB: number,
+ NODE_PERFORMANCE_GC_FLAGS_NO: number,
+ NODE_PERFORMANCE_GC_FLAGS_CONSTRUCT_RETAINED: number,
+ NODE_PERFORMANCE_GC_FLAGS_FORCED: number,
+ NODE_PERFORMANCE_GC_FLAGS_SYNCHRONOUS_PHANTOM_PROCESSING: number,
+ NODE_PERFORMANCE_GC_FLAGS_ALL_AVAILABLE_GARBAGE: number,
+ NODE_PERFORMANCE_GC_FLAGS_ALL_EXTERNAL_MEMORY: number,
+ NODE_PERFORMANCE_GC_FLAGS_SCHEDULE_IDLE: number,
+ }>;
+
+ declare export function monitorEventLoopDelay(
+ options?: Readonly<{resolution?: number}>,
+ ): IntervalHistogram;
+
+ declare export function createHistogram(
+ options?: Readonly<{
+ lowest?: number | bigint,
+ highest?: number | bigint,
+ figures?: number,
+ }>,
+ ): RecordableHistogram;
+}
+
+declare module 'process' {
+ declare module.exports: Process;
}
declare module 'punycode' {
@@ -2457,7 +3437,14 @@ declare class stream$Readable extends stream$Stream {
static from(
iterable: Iterable | AsyncIterable,
options?: readableStreamOptions,
- ): stream$Readable;
+ ): this;
+
+ static fromWeb(
+ readableStream: ReadableStream,
+ options?: readableStreamOptions,
+ ): this;
+
+ static toWeb(streamReadable: stream$Readable): ReadableStream;
constructor(options?: readableStreamOptions): void;
destroy(error?: Error): this;
@@ -2504,6 +3491,13 @@ type writableStreamOptions = {
...
};
declare class stream$Writable extends stream$Stream {
+ static fromWeb(
+ writableStream: WritableStream,
+ options?: writableStreamOptions,
+ ): this;
+
+ static toWeb(streamWritable: stream$Writable): WritableStream;
+
constructor(options?: writableStreamOptions): void;
cork(): void;
destroy(error?: Error): this;
@@ -2545,10 +3539,6 @@ declare class stream$Writable extends stream$Stream {
_final(callback: (error?: Error) => void): void;
}
-//According to the NodeJS docs:
-//"Since JavaScript doesn't have multiple prototypal inheritance, this class
-//prototypally inherits from Readable, and then parasitically from Writable."
-//Source: ,
+ options?: duplexStreamOptions,
+ ): this;
+
+ // $FlowFixMe[incompatible-type] See above
+ static toWeb(streamDuplex: stream$Duplex): {
+ readable: ReadableStream,
+ writable: WritableStream,
+ ...
+ };
+
constructor(options?: duplexStreamOptions): void;
}
type transformStreamOptions = duplexStreamOptions & {
@@ -2704,7 +3716,7 @@ declare module 'stream' {
options?: StreamPipelineOptions,
): Promise,
pipeline(
- streams: $ReadOnlyArray,
+ streams: ReadonlyArray,
options?: StreamPipelineOptions,
): Promise,
...
@@ -2811,7 +3823,7 @@ type tls$connectOptions = {
domain: string,
options?: ?number | ?Object,
callback?: (err: ?Error, address: string, family: number) => void,
- ) => mixed,
+ ) => unknown,
requestOCSP?: boolean,
...
};
@@ -2945,6 +3957,75 @@ type url$urlObject = {
...
};
+declare module 'timers' {
+ declare export class Timeout {
+ close(): this;
+ hasRef(): boolean;
+ ref(): this;
+ refresh(): this;
+ unref(): this;
+ [key: $SymbolToPrimitive]: () => number;
+ // [key: $SymbolDispose]: () => void;
+ }
+
+ declare export class Immediate {
+ hasRef(): boolean;
+ ref(): this;
+ unref(): this;
+ // [key: $SymbolDispose]: () => void;
+ }
+
+ declare export function setTimeout>(
+ callback: (...args: TArgs) => unknown,
+ delay?: number,
+ ...args: TArgs
+ ): Timeout;
+
+ declare export function setInterval>(
+ callback: (...args: TArgs) => unknown,
+ delay?: number,
+ ...args: TArgs
+ ): Timeout;
+
+ declare export function setImmediate>(
+ callback: (...args: TArgs) => unknown,
+ ...args: TArgs
+ ): Immediate;
+
+ declare export function clearTimeout(timeout?: Timeout | number): void;
+ declare export function clearInterval(timeout?: Timeout | number): void;
+ declare export function clearImmediate(immediate?: Immediate | number): void;
+}
+
+declare module 'timers/promises' {
+ declare export type TimerOptions = Readonly<{
+ ref?: boolean,
+ signal?: AbortSignal,
+ }>;
+
+ declare export function setTimeout(
+ delay?: number,
+ value?: T,
+ options?: TimerOptions,
+ ): Promise;
+
+ declare export function setImmediate(
+ value?: T,
+ options?: TimerOptions,
+ ): Promise;
+
+ declare export function setInterval(
+ delay?: number,
+ value?: T,
+ options?: TimerOptions,
+ ): AsyncIterator;
+
+ declare export var scheduler: Readonly<{
+ wait(delay: number, options?: TimerOptions): Promise,
+ yield(): Promise,
+ }>;
+}
+
declare module 'url' {
declare type Url = {|
protocol: string | null,
@@ -2990,8 +4071,16 @@ declare module 'url' {
declare function resolve(from: string, to: string): string;
declare function domainToASCII(domain: string): string;
declare function domainToUnicode(domain: string): string;
- declare function pathToFileURL(path: string): url$urlObject;
- declare function fileURLToPath(path: url$urlObject | string): string;
+
+ declare function pathToFileURL(
+ path: string,
+ options?: Readonly<{windows?: boolean}>,
+ ): url$urlObject;
+
+ declare function fileURLToPath(
+ path: url$urlObject | string,
+ options?: Readonly<{windows?: boolean}>,
+ ): string;
declare class URLSearchParams {
@@iterator(): Iterator<[string, string]>;
@@ -3013,7 +4102,7 @@ declare module 'url' {
value: string,
name: string,
searchParams: URLSearchParams,
- ) => mixed,
+ ) => unknown,
thisArg?: This,
): void;
get(name: string): string | null;
@@ -3027,6 +4116,7 @@ declare module 'url' {
}
declare class URL {
static canParse(url: string, base?: string): boolean;
+ static parse(input: string, base?: string): URL | null;
static createObjectURL(blob: Blob): string;
static createObjectURL(mediaSource: MediaSource): string;
static revokeObjectURL(url: string): void;
@@ -3046,6 +4136,63 @@ declare module 'url' {
toString(): string;
toJSON(): string;
}
+
+ declare type url$URLPatternInit = {
+ protocol?: string,
+ username?: string,
+ password?: string,
+ hostname?: string,
+ port?: string,
+ pathname?: string,
+ search?: string,
+ hash?: string,
+ baseURL?: string,
+ };
+
+ declare type url$URLPatternComponentResult = {
+ input: string,
+ groups: {[key: string]: string | void},
+ };
+
+ declare type url$URLPatternResult = {
+ inputs: ReadonlyArray,
+ protocol: url$URLPatternComponentResult,
+ username: url$URLPatternComponentResult,
+ password: url$URLPatternComponentResult,
+ hostname: url$URLPatternComponentResult,
+ port: url$URLPatternComponentResult,
+ pathname: url$URLPatternComponentResult,
+ search: url$URLPatternComponentResult,
+ hash: url$URLPatternComponentResult,
+ };
+
+ declare class URLPattern {
+ constructor(
+ input?: string | url$URLPatternInit,
+ options?: Readonly<{ignoreCase?: boolean}>,
+ ): void;
+ constructor(
+ input: string | url$URLPatternInit,
+ baseURL: string,
+ options?: Readonly<{ignoreCase?: boolean}>,
+ ): void;
+
+ +hasRegExpGroups: boolean;
+ +hash: string;
+ +hostname: string;
+ +password: string;
+ +pathname: string;
+ +port: string;
+ +protocol: string;
+ +search: string;
+ +username: string;
+
+ exec(
+ input?: string | url$URLPatternInit,
+ baseURL?: string,
+ ): url$URLPatternResult | null;
+ test(input?: string | url$URLPatternInit, baseURL?: string): boolean;
+ }
}
type util$InspectOptions = {
@@ -3057,30 +4204,30 @@ type util$InspectOptions = {
};
declare type util$ParseArgsOption =
- | {|
+ | Readonly<{
type: 'boolean',
multiple?: false,
short?: string,
default?: boolean,
- |}
- | {|
+ }>
+ | Readonly<{
type: 'boolean',
multiple: true,
short?: string,
default?: Array,
- |}
- | {|
+ }>
+ | Readonly<{
type: 'string',
multiple?: false,
short?: string,
default?: string,
- |}
- | {|
+ }>
+ | Readonly<{
type: 'string',
multiple: true,
short?: string,
default?: Array,
- |};
+ }>;
type util$ParseArgsOptionToValue = TOption['type'] extends 'boolean'
? TOption['multiple'] extends true
@@ -3137,31 +4284,33 @@ declare module 'util' {
declare function stripVTControlCharacters(str: string): string;
declare function parseArgs<
- TOptions: {[string]: util$ParseArgsOption} = {||},
- >(config: {|
+ TOptions: {+[string]: util$ParseArgsOption} = {},
+ >(config: {
args?: Array,
options?: TOptions,
strict?: boolean,
allowPositionals?: boolean,
+ allowNegative?: boolean,
tokens?: false,
- |}): {|
+ }): {
values: util$ParseArgsOptionsToValues,
positionals: Array,
- |};
+ };
declare function parseArgs<
- TOptions: {[string]: util$ParseArgsOption} = {||},
- >(config: {|
+ TOptions: {[string]: util$ParseArgsOption} = {},
+ >(config: {
args?: Array,
options?: TOptions,
strict?: boolean,
allowPositionals?: boolean,
+ allowNegative?: boolean,
tokens: true,
- |}): {|
+ }): {
values: util$ParseArgsOptionsToValues,
positionals: Array,
tokens: Array,
- |};
+ };
declare class TextDecoder {
constructor(
@@ -3187,46 +4336,87 @@ declare module 'util' {
encoding: string;
}
+ declare class MIMEType {
+ constructor(input: string): void;
+ type: string;
+ subtype: string;
+ +essence: string;
+ +params: MIMEParams;
+ toString(): string;
+ }
+
+ declare class MIMEParams {
+ delete(name: string): void;
+ get(name: string): ?string;
+ has(name: string): boolean;
+ set(name: string, value: string): void;
+ entries(): Iterator<[string, string]>;
+ keys(): Iterator;
+ values(): Iterator;
+ }
+
+ declare function parseEnv(content: string): {[key: string]: string, ...};
+
+ declare type util$DiffEntry = [operation: -1 | 0 | 1, value: string];
+ declare function diff(
+ actual: string | ReadonlyArray,
+ expected: string | ReadonlyArray,
+ ): Array;
+
+ declare function getSystemErrorMessage(err: number): string;
+
+ declare type util$CallSiteObject = {
+ functionName: string,
+ scriptName: string,
+ scriptId: string,
+ lineNumber: number,
+ columnNumber: number,
+ };
+ declare function getCallSites(
+ frameCountOrOptions?: number | Readonly<{frameCount?: number}>,
+ ): Array;
+
declare var types: {
- isAnyArrayBuffer: (value: mixed) => boolean,
- isArgumentsObject: (value: mixed) => boolean,
- isArrayBuffer: (value: mixed) => boolean,
- isAsyncFunction: (value: mixed) => boolean,
- isBigInt64Array: (value: mixed) => boolean,
- isBigUint64Array: (value: mixed) => boolean,
- isBooleanObject: (value: mixed) => boolean,
- isBoxedPrimitive: (value: mixed) => boolean,
- isDataView: (value: mixed) => boolean,
- isDate: (value: mixed) => boolean,
- isExternal: (value: mixed) => boolean,
- isFloat32Array: (value: mixed) => boolean,
- isFloat64Array: (value: mixed) => boolean,
- isGeneratorFunction: (value: mixed) => boolean,
- isGeneratorObject: (value: mixed) => boolean,
- isInt8Array: (value: mixed) => boolean,
- isInt16Array: (value: mixed) => boolean,
- isInt32Array: (value: mixed) => boolean,
- isMap: (value: mixed) => boolean,
- isMapIterator: (value: mixed) => boolean,
- isModuleNamespaceObject: (value: mixed) => boolean,
- isNativeError: (value: mixed) => boolean,
- isNumberObject: (value: mixed) => boolean,
- isPromise: (value: mixed) => boolean,
- isProxy: (value: mixed) => boolean,
- isRegExp: (value: mixed) => boolean,
- isSet: (value: mixed) => boolean,
- isSetIterator: (value: mixed) => boolean,
- isSharedArrayBuffer: (value: mixed) => boolean,
- isStringObject: (value: mixed) => boolean,
- isSymbolObject: (value: mixed) => boolean,
- isTypedArray: (value: mixed) => boolean,
- isUint8Array: (value: mixed) => boolean,
- isUint8ClampedArray: (value: mixed) => boolean,
- isUint16Array: (value: mixed) => boolean,
- isUint32Array: (value: mixed) => boolean,
- isWeakMap: (value: mixed) => boolean,
- isWeakSet: (value: mixed) => boolean,
- isWebAssemblyCompiledModule: (value: mixed) => boolean,
+ isAnyArrayBuffer: (value: unknown) => boolean,
+ isArgumentsObject: (value: unknown) => boolean,
+ isArrayBuffer: (value: unknown) => boolean,
+ isAsyncFunction: (value: unknown) => boolean,
+ isBigInt64Array: (value: unknown) => boolean,
+ isBigUint64Array: (value: unknown) => boolean,
+ isBooleanObject: (value: unknown) => boolean,
+ isBoxedPrimitive: (value: unknown) => boolean,
+ isDataView: (value: unknown) => boolean,
+ isDate: (value: unknown) => boolean,
+ isExternal: (value: unknown) => boolean,
+ isFloat16Array: (value: unknown) => boolean,
+ isFloat32Array: (value: unknown) => boolean,
+ isFloat64Array: (value: unknown) => boolean,
+ isGeneratorFunction: (value: unknown) => boolean,
+ isGeneratorObject: (value: unknown) => boolean,
+ isInt8Array: (value: unknown) => boolean,
+ isInt16Array: (value: unknown) => boolean,
+ isInt32Array: (value: unknown) => boolean,
+ isMap: (value: unknown) => boolean,
+ isMapIterator: (value: unknown) => boolean,
+ isModuleNamespaceObject: (value: unknown) => boolean,
+ isNativeError: (value: unknown) => boolean,
+ isNumberObject: (value: unknown) => boolean,
+ isPromise: (value: unknown) => boolean,
+ isProxy: (value: unknown) => boolean,
+ isRegExp: (value: unknown) => boolean,
+ isSet: (value: unknown) => boolean,
+ isSetIterator: (value: unknown) => boolean,
+ isSharedArrayBuffer: (value: unknown) => boolean,
+ isStringObject: (value: unknown) => boolean,
+ isSymbolObject: (value: unknown) => boolean,
+ isTypedArray: (value: unknown) => boolean,
+ isUint8Array: (value: unknown) => boolean,
+ isUint8ClampedArray: (value: unknown) => boolean,
+ isUint16Array: (value: unknown) => boolean,
+ isUint32Array: (value: unknown) => boolean,
+ isWeakMap: (value: unknown) => boolean,
+ isWeakSet: (value: unknown) => boolean,
+ isWebAssemblyCompiledModule: (value: unknown) => boolean,
...
};
@@ -3289,11 +4479,11 @@ declare module 'util' {
| ForegroundColors
| BackgroundColors
| Modifiers
- | $ReadOnlyArray,
+ | ReadonlyArray,
text: string,
- options?: $ReadOnly<{
+ options?: Readonly<{
stream?: ?stream$Stream,
- validStream?: ?boolean,
+ validateStream?: ?boolean,
}>,
): string;
}
@@ -3402,6 +4592,20 @@ type zlib$brotliOptions = {
...
};
+type zlib$zstdOptions = {
+ flush?: number,
+ finishFlush?: number,
+ chunkSize?: number,
+ params?: {
+ [number]: boolean | number,
+ ...
+ },
+ maxOutputLength?: number,
+ info?: boolean,
+ dictionary?: Buffer,
+ ...
+};
+
type zlib$syncFn = (
buffer: Buffer | $TypedArray | DataView | ArrayBuffer | string,
options?: zlib$options,
@@ -3579,6 +4783,79 @@ declare module 'zlib' {
BROTLI_DECODER_ERROR_ALLOC_RING_BUFFER_2: number,
BROTLI_DECODER_ERROR_ALLOC_BLOCK_TYPE_TREES: number,
BROTLI_DECODER_ERROR_UNREACHABL: number,
+
+ ZSTD_COMPRESS: number,
+ ZSTD_DECOMPRESS: number,
+
+ // Default compression level for zstd streams
+ ZSTD_CLEVEL_DEFAULT: number,
+
+ // Keys for zlib$zstdOptions['params']
+ ZSTD_c_compressionLevel: number,
+ ZSTD_c_windowLog: number,
+ ZSTD_c_hashLog: number,
+ ZSTD_c_chainLog: number,
+ ZSTD_c_searchLog: number,
+ ZSTD_c_minMatch: number,
+ ZSTD_c_targetLength: number,
+ ZSTD_c_strategy: number,
+ ZSTD_c_enableLongDistanceMatching: number,
+ ZSTD_c_ldmHashLog: number,
+ ZSTD_c_ldmMinMatch: number,
+ ZSTD_c_ldmBucketSizeLog: number,
+ ZSTD_c_ldmHashRateLog: number,
+ ZSTD_c_contentSizeFlag: number,
+ ZSTD_c_checksumFlag: number,
+ ZSTD_c_dictIDFlag: number,
+ ZSTD_c_nbWorkers: number,
+ ZSTD_c_jobSize: number,
+ ZSTD_c_overlapLog: number,
+
+ // Flush operations
+ ZSTD_e_continue: number,
+ ZSTD_e_flush: number,
+ ZSTD_e_end: number,
+
+ // Values for the ZSTD_c_strategy parameter
+ ZSTD_fast: number,
+ ZSTD_dfast: number,
+ ZSTD_greedy: number,
+ ZSTD_lazy: number,
+ ZSTD_lazy2: number,
+ ZSTD_btlazy2: number,
+ ZSTD_btopt: number,
+ ZSTD_btultra: number,
+ ZSTD_btultra2: number,
+
+ // Error codes
+ ZSTD_error_no_error: number,
+ ZSTD_error_GENERIC: number,
+ ZSTD_error_prefix_unknown: number,
+ ZSTD_error_version_unsupported: number,
+ ZSTD_error_frameParameter_unsupported: number,
+ ZSTD_error_frameParameter_windowTooLarge: number,
+ ZSTD_error_corruption_detected: number,
+ ZSTD_error_checksum_wrong: number,
+ ZSTD_error_literals_headerWrong: number,
+ ZSTD_error_dictionary_corrupted: number,
+ ZSTD_error_dictionary_wrong: number,
+ ZSTD_error_dictionaryCreation_failed: number,
+ ZSTD_error_parameter_unsupported: number,
+ ZSTD_error_parameter_combination_unsupported: number,
+ ZSTD_error_parameter_outOfBound: number,
+ ZSTD_error_tableLog_tooLarge: number,
+ ZSTD_error_maxSymbolValue_tooLarge: number,
+ ZSTD_error_maxSymbolValue_tooSmall: number,
+ ZSTD_error_stabilityCondition_notRespected: number,
+ ZSTD_error_stage_wrong: number,
+ ZSTD_error_init_missing: number,
+ ZSTD_error_memory_allocation: number,
+ ZSTD_error_workSpace_tooSmall: number,
+ ZSTD_error_dstSize_tooSmall: number,
+ ZSTD_error_srcSize_wrong: number,
+ ZSTD_error_dstBuffer_null: number,
+ ZSTD_error_noForwardProgress_destFull: number,
+ ZSTD_error_noForwardProgress_inputEmpty: number,
...
};
declare var codes: {
@@ -3598,6 +4875,8 @@ declare module 'zlib' {
}
declare class BrotliCompress extends Zlib {}
declare class BrotliDecompress extends Zlib {}
+ declare class ZstdCompress extends Zlib {}
+ declare class ZstdDecompress extends Zlib {}
declare class Deflate extends Zlib {}
declare class Inflate extends Zlib {}
declare class Gzip extends Zlib {}
@@ -3618,6 +4897,10 @@ declare module 'zlib' {
declare function createGzip(options?: zlib$options): Gzip;
declare function createGunzip(options?: zlib$options): Gunzip;
declare function createUnzip(options?: zlib$options): Unzip;
+ declare function createZstdCompress(options?: zlib$zstdOptions): ZstdCompress;
+ declare function createZstdDecompress(
+ options?: zlib$zstdOptions,
+ ): ZstdDecompress;
declare var brotliCompress: zlib$brotliAsyncFn;
declare var brotliCompressSync: zlib$brotliSyncFn;
declare var brotliDeompress: zlib$brotliAsyncFn;
@@ -3688,6 +4971,10 @@ declare module 'assert' {
};
}
+declare module 'assert/strict' {
+ declare module.exports: $Exports<'assert'>['strict'];
+}
+
type HeapCodeStatistics = {
code_and_metadata_size: number,
bytecode_and_metadata_size: number,
@@ -3965,18 +5252,18 @@ declare class Process extends events$EventEmitter {
emitWarning(warning: string | Error): void;
emitWarning(
warning: string,
- typeOrCtor: string | ((...empty) => mixed),
+ typeOrCtor: string | ((...empty) => unknown),
): void;
emitWarning(
warning: string,
type: string,
- codeOrCtor: string | ((...empty) => mixed),
+ codeOrCtor: string | ((...empty) => unknown),
): void;
emitWarning(
warning: string,
type: string,
code: string,
- ctor?: (...empty) => mixed,
+ ctor?: (...empty) => unknown,
): void;
execArgv: Array;
execPath: string;
@@ -3995,15 +5282,18 @@ declare class Process extends events$EventEmitter {
initgroups?: (user: number | string, extra_group: number | string) => void;
kill(pid: number, signal?: string | number): void;
mainModule: Object;
- memoryUsage(): {
- arrayBuffers: number,
- rss: number,
- heapTotal: number,
- heapUsed: number,
- external: number,
- ...
+ memoryUsage: {
+ (): {
+ arrayBuffers: number,
+ rss: number,
+ heapTotal: number,
+ heapUsed: number,
+ external: number,
+ ...
+ },
+ rss: () => number,
};
- nextTick: (cb: (...T) => mixed, ...T) => void;
+ nextTick: (cb: (...T) => unknown, ...T) => void;
pid: number;
platform: string;
release: {
@@ -4044,61 +5334,11 @@ declare var __filename: string;
declare var __dirname: string;
declare function setImmediate(
- callback: (...args: Array) => mixed,
+ callback: (...args: Array) => unknown,
...args: Array
): Object;
declare function clearImmediate(immediateObject: any): Object;
-// https://nodejs.org/api/esm.html#node-imports
-
-declare module 'node:assert' {
- declare module.exports: $Exports<'assert'>;
-}
-
-declare module 'node:assert/strict' {
- declare module.exports: $Exports<'assert'>['strict'];
-}
-
-declare module 'node:events' {
- declare module.exports: $Exports<'events'>;
-}
-
-declare module 'node:fs' {
- declare module.exports: $Exports<'fs'>;
-}
-
-declare module 'node:os' {
- declare module.exports: $Exports<'os'>;
-}
-
-declare module 'fs/promises' {
- declare module.exports: $Exports<'fs'>['promises'];
-}
-
-declare module 'node:fs/promises' {
- declare module.exports: $Exports<'fs'>['promises'];
-}
-
-declare module 'node:path' {
- declare module.exports: $Exports<'path'>;
-}
-
-declare module 'process' {
- declare module.exports: Process;
-}
-
-declare module 'node:process' {
- declare module.exports: $Exports<'process'>;
-}
-
-declare module 'node:util' {
- declare module.exports: $Exports<'util'>;
-}
-
-declare module 'node:url' {
- declare module.exports: $Exports<'url'>;
-}
-
declare module 'worker_threads' {
declare var isMainThread: boolean;
declare var parentPort: null | MessagePort;
@@ -4274,6 +5514,93 @@ declare module 'worker_threads' {
}
}
+// https://nodejs.org/api/esm.html#node-imports
+
+declare module 'node:assert' {
+ export type * from 'assert';
+ declare module.exports: $Exports<'assert'>;
+}
+
+declare module 'node:assert/strict' {
+ export type * from 'assert/strict';
+ declare module.exports: $Exports<'assert'>['strict'];
+}
+
+declare module 'node:child_process' {
+ export type * from 'child_process';
+ declare module.exports: $Exports<'child_process'>;
+}
+
+declare module 'node:cluster' {
+ export type * from 'cluster';
+ declare module.exports: $Exports<'cluster'>;
+}
+
+declare module 'node:crypto' {
+ export type * from 'crypto';
+ declare module.exports: $Exports<'crypto'>;
+}
+
+declare module 'node:dns' {
+ export type * from 'dns';
+ declare module.exports: $Exports<'dns'>;
+}
+
+declare module 'node:events' {
+ export type * from 'events';
+ declare module.exports: $Exports<'events'>;
+}
+
+declare module 'node:fs' {
+ export type * from 'fs';
+ declare module.exports: $Exports<'fs'>;
+}
+
+declare module 'node:fs/promises' {
+ export type * from 'fs/promises';
+ declare module.exports: $Exports<'fs'>['promises'];
+}
+
+declare module 'node:os' {
+ export type * from 'os';
+ declare module.exports: $Exports<'os'>;
+}
+
+declare module 'node:path' {
+ export type * from 'path';
+ declare module.exports: $Exports<'path'>;
+}
+
+declare module 'node:perf_hooks' {
+ export type * from 'perf_hooks';
+ declare module.exports: $Exports<'perf_hooks'>;
+}
+
+declare module 'node:process' {
+ export type * from 'process';
+ declare module.exports: $Exports<'process'>;
+}
+
+declare module 'node:timers' {
+ export type * from 'timers';
+ declare module.exports: $Exports<'timers'>;
+}
+
+declare module 'node:timers/promises' {
+ export type * from 'timers/promises';
+ declare module.exports: $Exports<'timers/promises'>;
+}
+
+declare module 'node:url' {
+ declare module.exports: $Exports<'url'>;
+}
+
+declare module 'node:util' {
+ export type * from 'util';
+ declare module.exports: $Exports<'util'>;
+}
+
declare module 'node:worker_threads' {
+ export type * from 'worker_threads';
declare module.exports: $Exports<'worker_threads'>;
}
diff --git a/flow-typed/npm/@expo/spawn-async_v1.x.x.js b/flow-typed/npm/@expo/spawn-async_v1.x.x.js
new file mode 100644
index 000000000000..1e60d38129da
--- /dev/null
+++ b/flow-typed/npm/@expo/spawn-async_v1.x.x.js
@@ -0,0 +1,46 @@
+/**
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ *
+ * @flow strict-local
+ * @format
+ */
+
+declare module '@expo/spawn-async' {
+ type SpawnOptions = {
+ cwd?: string,
+ env?: Object,
+ argv0?: string,
+ stdio?: string | Array,
+ detached?: boolean,
+ uid?: number,
+ gid?: number,
+ shell?: boolean | string,
+ windowsVerbatimArguments?: boolean,
+ windowsHide?: boolean,
+ encoding?: string,
+ ignoreStdio?: boolean,
+ };
+
+ declare class SpawnPromise extends Promise {
+ child: child_process$ChildProcess;
+ }
+ type SpawnResult = {
+ pid?: number,
+ output: string[],
+ stdout: string,
+ stderr: string,
+ status: number | null,
+ signal: string | null,
+ };
+
+ declare function spawnAsync(
+ command: string,
+ args?: ReadonlyArray,
+ options?: SpawnOptions,
+ ): SpawnPromise;
+
+ declare module.exports: typeof spawnAsync;
+}
diff --git a/flow-typed/npm/@octokit/rest_v22.x.x.js b/flow-typed/npm/@octokit/rest_v22.x.x.js
new file mode 100644
index 000000000000..4d3fbfccb4d2
--- /dev/null
+++ b/flow-typed/npm/@octokit/rest_v22.x.x.js
@@ -0,0 +1,61 @@
+/**
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ *
+ * @flow strict-local
+ * @format
+ */
+
+// Partial types for Octokit based on the usage in react-native-github
+declare module '@octokit/rest' {
+ declare class Octokit {
+ constructor(options?: {auth?: string, ...}): this;
+
+ repos: Readonly<{
+ listReleaseAssets: (
+ params: Readonly<{
+ owner: string,
+ repo: string,
+ release_id: string,
+ }>,
+ ) => Promise<{
+ data: Array<{
+ id: string,
+ name: string,
+ ...
+ }>,
+ ...
+ }>,
+ uploadReleaseAsset: (
+ params: Readonly<{
+ owner: string,
+ repo: string,
+ release_id: string,
+ name: string,
+ data: Buffer,
+ headers: Readonly<{
+ 'content-type': string,
+ ...
+ }>,
+ ...
+ }>,
+ ) => Promise<{
+ data: {
+ browser_download_url: string,
+ ...
+ },
+ ...
+ }>,
+ deleteReleaseAsset: (params: {
+ owner: string,
+ repo: string,
+ asset_id: string,
+ ...
+ }) => Promise,
+ }>;
+ }
+
+ declare export {Octokit};
+}
diff --git a/flow-typed/npm/@react-native-community/cli-server-api_v19.x.x.js b/flow-typed/npm/@react-native-community/cli-server-api_v19.x.x.js
index b8bcc3c40931..33f2f7d9fbad 100644
--- a/flow-typed/npm/@react-native-community/cli-server-api_v19.x.x.js
+++ b/flow-typed/npm/@react-native-community/cli-server-api_v19.x.x.js
@@ -13,7 +13,7 @@ declare module '@react-native-community/cli-server-api' {
declare type MiddlewareOptions = {
host?: string,
- watchFolders: $ReadOnlyArray,
+ watchFolders: ReadonlyArray,
port: number,
};
@@ -32,7 +32,7 @@ declare module '@react-native-community/cli-server-api' {
server: ws$WebSocketServer,
broadcast: (
method: string,
- params?: Record | null,
+ params?: Record | null,
) => void,
},
eventsSocketEndpoint: {
diff --git a/flow-typed/npm/babel-traverse_v7.x.x.js b/flow-typed/npm/babel-traverse_v7.x.x.js
index 1cd8df07b182..bbebfb8332bd 100644
--- a/flow-typed/npm/babel-traverse_v7.x.x.js
+++ b/flow-typed/npm/babel-traverse_v7.x.x.js
@@ -53,7 +53,7 @@ declare module '@babel/traverse' {
constructor(
scope: Scope,
- opts: TraverseOptions,
+ opts: TraverseOptions,
state: any,
parentPath: NodePath<>,
): TraversalContext;
@@ -97,7 +97,7 @@ declare module '@babel/traverse' {
/** Traverse node with current scope and path. */
traverse(
node: BabelNode | Array,
- opts: $ReadOnly>,
+ opts: Readonly>,
state: S,
): void;
@@ -298,12 +298,12 @@ declare module '@babel/traverse' {
parent: BabelNode;
hub: HubInterface;
contexts: Array;
- data: {[key: string]: mixed} | null;
+ data: {[key: string]: unknown} | null;
shouldSkip: boolean;
shouldStop: boolean;
removed: boolean;
- state: mixed;
- +opts: $ReadOnly> | null;
+ state: unknown;
+ +opts: Readonly> | null;
skipKeys: null | {[key: string]: boolean};
parentPath: ?NodePath<>;
context: TraversalContext;
@@ -338,7 +338,7 @@ declare module '@babel/traverse' {
getScope(scope: Scope): Scope;
setData(key: string, val: TVal): TVal;
- getData(key: string, def?: TVal): TVal;
+ getData(key: string, def?: TVal): TVal;
buildCodeFrameError(
msg: string,
@@ -346,7 +346,7 @@ declare module '@babel/traverse' {
): TError;
traverse(
- visitor: $ReadOnly>,
+ visitor: Readonly>,
state: TState,
): void;
@@ -390,9 +390,7 @@ declare module '@babel/traverse' {
* Earliest is defined as being "before" all the other nodes in terms of list container
* position and visiting key.
*/
- getEarliestCommonAncestorFrom(
- paths: $ReadOnlyArray>,
- ): NodePath<>;
+ getEarliestCommonAncestorFrom(paths: ReadonlyArray