Skip to content

[iOS] Prebuilt artifacts for 0.86.x/0.87.x unavailable: Maven Central now 301-redirects react-native-artifacts tarballs to repo.reactnative.dev, which 404s → pod install falls back to source #58427

Closed

Description

@bjjeong

Description

Since 2026-09-09 (between ~08:00 and ~15:50 UTC), Maven Central redirects the React Native prebuilt iOS artifact tarballs to the new React Native Maven cache, but the cache does not have the stable reactnative-core-* / reactnative-dependencies-* tarballs for 0.86.x and 0.87.x. As a result every iOS pod install on those versions silently falls back to building React Native from source (10–15 min slower builds), and projects that register their own RCT-Folly pod for prebuilt mode hard-fail with a duplicate-source error.

https://repo1.maven.org/maven2/com/facebook/react/react-native-artifacts/<v>/react-native-artifacts-<v>-reactnative-{core,dependencies}-{debug,release}.tar.gz → 301 → https://repo.reactnative.dev/maven2/… → 404 (Retry-After: 30, still 404 after 30+ minutes of retries).

Only the *.tar.gz paths under react-native-artifacts/ redirect; the .pom, directory listings and react-android AARs still return 200 from repo1, so Android is unaffected.

The redirect looks related to the pull-through cache introduced in #57325 / #57765 ("try repo.reactnative.dev first, fall back to Maven Central"). Those scripts fall back to repo1.maven.org, but repo1 now sends the request straight back to the cache, so there is no working source for the stable tarballs. Older release lines (0.86.x, whose scripts go directly to repo1) are hit first.

Steps to reproduce

# what rndependencies.rb#artifact_exists does (0.86.3):
curl -o /dev/null --silent -Iw '%{http_code}\n' -L \
  "https://repo1.maven.org/maven2/com/facebook/react/react-native-artifacts/0.86.3/react-native-artifacts-0.86.3-reactnative-dependencies-debug.tar.gz"
# → 404 (expected 200)

# the redirect:
curl -sI "https://repo1.maven.org/maven2/com/facebook/react/react-native-artifacts/0.86.3/react-native-artifacts-0.86.3-reactnative-dependencies-debug.tar.gz" | grep -iE '^(HTTP|location)'
# HTTP/2 301
# location: https://repo.reactnative.dev/maven2/com/facebook/react/react-native-artifacts/0.86.3/react-native-artifacts-0.86.3-reactnative-dependencies-debug.tar.gz

# on the cache, only dSYM tarballs exist for 0.86.3:
curl -sL "https://repo.reactnative.dev/maven2/com/facebook/react/react-native-artifacts/0.86.3/" | grep -oE 'href="[^"]+tar.gz"'
# → only *-reactnative-core-dSYM-*.tar.gz and *-reactnative-dependencies-dSYM-*.tar.gz

# same for 0.86.0, 0.86.2, 0.87.0, 0.87.1 (all 404); 0.88.0-rc.0 serves core + dependencies (206/200).

Then, in any RN 0.86.3 iOS project, bundle exec pod install:

[ReactNativeDependencies] Setting up ReactNativeDependencies...
[ReactNativeDependencies] No prebuilt artifacts found, reverting to building from source.
[ReactNativeDependencies] Building from source: true
[ReactNativeCore] Setting up ReactNativeCore...
[ReactNativeCore] No prebuilt artifacts found, reverting to building from source.
[ReactNativeCore] Building from source: true

A successful pod install from the same CI at 07:57 UTC the same day logged [ReactNativeDependencies] Using tarball from URL: https://repo1.maven.org/maven2/com/facebook/react/react-native-artifacts/0.86.3/react-native-artifacts-0.86.3-reactnative-dependencies-debug.tar.gz, so the change happened during the day on 2026-09-09.

React Native Version

0.86.3 (also verified missing on the cache: 0.86.0, 0.86.2, 0.87.0, 0.87.1)

