diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
index 57f2de4f59690269f3a6d3952b7e92c57ce4e80a..3c43b76838a55d9388a4b9f18a52aa331c3a7980 100644
--- a/.github/workflows/build.yml
+++ b/.github/workflows/build.yml
@@ -30,7 +30,7 @@ concurrency:
 
 env:
   DEFAULT_BRANCH: ${{ github.event.repository.default_branch }}
-  NODE_VERSION: 20
+  NODE_VERSION: 22
   PDM_VERSION: 2.20.0.post1 # renovate: datasource=pypi depName=pdm
   DRY_RUN: true
   TEST_LEGACY_DECRYPTION: true
diff --git a/.github/workflows/update-data.yml b/.github/workflows/update-data.yml
index d4de79154833340daf178b24913309ad0275d19a..93b68aafd8baaf735e92dcbbdf136056004c4696 100644
--- a/.github/workflows/update-data.yml
+++ b/.github/workflows/update-data.yml
@@ -5,7 +5,7 @@ on:
   workflow_dispatch:
 
 env:
-  NODE_VERSION: 20
+  NODE_VERSION: 22
 
 permissions:
   contents: read
diff --git a/.nvmrc b/.nvmrc
index 2a393af592b8cd5dd93b81696c9d9b23e4b59c21..7af24b7ddbde0cc4fda5f94064db85143eed4778 100644
--- a/.nvmrc
+++ b/.nvmrc
@@ -1 +1 @@
-20.18.0
+22.11.0
diff --git a/package.json b/package.json
index 7dfcd6da83e255de4d72ff9b316792d976f1f42a..c2ba4869a45cc59bf858e7f328c116b3f2091af9 100644
--- a/package.json
+++ b/package.json
@@ -135,11 +135,11 @@
   },
   "homepage": "https://renovatebot.com",
   "engines": {
-    "node": "^20.15.1",
+    "node": "^20.15.1 || ^22.11.0",
     "pnpm": "^9.0.0"
   },
   "volta": {
-    "node": "20.18.0",
+    "node": "22.11.0",
     "pnpm": "9.12.3"
   },
   "dependencies": {
diff --git a/tools/docker/Dockerfile b/tools/docker/Dockerfile
index 87d980acba86e1dbd813fe7636ad3fa510308a66..920a7569cec2064a4b7e775098aed1524aee8dea 100644
--- a/tools/docker/Dockerfile
+++ b/tools/docker/Dockerfile
@@ -19,7 +19,7 @@ FROM --platform=$BUILDPLATFORM ghcr.io/renovatebot/base-image:7.41.2@sha256:b104
 
 # We want a specific node version here
 # renovate: datasource=node-version
-RUN install-tool node 20.18.0
+RUN install-tool node 22.11.0
 
 WORKDIR /usr/local/renovate