Bump minimum Node.js version to 22 (#56887)

Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/56887

Drop support for Node.js 20. The minimum supported version is now `^22.13.0 || ^24.3.0 || >= 26.0.0`.

Node.js 20 reached end-of-life in April 2026 and is no longer actively maintained. This aligns React Native with the upcoming Metro requirement.

Changelog:
[General][Breaking] - Require Node.js >= 22.13.0

Reviewed By: christophpurrer, cortinico

Differential Revision: D105685641

fbshipit-source-id: f490e5a13e4289daba98c4d56dd8fdd341aef0db
This commit is contained in:
Alex Hunt
2026-05-19 11:53:54 -07:00
committed by meta-codesync[bot]
parent f5bd86c311
commit a0d39e7a9c
25 changed files with 27 additions and 25 deletions
+3 -1
View File
@@ -451,6 +451,8 @@ jobs:
steps:
- name: Checkout
uses: actions/checkout@v6
- name: Setup Node.js
uses: ./.github/actions/setup-node
- name: Install dependencies
uses: ./.github/actions/yarn-install
- name: Lint file structure
@@ -482,7 +484,7 @@ jobs:
strategy:
fail-fast: false
matrix:
node-version: ["24", "22", "20.19.4"]
node-version: ["24", "22.13.0"]
steps:
- name: Checkout
uses: actions/checkout@v6
+1 -1
View File
@@ -17,7 +17,7 @@
],
"bugs": "https://github.com/facebook/react-native/issues",
"engines": {
"node": "^20.19.4 || ^22.13.0 || ^24.3.0 || >= 25.0.0"
"node": "^22.13.0 || ^24.3.0 || >= 26.0.0"
},
"files": [
"path-support.js",
+1 -1
View File
@@ -19,7 +19,7 @@
],
"bugs": "https://github.com/facebook/react-native/issues",
"engines": {
"node": "^20.19.4 || ^22.13.0 || ^24.3.0 || >= 25.0.0"
"node": "^22.13.0 || ^24.3.0 || >= 26.0.0"
},
"files": [
"index.js"
+1 -1
View File
@@ -55,6 +55,6 @@
}
},
"engines": {
"node": "^20.19.4 || ^22.13.0 || ^24.3.0 || >= 25.0.0"
"node": "^22.13.0 || ^24.3.0 || >= 26.0.0"
}
}
+1 -1
View File
@@ -37,6 +37,6 @@
"dependencies": {},
"devDependencies": {},
"engines": {
"node": "^20.19.4 || ^22.13.0 || ^24.3.0 || >= 25.0.0"
"node": "^22.13.0 || ^24.3.0 || >= 26.0.0"
}
}
+1 -1
View File
@@ -20,6 +20,6 @@
"BUILD_INFO"
],
"engines": {
"node": "^20.19.4 || ^22.13.0 || ^24.3.0 || >= 25.0.0"
"node": "^22.13.0 || ^24.3.0 || >= 26.0.0"
}
}
+1 -1
View File
@@ -38,7 +38,7 @@
},
"license": "MIT",
"engines": {
"node": "^20.19.4 || ^22.13.0 || ^24.3.0 || >= 25.0.0"
"node": "^22.13.0 || ^24.3.0 || >= 26.0.0"
},
"dependencies": {
"cross-spawn": "^7.0.6",
+1 -1
View File
@@ -51,6 +51,6 @@
"wait-for-expect": "^3.0.2"
},
"engines": {
"node": "^20.19.4 || ^22.13.0 || ^24.3.0 || >= 25.0.0"
"node": "^22.13.0 || ^24.3.0 || >= 26.0.0"
}
}
@@ -16,7 +16,7 @@
],
"bugs": "https://github.com/facebook/react-native/issues",
"engines": {
"node": "^20.19.4 || ^22.13.0 || ^24.3.0 || >= 25.0.0"
"node": "^22.13.0 || ^24.3.0 || >= 26.0.0"
},
"main": "index.js",
"exports": {
@@ -22,6 +22,6 @@
"hermes-eslint": "0.36.1"
},
"engines": {
"node": "^20.19.4 || ^22.13.0 || ^24.3.0 || >= 25.0.0"
"node": "^22.13.0 || ^24.3.0 || >= 26.0.0"
}
}
+1 -1
View File
@@ -36,6 +36,6 @@
"hermes-eslint": "0.36.1"
},
"engines": {
"node": "^20.19.4 || ^22.13.0 || ^24.3.0 || >= 25.0.0"
"node": "^22.13.0 || ^24.3.0 || >= 26.0.0"
}
}
+1 -1
View File
@@ -16,7 +16,7 @@
],
"bugs": "https://github.com/facebook/react-native/issues",
"engines": {
"node": "^20.19.4 || ^22.13.0 || ^24.3.0 || >= 25.0.0"
"node": "^22.13.0 || ^24.3.0 || >= 26.0.0"
},
"scripts": {
"build": "./gradlew build",
+1 -1
View File
@@ -14,7 +14,7 @@
},
"license": "MIT",
"engines": {
"node": ">= 20.19.4"
"node": ">= 22.13.0"
},
"main": "./jest-preset.js",
"files": [
+1 -1
View File
@@ -16,7 +16,7 @@
],
"bugs": "https://github.com/facebook/react-native/issues",
"engines": {
"node": "^20.19.4 || ^22.13.0 || ^24.3.0 || >= 25.0.0"
"node": "^22.13.0 || ^24.3.0 || >= 26.0.0"
},
"exports": {
".": "./src/index.js",
+1 -1
View File
@@ -30,6 +30,6 @@
}
},
"engines": {
"node": "^20.19.4 || ^22.13.0 || ^24.3.0 || >= 25.0.0"
"node": "^22.13.0 || ^24.3.0 || >= 26.0.0"
}
}
+1 -1
View File
@@ -18,7 +18,7 @@
],
"bugs": "https://github.com/facebook/react-native/issues",
"engines": {
"node": "^20.19.4 || ^22.13.0 || ^24.3.0 || >= 25.0.0"
"node": "^22.13.0 || ^24.3.0 || >= 26.0.0"
},
"files": [
"console.js",
@@ -13,7 +13,7 @@
],
"license": "MIT",
"engines": {
"node": "^20.19.4 || ^22.13.0 || ^24.3.0 || >= 25.0.0"
"node": "^22.13.0 || ^24.3.0 || >= 26.0.0"
},
"main": "src/index.js",
"files": [
@@ -14,7 +14,7 @@
],
"license": "MIT",
"engines": {
"node": "^20.19.4 || ^22.13.0 || ^24.3.0 || >= 25.0.0"
"node": "^22.13.0 || ^24.3.0 || >= 26.0.0"
},
"main": "src/index.js",
"files": [
+1 -1
View File
@@ -18,7 +18,7 @@
],
"bugs": "https://github.com/facebook/react-native/issues",
"engines": {
"node": "^20.19.4 || ^22.13.0 || ^24.3.0 || >= 25.0.0"
"node": "^22.13.0 || ^24.3.0 || >= 26.0.0"
},
"scripts": {
"build": "yarn clean && node scripts/build.js --verbose",
@@ -19,7 +19,7 @@
],
"bugs": "https://github.com/facebook/react-native/issues",
"engines": {
"node": "^20.19.4 || ^22.13.0 || ^24.3.0 || >= 25.0.0"
"node": "^22.13.0 || ^24.3.0 || >= 26.0.0"
},
"exports": {
".": "./src/index.js",
+1 -1
View File
@@ -21,7 +21,7 @@
],
"bugs": "https://github.com/facebook/react-native/issues",
"engines": {
"node": "^20.19.4 || ^22.13.0 || ^24.3.0 || >= 25.0.0"
"node": "^22.13.0 || ^24.3.0 || >= 26.0.0"
},
"bin": {
"react-native": "cli.js"
+1 -1
View File
@@ -10,7 +10,7 @@
"directory": "packages/rn-tester"
},
"engines": {
"node": "^20.19.4 || ^22.13.0 || ^24.3.0 || >= 25.0.0"
"node": "^22.13.0 || ^24.3.0 || >= 26.0.0"
},
"scripts": {
"start": "react-native start",
+1 -1
View File
@@ -17,7 +17,7 @@
],
"bugs": "https://github.com/facebook/react-native/issues",
"engines": {
"node": "^20.19.4 || ^22.13.0 || ^24.3.0 || >= 25.0.0"
"node": "^22.13.0 || ^24.3.0 || >= 26.0.0"
},
"exports": {
".": {
+1 -1
View File
@@ -33,6 +33,6 @@
"rxjs": "^7.8.1"
},
"engines": {
"node": "^20.19.4 || ^22.13.0 || ^24.3.0 || >= 25.0.0"
"node": "^22.13.0 || ^24.3.0 || >= 26.0.0"
}
}
@@ -5,7 +5,7 @@
"description": "TypeScript related unit test for @react-native/codegen",
"license": "MIT",
"engines": {
"node": "^20.19.4 || ^22.13.0 || ^24.3.0 || >= 25.0.0"
"node": "^22.13.0 || ^24.3.0 || >= 26.0.0"
},
"scripts": {
"build": "yarn clean && node scripts/build.js --verbose && tsc",