Affected Platforms

Build - MacOS, Runtime - iOS

Areas

Prebuilt artifacts (ReactNativeCore / ReactNativeDependencies), CocoaPods integration

Output of npx @react-native-community/cli info

Not needed to reproduce — the failure is reproducible with curl alone (see above) and is independent of the project. Observed on GitHub-hosted macOS runners and from two independent networks.

Stacktrace or Logs

[ReactNativeDependencies] No prebuilt artifacts found, reverting to building from source.
[ReactNativeCore] No prebuilt artifacts found, reverting to building from source.
# for projects that add an RCT-Folly shim podspec for prebuilt mode (RN no longer registers RCT-Folly there):
[!] There are multiple dependencies with different sources for `RCT-Folly` in `Podfile`:
- RCT-Folly (from `./RCT-Folly.podspec`)
- RCT-Folly (from `../node_modules/react-native/third-party-podspecs/RCT-Folly.podspec`)

Reproducer

Reproducer repository (from the official template, pinned to 0.86.3): https://github.com/bjjeong/rn-0.86.3-prebuilt-artifacts-repro — cd ReproducerApp && npm install && ruby ../scripts/check-prebuilt-artifacts.rb, then cd ios && bundle exec pod install.

No app needed — this calls React Native's own artifact check, exactly as pod install does:

mkdir rn-prebuilt-repro && cd rn-prebuilt-repro
npm init -y >/dev/null && npm i react-native@0.86.3 >/dev/null
ruby -e '
require "./node_modules/react-native/scripts/cocoapods/rndependencies.rb"
require "./node_modules/react-native/scripts/cocoapods/rncore.rb"
puts ReactNativeDependenciesUtils.release_tarball_url("0.86.3", :debug)
puts "deps 0.86.3 exists:  #{ReactNativeDependenciesUtils.release_artifact_exists("0.86.3")}   # expected true, got false"
puts "core 0.86.3 exists:  #{ReactNativeCoreUtils.release_artifact_exists("0.86.3")}           # expected true, got false"
puts "deps 0.88.0-rc.0:    #{ReactNativeDependenciesUtils.release_artifact_exists("0.88.0-rc.0")} # control: true"
'

Output on 2026-09-09 ~17:10 UTC (two independent networks):

https://repo1.maven.org/maven2/com/facebook/react/react-native-artifacts/0.86.3/react-native-artifacts-0.86.3-reactnative-dependencies-debug.tar.gz
deps 0.86.3 exists:  false   # expected true, got false
core 0.86.3 exists:  false   # expected true, got false
deps 0.88.0-rc.0:    true    # control: true

release_artifact_exists is curl -o /dev/null --silent -Iw '%{http_code}' -L "<url>" == "200"; the request now follows repo1.maven.org → 301 → repo.reactnative.dev → 404.

Full-app path (same result): npx @react-native-community/cli@latest init RNRepro --version 0.86.3 && cd RNRepro/ios && bundle install && bundle exec pod install logs [ReactNativeDependencies] No prebuilt artifacts found, reverting to building from source. and [ReactNativeCore] No prebuilt artifacts found, reverting to building from source., where a pod install from 07:57 UTC the same day logged Using tarball from URL: https://repo1.maven.org/....

Screenshots and Videos

N/A

Expected

Either Maven Central keeps serving the stable tarballs directly, or repo.reactnative.dev serves the stable reactnative-core-* and reactnative-dependencies-* tarballs for every released version that is still supported (at minimum 0.86.x and 0.87.x), so artifact_exists returns 200 and prebuilt mode keeps working for release lines whose scripts do not know about the cache.

Workarounds

  • ENTERPRISE_REPOSITORY=<mirror with the Maven layout> (requires having the tarballs already).
  • Build from source (RCT_USE_RN_DEP=0 RCT_USE_PREBUILT_RNCORE=0), slower.

