|
| 1 | +# Node.js End-of-Life Strategy |
| 2 | + |
| 3 | +## Overview |
| 4 | + |
| 5 | +This document defines the strategy for managing Node.js runtime versions in the **game** project, ensuring we stay on actively maintained releases and plan upgrades proactively. All version decisions align with the [Hack23 ISMS Secure Development Policy](https://github.com/Hack23/ISMS-PUBLIC). |
| 6 | + |
| 7 | +--- |
| 8 | + |
| 9 | +## Current Status (March 2026) |
| 10 | + |
| 11 | +| Node.js | Release Date | Status | Bug Fixes Until | Security Fixes Until | |
| 12 | +|---------|-------------|--------|-----------------|----------------------| |
| 13 | +| **25 (Current)** | Oct 15, 2025 | ✅ **Active — in use** | Apr 1, 2026 | Jun 1, 2026 | |
| 14 | +| 24 (LTS – Krypton) | May 2025 | Active LTS | Oct 2026 | Apr 28, 2028 | |
| 15 | +| 22 (LTS – Jod) | Apr 2024 | Maintenance | Oct 2025 | Apr 30, 2027 | |
| 16 | +| 20 (LTS – Iron) | Apr 2023 | Maintenance | Oct 2024 | Apr 30, 2026 | |
| 17 | + |
| 18 | +> **Note:** Node.js 25 is an odd-numbered "Current" release, meaning it does **not** receive LTS status. It is supported for approximately 6 months before reaching end-of-life. We use it to validate readiness for Node.js 26. |
| 19 | +
|
| 20 | +--- |
| 21 | + |
| 22 | +## Node.js Release Cadence |
| 23 | + |
| 24 | +The OpenJS Foundation follows a predictable release schedule: |
| 25 | + |
| 26 | +- **Every April** — A new **even-numbered** major version is published as "Current"; odd-numbered Current versions reach EOL |
| 27 | +- **Every October** — The April even-numbered release graduates to "Active LTS", and a new odd-numbered major is published as "Current" |
| 28 | +- **Active LTS** lasts 12 months; **Maintenance LTS** lasts an additional 18 months |
| 29 | + |
| 30 | +``` |
| 31 | +Version | Release | Current | Active LTS | Maintenance LTS | EOL |
| 32 | +---------|-----------|----------|---------------|-----------------|---------- |
| 33 | +Node 20 | Apr 2023 | ~6 mo | Oct 2023 | Oct 2024 | Apr 2026 |
| 34 | +Node 22 | Apr 2024 | ~6 mo | Oct 2024 | Oct 2025 | Apr 2027 |
| 35 | +Node 24 | May 2025 | ~6 mo | Oct 2025 | Oct 2026 | Apr 2028 |
| 36 | +Node 25 | Oct 2025 | ~6 mo | N/A (odd) | N/A | Jun 2026 |
| 37 | +Node 26 | Apr 2026 | ~6 mo | Oct 2026 | Oct 2027 | Apr 2029 |
| 38 | +Node 27 | Oct 2026 | ~6 mo | N/A (odd) | N/A | Jun 2027 |
| 39 | +Node 28 | Apr 2027 | ~6 mo | Oct 2027 | Oct 2028 | Apr 2030 |
| 40 | +``` |
| 41 | + |
| 42 | +--- |
| 43 | + |
| 44 | +## Version Upgrade Policy |
| 45 | + |
| 46 | +### Principles |
| 47 | + |
| 48 | +1. **Never run end-of-life Node.js in CI/CD or production** — upgrade within 30 days of EOL. |
| 49 | +2. **Track even-numbered LTS releases for stability** — use Current (odd) releases for forward compatibility testing. |
| 50 | +3. **Upgrade CI/CD and dev containers together** — single PR, all-or-nothing. |
| 51 | +4. **Test on the next version before it is released** — reduce upgrade friction. |
| 52 | + |
| 53 | +### Upgrade Triggers |
| 54 | + |
| 55 | +| Trigger | Action | Timeline | |
| 56 | +|---------|--------|----------| |
| 57 | +| New major version release | Update `test-and-report-latest-node.yml` to new version | Within 1 week of release | |
| 58 | +| Current version reaches EOL | Upgrade all workflows to next version | Before EOL date | |
| 59 | +| LTS version graduates | Evaluate adoption for main workflow | Within 2 weeks | |
| 60 | +| Security advisory | Apply patch or upgrade immediately | Within 24 hours | |
| 61 | + |
| 62 | +--- |
| 63 | + |
| 64 | +## Upcoming Milestones |
| 65 | + |
| 66 | +### ⚠️ Immediate — Node.js 25 End of Bug Fixes: April 1, 2026 |
| 67 | + |
| 68 | +Node.js 25 receives its final bug-fix release around **April 1, 2026**. Security-only patches continue until **June 1, 2026**. |
| 69 | + |
| 70 | +Action required: Upgrade all CI/CD workflows to Node.js 26 immediately after its release in April 2026. See [FUTURE_WORKFLOWS.md](./FUTURE_WORKFLOWS.md) for the detailed upgrade plan. |
| 71 | + |
| 72 | +### 🔜 Upcoming — Node.js 26 Release: April 2026 |
| 73 | + |
| 74 | +Node.js 26 is expected in **April 2026**. It will: |
| 75 | + |
| 76 | +- Enter "Current" status immediately upon release |
| 77 | +- Graduate to **Active LTS in October 2026** |
| 78 | +- Be maintained (Active + Maintenance) until **April 2029** |
| 79 | + |
| 80 | +**Planned upgrade:** Within **2 weeks** of the Node.js 26 release. See [FUTURE_WORKFLOWS.md](./FUTURE_WORKFLOWS.md). |
| 81 | + |
| 82 | +### 📅 Future — Node.js 26 Active LTS: October 2026 |
| 83 | + |
| 84 | +When Node.js 26 enters Active LTS, it becomes the recommended production runtime. At this point: |
| 85 | + |
| 86 | +- Node.js 24 transitions from Active LTS to Maintenance LTS |
| 87 | +- The primary workflow (`test-and-report.yml`) should target Node.js 26 |
| 88 | + |
| 89 | +### 📅 Future — Node.js 24 EOL: April 2028 |
| 90 | + |
| 91 | +Node.js 24 reaches end-of-life in April 2028. By this date, all workflows and devcontainers must have moved to Node.js 26 or later. |
| 92 | + |
| 93 | +--- |
| 94 | + |
| 95 | +## Version Matrix |
| 96 | + |
| 97 | +The project maintains two parallel test workflows: |
| 98 | + |
| 99 | +| Workflow | Purpose | Current Node Version | |
| 100 | +|----------|---------|----------------------| |
| 101 | +| `test-and-report.yml` | Primary CI — stable, production-ready | **25** | |
| 102 | +| `test-and-report-latest-node.yml` | Forward-compat — tests next version | **25** (will become 26) | |
| 103 | + |
| 104 | +When a new Node.js version is released: |
| 105 | +1. Update `test-and-report-latest-node.yml` to the new version first |
| 106 | +2. Once validated (typically within the same sprint), update `test-and-report.yml` |
| 107 | +3. Update all other workflows (`release.yml`, `codeql.yml`, copilot setup) together |
| 108 | + |
| 109 | +--- |
| 110 | + |
| 111 | +## Risk Assessment |
| 112 | + |
| 113 | +| Risk | Likelihood | Impact | Mitigation | |
| 114 | +|------|-----------|--------|------------| |
| 115 | +| Security vulnerability in EOL Node.js | High (after EOL) | Critical | Upgrade before EOL | |
| 116 | +| Incompatible npm packages | Medium | High | Run tests on new version early | |
| 117 | +| Breaking API changes | Low | High | Test on Current release before it becomes primary | |
| 118 | +| CI/CD downtime during upgrade | Low | Medium | Upgrade in dedicated PR with rollback plan | |
| 119 | + |
| 120 | +--- |
| 121 | + |
| 122 | +## References |
| 123 | + |
| 124 | +- [Node.js Release Schedule](https://nodejs.org/en/about/previous-releases) |
| 125 | +- [Node.js End-of-Life Dates — endoflife.date](https://endoflife.date/nodejs) |
| 126 | +- [Hack23 ISMS Secure Development Policy](https://github.com/Hack23/ISMS-PUBLIC) |
| 127 | +- [WORKFLOWS.md](./WORKFLOWS.md) — Current CI/CD workflow documentation |
| 128 | +- [FUTURE_WORKFLOWS.md](./FUTURE_WORKFLOWS.md) — Planned Node.js 26 upgrade |
0 commit comments