Astro started failing in your Cloudflare Pages build with a message like:
Error: Node.js v18.17.1 is not supported by Astro. Please upgrade Node.
If your project was building fine before and suddenly broke after upgrading Astro (e.g. to 5.8+), the root cause is a Node runtime mismatch in the Cloudflare Pages build environment.
Why This Happens
Recent Astro releases raised the minimum supported Node version. Supported versions now are:
- 18.20.8 (temporary window – must be at least 18.20.x, not 18.17.x)
- 20.3.0 or higher (recommended active LTS line)
- 22.x (current)
Cloudflare Pages’ default build image (at the time of writing) still ships with Node 18.17.1, which is slightly below the required patched 18.20.x line—so Astro aborts early.
Node 19 and 21 (odd releases) are not supported by Astro.
Quick Fix (TL;DR)
- Add a
.nvmrcfile with22(or20if you prefer the LTS line). - (Or) Set an environment variable
NODE_VERSION=22in Cloudflare Pages Project Settings. - (Optional) Switch Build System Version to v3 in the Pages dashboard if you are on an older build system.
- Commit & redeploy.
Build succeeds once Cloudflare provisions the requested Node version.
Reproduction Steps (What Triggers the Error)
- Existing Astro site deployed on Cloudflare Pages.
- Upgrade Astro in
package.json(e.g."astro": "^5.8.0"). - Push changes; Cloudflare Pages build starts with default Node 18.17.1.
- Astro’s preflight version check fails and aborts the build.
Verifying the Current Node Version
Locally you can test the check:
node -v
# Should be >= 18.20.8 OR >= 20.3.0 OR >= 22.0.0
Inside Cloudflare the build log usually prints something like:
Using Node.js version: v18.17.1
If you see that, you need to pin a newer version.
Solution Options
1. .nvmrc (Simplest)
Create a file at the project root:
.nvmrc
Contents:
22
Commit & push. Cloudflare Pages respects .nvmrc and installs that major version.
2. Cloudflare Environment Variable
In the Cloudflare Pages dashboard:
- Go to: Project → Settings → Environment Variables
- Add:
NODE_VERSION=22 - Redeploy
You can also add it for Preview and Production separately if needed.
3. Wrangler Config (If Using Wrangler / Monorepo)
If you have a wrangler.toml for adjacent functions / workers, don’t use a Pages-specific var like PAGES_VERSION; instead still rely on the NODE_VERSION env var or .nvmrc—Wrangler itself doesn’t control the Pages build Node version, but consistent tooling locally helps.
4. Build System Version v3
Some users report older build system images ignoring .nvmrc. Switch to Build System Version: v3 in the Pages settings to ensure modern runtime management.
Optional: Local Alignment
Align local dev to avoid “works on my machine” gaps:
echo "22" > .nvmrc
nvm use 22 # If using nvm
corepack enable # Ensures modern package managers (pnpm, yarn) are shimmed
If you use pnpm, also ensure the lockfile was generated under the newer Node version to avoid native addon mismatches.
Check package.json Engines (Optional)
If you specify an engines field, update it so deployment platforms warn early:
{
"engines": {
"node": ">=20.3.0 || >=22"
}
}
Avoid pinning exclusively to 18.x now that Astro has moved past that baseline.
Edge Cases & Gotchas
- Cached Dependencies: Cloudflare might reuse caches. A fresh deploy (trigger a rebuild) helps after raising Node.
- Native Binaries: If you have packages compiling native code, purge the cache or bump lockfile after switching Node majors.
- Functions / Workers: Cloudflare Workers runtime is separate; this guide is about the Pages build step.
- Multiple Tools: A
.node-versionfile (asdf) is ignored by Pages—use.nvmrcor env var. - Yarn 1 Constraints: If using Yarn 1 with
enginesstrict, ensure you match local Node before lockfile changes.
Full Step-by-Step Example
# 1. Add Node version management file
echo 22 > .nvmrc
# 2. (Optional local) Use it
nvm use 22
# 3. Update Astro (if not already)
pnpm add astro@latest
# 4. (Optional) Update engines in package.json
# "engines": { "node": ">=20.3.0 || >=22" }
# 5. Commit & push
git add .nvmrc package.json pnpm-lock.yaml
git commit -m "chore: pin Node 22 for Astro build on Cloudflare Pages"
git push
# 6. In Cloudflare Pages UI: add NODE_VERSION=22 (if you skipped .nvmrc) and confirm Build System Version v3
Prevention Checklist
- Track Astro release notes when upgrading majors / minors.
- Keep
.nvmrccommitted so teammates align automatically. - Use an
engines.nodeconstraint for early warnings. - Automate CI to fail if
node -vdrifts below required baseline. - Periodically prune old dependency caches after Node major bumps.
Conclusion
The error isn’t a bug in your code—just a mismatch between Astro’s new minimum Node requirement and Cloudflare Pages’ default runtime. Pin a supported version (20 or 22 recommended) using .nvmrc or NODE_VERSION, optionally update build system to v3, and redeploy. After that, your Astro build will pass again.
If you run into a different build failure after upgrading Node (native module compile errors, mismatched binaries, etc.) you can stash those logs and investigate dependency compatibility next.
Happy deploying!