---
name: upgrades
description: Upgrade React Native, adopt the New Architecture, and keep native dependencies aligned. Use when bumping React Native, enabling the New Architecture, or updating a native module.
version: 1.1.0
platforms: [ ios, android ]
react-native-version: 0.76+
tags: [ react-native, upgrades, new-architecture ]
title: upgrades
canonical_url: https://skilld.dev/gh/neha/rn-developer-skills/upgrades
last_updated: 2026-10-01T00:04:32.000Z
---

> **Skill from skilld.dev.** Follow the instructions below for this session. You do not need to install anything.
>
> If the user asked to install this Skill, run `npx skilld install neha/rn-developer-skills/upgrades`. Install writes the Skill files into the project, so every session loads them.

# Upgrades Skill

## Applicability

- **Platforms:** iOS and Android
- **React Native:** 0.76+ (New Architecture interop assumed unless a checklist item says otherwise)

## When to Use

- Bumping React Native, React, or the native toolchain
- Turning the New Architecture on, or adding a native module to an app that already uses it
- A native dependency release forces an app upgrade

## Severity

- **Merge-blocking:** the app does not boot on iOS or Android, or a native module stays on a version that does not match this React Native bump.
- **Should-fix:** how the bump is split, and smoke-test notes.

## Guidance

### Version jump

- [ ] The target version's changelog is read for breaking changes before the bump
- [ ] A jump across several minors is split so each step boots, instead of one unreviewed leap
- [ ] JS dependencies that ship native code are upgraded in the same change as the React Native bump
- [ ] Both iOS and Android build and launch on the new version before the change is merged

**Incorrect:**
```text
react-native 0.72 → 0.78 in one pull request, Android left for a follow-up
```

**Correct:**
```text
One minor at a time, each step building and launching on iOS and Android, with native modules upgraded in the same step
```

### Native version matrix

- [ ] Kotlin, the iOS deployment target, and the Android min SDK match what the target React Native version requires
- [ ] Codegen has been run for native modules that need it, and the app still builds
- [ ] Libraries that ship native code and must move together are upgraded in the same change (navigation screens, gesture handler, and animated-on-the-UI-thread libraries)

**Incorrect:**
```text
react-native bumped; react-native-screens and react-native-gesture-handler left on the previous major
```

**Correct:**
```text
react-native, screens, and gesture-handler moved to the versions that release says belong together, then both platforms launched
```

### New Architecture

- [ ] New native modules use the New Architecture interop; a new bridge module is not added without a written reason
- [ ] Modules that do not support the New Architecture are listed, and the feature is hidden or replaced until they do
- [ ] The app is exercised on a New Architecture build for any screen that touches a native module changed in the upgrade

### After the bump

- [ ] A smoke pass covers launch, sign-in, and the critical path this app cannot ship without
- [ ] Release build settings still point at the right environment (see [release-and-updates](../release-and-updates/SKILL.md))
- [ ] Source maps or debug symbols still upload so crashes from the new version can be read (see [observability](../observability/SKILL.md))

## Anti-Patterns

| Anti-Pattern | Risk | Fix |
|---|---|---|
| Editing generated native projects by hand during an upgrade | The next bump overwrites the fix | Put the change in config the upgrade keeps |
| Pinning an old native module "for now" with a patch that skips its install | Crashes on the New Architecture | Upgrade or replace the module in the same change |

## Pitfalls

- A JS-only bump can still break when a dependency's native pod or gradle version moved.
- Hermes and the JS engine flags change between versions; a crash that exists only in release is easy to miss on a debug smoke test.
