React Native 0.71-RC0 Android outage postmortem
Key Points
- Builds broke because Gradle `+` pulled 0.71.0-rc0 artifacts
- Immediate fixes: pin deps, patched releases down to 0.63
- Artifacts removed from Maven Central; process changes planned
Summary
On Nov 4, 2022 the React Native 0.71.0-rc0 artifacts were published to Maven Central. Because many older Android projects used a Gradle dynamic dependency (implementation("com.facebook.react:react-native:+")), Gradle resolved the newly published rc artifacts as the highest available version and downloaded incompatible 0.71.0-rc0 binaries for projects still on older RN versions. This caused Android builds to fail across versions until mitigations were applied and the artifacts were removed from Maven Central.
Key Points
- Root cause: use of Gradle dynamic versions (
+) in templates and downstream projects caused non-reproducible resolution; the rc artifacts became the highest available version. - Immediate mitigation: community-provided workaround to pin the React Native dependency; Expo and others pushed fixes to users.
- Automated fixes: release crew shipped patch releases down to 0.63 to apply pins automatically.
- Final resolution: requested removal of the offending artifacts from Sonatype; artifacts were fully removed on Nov 8.
- Lessons learned: avoid dynamic dependency versions, improve release and incident response visibility, and invest in release/testing automation and template guidance for 3rd-party libraries.
- Engineering recommendations:
- Pin React Native dependency versions explicitly (do not use
+). - Add CI checks that detect dynamic Gradle versions and fail builds.
- Monitor artifact publication feeds and add alerts for unexpected published versions.
- Maintain a clear release support policy and automation to patch older supported versions when needed.
- Pin React Native dependency versions explicitly (do not use
Practical next steps for engineers
- Search your Android projects for
com.facebook.react:react-native:+and replace with a specific version. - Add linting/CI rules to reject dynamic versions in Gradle files.
- Subscribe to React Native release channels and track published Maven artifacts if you publish or consume native artifacts.
Timeline (high level)
- Nov 4: 0.71-RC0 published; reports and identification same day; workarounds communicated.
- Nov 5–7: patches released back to 0.63; Sonatype removal request opened.
- Nov 8: artifacts removed from Maven Central; incident closed Nov 10.