Activity

  1. react-native-bot commented on Sep 9, 2026

    @react-native-bot
    Collaborator

    Warning

    Missing reproducer: We could not detect a reproducible example in your issue report. Reproducers are mandatory and we can accept only one of those as a valid reproducer:


    You can read more about about it on our website: How to report a bug.

  2. bjjeong commented on Sep 9, 2026

    @bjjeong
    Author

    Added a project-free reproducer to the description ("Reproducer" section): it calls React Native's own ReactNativeDependenciesUtils.release_artifact_exists / ReactNativeCoreUtils.release_artifact_exists from react-native@0.86.3 and shows false for 0.86.3 (expected true) while 0.88.0-rc.0 returns true, plus the equivalent curl chain (repo1.maven.org → 301 → repo.reactnative.dev → 404). Since the failure is in artifact hosting rather than app code, a fresh npx @react-native-community/cli init --version 0.86.3 app reproduces it on pod install as well (log lines in the description).

  3. 3plusalpha commented on Sep 9, 2026

    @3plusalpha

    Confirm. I am based in Germany - same issue. @bjjeong thanks for bringing this up

  4. bjjeong commented on Sep 9, 2026

    @bjjeong
    Author

    Reproducer repository created from the official template and pinned to react-native 0.86.3: https://github.com/bjjeong/rn-0.86.3-prebuilt-artifacts-repro (scripts/check-prebuilt-artifacts.rb runs RN's own release_artifact_exists checks; README has the pod install steps and the curl chain).

  5. binhtran93 commented on Sep 9, 2026

    @binhtran93

    Confirm this, was about to build the project but can't. This is anoying

  6. Tunanika commented on Sep 9, 2026

    @Tunanika

    I'm also facing this and currently using my local Hermes tarball as a workaround.

  7. xavi-999 commented on Sep 9, 2026

    @xavi-999

    Same issue here

  8. yash-vaghela21 commented on Sep 9, 2026

    @yash-vaghela21

    Same issue

  9. mathiuskormasela12 commented on Sep 9, 2026

    @mathiuskormasela12

    same issue

  10. Katie-ticker commented on Sep 9, 2026

    @Katie-ticker

    I got the same issue and had to manually point at the release tarbells
    cd ios && \ LANG=en_US.UTF-8 LC_ALL=en_US.UTF-8 \ HERMES_ENGINE_TARBALL_PATH="$HOME/Library/Caches/ReactNative/hermes-ios-0.14.1-release.tar.gz" \ RCT_TESTONLY_RNCORE_TARBALL_PATH="$HOME/Library/Caches/ReactNative/reactnative-core-0.83.10-release.tar.gz" \ RCT_USE_LOCAL_RN_DEP="$HOME/Library/Caches/ReactNative/reactnative-dependencies-0.83.10-release.tar.gz" \ RCT_USE_PREBUILT_RNCORE=1 \ RCT_USE_RN_DEP=1 \ pod install

  11. bjjeong commented on Sep 9, 2026

    @bjjeong
    Author

    Update (2026-09-09 ~18:05 UTC): the stable artifacts are being served again.

    $ for a in reactnative-core-debug reactnative-core-release reactnative-dependencies-debug reactnative-dependencies-release; do
        curl -o /dev/null -sIw "$a %{http_code}\n" -L "https://repo1.maven.org/maven2/com/facebook/react/react-native-artifacts/0.86.3/react-native-artifacts-0.86.3-$a.tar.gz"; done
    reactnative-core-debug 200
    reactnative-core-release 200
    reactnative-dependencies-debug 200
    reactnative-dependencies-release 200
    

    The redirect target is unchanged (repo.reactnative.dev), the bodies are real gzip tarballs and the .sha1 sidecars resolve; 0.87.1 also returns 200 again. React Native 0.86.3's own ReactNativeCoreUtils.release_artifact_exists("0.86.3") / ReactNativeDependenciesUtils.release_artifact_exists("0.86.3") now return true, so pod install picks the prebuilt path without changes.

    For anyone still failing: clear any stale negative result by re-running pod install; if you had switched to RCT_USE_RN_DEP=0 / RCT_USE_PREBUILT_RNCORE=0 or ios.buildReactNativeFromSource, you can revert it. The outage window was roughly 08:00–18:00 UTC.

    Two things still seem worth a maintainer's eye: (1) what caused the ~10 h gap on the new host, so it does not recur when repo1 redirects the next version; (2) artifact_exists treats any non-200 as "no prebuilt" and silently falls back to a full source build — a loud warning naming the URL and status would have saved a lot of debugging today.

  12. yash-vaghela21 commented on Sep 9, 2026

    @yash-vaghela21

    Same issue

    Working now. hermes-ios tarballs are back to 200 and pod install resolves the prebuilt.

  13. kmagiera commented on Sep 10, 2026

    @kmagiera
    Contributor

    Thank you for reporting. This was an intermittent issue between our new artifacts proxy (repo.reactnative.dev) that we are in a process of deploying and sonatype. We are now working with sonatype to take off most of the traffic to be hosted directly via the proxy. The setup however is still incomplete and it appears like it's been turned on for some short period of time yesterday to start redirecting to our proxy which didn't have a reliable way of accessing the upstream repo.
    The working configuration seems to be restored now so will be closing this issue. However wanted to point out that the repository work is not finished yet and that we will be making further changes in the configuration. We hope that the changes won't result in similar issues while we work on it.

  14. added
    Resolution: FixedA PR that fixes this issue has been merged.
    Resolution: AnsweredWhen the issue is resolved with a simple answer
    and removed
    Needs: ReproThis issue could be improved with a clear list of steps to reproduce the issue.
    Needs: AttentionIssues where the author has responded to feedback.
    on Sep 14, 2026
  15. jackieho6688-cmd commented on Oct 15, 2026

    @jackieho6688-cmd

    Could you advise where to report a separate Android artifact-access issue involving repo.reactnative.dev?

    This issue concerned iOS prebuilt tarballs returning 404 and is closed. Our observation concerns the Android debug AAR com.facebook.react:react-android:0.86.3 returning 403. We are not claiming the same cause, an iOS regression, or that this issue should be reopened.

    Source URL:
    https://repo.maven.apache.org/maven2/com/facebook/react/react-android/0.86.3/react-android-0.86.3-debug.aar
    Exact 301 target:
    https://repo.reactnative.dev/maven2/com/facebook/react/react-android/0.86.3/react-android-0.86.3-debug.aar

    Historical request chain (UTC; request start times):

    • 2026-10-15T11:19:28.747427Z | HEAD at Maven Central -> 301 | CF-Ray: a4ae6dd5dab54e53-HKG
    • 2026-10-15T11:19:29.252249Z | HEAD at repo.reactnative.dev -> 403 | CF-Ray: a4ae6dd7eb9a9b87-HKG
    • 2026-10-15T11:19:29.568209Z | GET at repo.reactnative.dev, Range: bytes=0-3 -> 403 | CF-Ray: a4ae6ddb7905b42b-HKG

    This was a bounded Windows HTTP probe: three requests, one validated redirect handoff, no retries, and zero response-body bytes read or saved. These are historical observations, not a fresh availability check. The cause of the 403 is unknown.

    Should this be filed as a new React Native issue, or is there a separate artifact-infrastructure reporting channel? Would this request chain and sanitized response headers be sufficient for initial triage, or is a specific template/reproducer required?

    We have not run CLI info, an application reproducer, or latest-stable validation, and do not claim to meet the standard bug-report requirements. No credentials, cookies, private source, or egress IP are included here.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    Resolution: AnsweredWhen the issue is resolved with a simple answerResolution: FixedA PR that fixes this issue has been merged.

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions