David Kim
November 2025
14 minute read

The release of Node.js 22 in April 2024 marks a major milestone in the evolution of the world’s most popular JavaScript runtime. With V8 12.4, built-in WebStreams, single executable applications, and significant performance improvements, this version isn’t just an incremental update—it’s a leap forward.
But with great power comes great responsibility: Node.js 22 introduces breaking changes that can impact existing codebases. This in-depth guide explores every major Node.js 22 feature, highlights breaking changes, and helps you decide: Should you upgrade now—or wait?
Node.js 22 is the latest Current release, entering Long Term Support (LTS) in October 2024 as Node.js 22.x (codename to be announced). It will be actively maintained until April 2026, with extended support until April 2027.
V8 JavaScript engine 12.4
Built-in Web Streams API (stable)
Single executable applications (SEA)
--experimental-require-module flag
Default fetch() and WebSocket global
Improved fs and stream performance
ESM loader hooks stabilization
No more npm install web-streams-polyfill. Web Streams are now stable and built into Node.js.
No need for node-fetch or ws in most cases. Both are now available globally.
Bundle your entire app into a single binary—no source code exposure.
Faster parsing, better JIT optimization, and reduced memory usage.
fs.readFile now uses io_uring on Linux (up to 2x faster)
stream.Readable memory usage reduced by ~30%
Improved backpressure handling
Node.js 22 removes deprecated APIs and changes default behaviors. Here are the critical ones.
You can no longer require() an ESM-only module without --experimental-require-module.
Integrity policies are now stable. Use --policy or NODE_OPTIONS.
new URL(input) now throws on invalid URLs (previously returned malformed object).
fs.promises.readFile() without encoding now returns Uint8Array instead of Buffer.
You’re starting a new project
You want native fetch, WebSocket, or Streams
You need SEA for CLI tools
You’re on Node.js 18 (EOL April 2025)
Performance is critical
You rely on require() for ESM modules
Your CI/CD isn’t ready for breaking changes
You use --experimental-policy in production
You’re on Node.js 20 LTS (supported until April 2026)
Run node --version and check current version
Use nvm or n to install Node.js 22 locally
Run tests with NODE_OPTIONS=--experimental-require-module
Audit dependencies with npm audit and depcheck
Update package.json engines: "node": ">=22.0.0"
Test in staging with real traffic
Roll out gradually using feature flags
| Feature | Node.js 20 | Node.js 22 | |--------|------------|----------------| | V8 Version | 11.3 | 12.4 (faster) | | fetch() | Experimental | Global & Stable | | Web Streams | Polyfill needed | Built-in | | SEA | Experimental | Stable | | ESM require() | Allowed | Requires flag | | LTS Until | Apr 2026 | Oct 2024 → Apr 2027 |
Distribute your CLI as a single binary—no Node.js install required.
Write Cloudflare Workers, Vercel Edge Functions, or Deno with zero dependencies.
With Web Streams, fetch, and WebSocket now standard, Node.js is aligning closer with browser APIs. This reduces the gap between frontend and backend, enabling true full-stack JavaScript.
Node.js 22 is a must-upgrade for new projects and a smart upgrade for performance-critical apps. The built-in web APIs, SEA, and V8 improvements deliver real value—while breaking changes are manageable with proper testing.
Don’t wait for LTS. Start testing Node.js 22 in development today. Your future self (and your bundle size) will thank you.
No. It becomes LTS in October 2024 and will be supported until April 2027.
No. fetch() is global and stable in Node.js 22. Only use node-fetch if you need advanced features.
Yes, if users require() it. Add "type": "module" and document import usage. Support require via --experimental-require-module.
Yes for CLI tools and internal apps. Avoid for apps needing dynamic code loading or hot reloads.
Wait for Node.js 22 LTS (Oct 2024) unless you need new web APIs or SEA immediately.