Repository navigation
[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
Description
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
react-native-bot commentedon Sep 9, 2026
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.
bjjeong commentedon Sep 9, 2026
Added a project-free reproducer to the description ("Reproducer" section): it calls React Native's own
ReactNativeDependenciesUtils.release_artifact_exists/ReactNativeCoreUtils.release_artifact_existsfromreact-native@0.86.3and showsfalsefor 0.86.3 (expectedtrue) while0.88.0-rc.0returnstrue, 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 freshnpx @react-native-community/cli init --version 0.86.3app reproduces it onpod installas well (log lines in the description).Pin react-native 0.86.3 and add prebuilt-artifact reproducer for reac…
3plusalpha commentedon Sep 9, 2026
Confirm. I am based in Germany - same issue. @bjjeong thanks for bringing this up
bjjeong commentedon Sep 9, 2026
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.rbruns RN's ownrelease_artifact_existschecks; README has thepod installsteps and the curl chain).binhtran93 commentedon Sep 9, 2026
Confirm this, was about to build the project but can't. This is anoying
Tunanika commentedon Sep 9, 2026
I'm also facing this and currently using my local Hermes tarball as a workaround.
xavi-999 commentedon Sep 9, 2026
Same issue here
yash-vaghela21 commentedon Sep 9, 2026
Same issue
mathiuskormasela12 commentedon Sep 9, 2026
same issue
Fix check-for-reproducer never removing "Needs: Repro" once react-nat…
Katie-ticker commentedon Sep 9, 2026
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 installbjjeong commentedon Sep 9, 2026
Update (2026-09-09 ~18:05 UTC): the stable artifacts are being served again.
The redirect target is unchanged (
repo.reactnative.dev), the bodies are real gzip tarballs and the.sha1sidecars resolve;0.87.1also returns 200 again. React Native 0.86.3's ownReactNativeCoreUtils.release_artifact_exists("0.86.3")/ReactNativeDependenciesUtils.release_artifact_exists("0.86.3")now returntrue, sopod installpicks the prebuilt path without changes.For anyone still failing: clear any stale negative result by re-running
pod install; if you had switched toRCT_USE_RN_DEP=0/RCT_USE_PREBUILT_RNCORE=0orios.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
repo1redirects the next version; (2)artifact_existstreats 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.yash-vaghela21 commentedon Sep 9, 2026
Working now.
hermes-iostarballs are back to 200 andpod installresolves the prebuilt.kmagiera commentedon Sep 10, 2026
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.
jackieho6688-cmd commentedon Oct 15, 2026
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):
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.