Node.js 22.14.0 LTS Released with Stable Synchronous ESM Loading via require()
The Node.js project has announced the release of version 22.14.0 as part of its Long Term Support schedule. This release marks a significant milestone by making the ability to load ECMAScript Modules via the require() function stable and enabled by default. This change addresses a long-standing pain point for developers who previously had to rely on asynchronous dynamic imports to consume ESM packages within existing CommonJS environments. The feature is limited to ESM files that do not contain top-level await to maintain synchronous execution patterns. Technically, this update bridges the gap between the two module systems in the JavaScript ecosystem. By allowing synchronous access to ESM, libraries can migrate to the newer standard without breaking compatibility for their CommonJS consumers. The release also includes an update to the V8 engine, bringing performance enhancements and better memory management. Furthermore, it continues to refine experimental features such as built-in TypeScript type stripping and the integrated test runner, reinforcing Node.js as a robust platform for modern application development. From a practical standpoint, developers should review their dependency trees to identify where require() can replace complex asynchronous loading logic. Since this version is part of the Active LTS stream, it provides a stable foundation for enterprise applications until April 2027. Teams managing older deployments are encouraged to plan their migration to v22.14.0 to leverage these developer productivity improvements and the latest security patches included in the underlying engine updates.
Related tools
Recommended tools for this topic
These picks prioritize high-intent tools relevant to this topic. Some links may include partner or affiliate tracking.
Strong fit for AI, backend, and frontend readers looking for an AI-first coding workflow.
View CursorNatural next step for readers evaluating LLM adoption, APIs, and production inference.
Explore APIStrong full-stack backend pick spanning database, auth, storage, and dev tooling.
View SupabaseComparison
| Aspect | Before / Alternative | After / This |
|---|---|---|
| ESM Loading in CJS | Must use dynamic import() (asynchronous) | Can use require() (synchronous, no flag) |
| Top-level await ESM | Handled via dynamic import() | Still requires import(); require() will throw |
| V8 Engine Version | V8 12.4 (Experimental status) | V8 12.4.254.21 (LTS Stable) |
Action Checklist
- Upgrade local and CI environments to Node.js v22.14.0 Ensure your package manager is compatible with the latest LTS
- Identify async import() calls used for ESM packages Evaluate if they can be simplified to synchronous require()
- Verify dependency tree for top-level await require() will fail if the target ESM uses top-level await
Source: Node.js Official Blog
This page summarizes the original source. Check the source for full details.

