Skip to content

Upgrade to Node.js 20 LTS #10

Description

@jonnyspicer

Overview

Upgrade from Node.js 18 LTS to Node.js 20 LTS for extended support and improved performance.

Current State

Proposed Change

  • Target version: Node.js 20 LTS
  • Support until: April 2027 (2+ years)
  • Status: Active LTS (most stable)

Benefits

Extended Support

  • Node 18: April 2026 (1.5 years)
  • Node 20: April 2027 (2+ years)
  • +12 months additional security patches and updates

Performance

  • V8 engine: 10.1 → 11.3
  • ~10-15% performance improvement
  • Better ARM64 optimizations for Raspberry Pi 5

Security

  • Latest OpenSSL 3.0.x patches
  • Newer V8 security fixes
  • Active LTS receives priority updates

Risks

Breaking Changes (Low Impact)

  • V8 11.3 engine changes (minor)
  • DNS resolution behavior (same as 18 → test needed)
  • OpenSSL 3.0.x minor version (compatible)

Codebase Assessment

✅ Zero runtime dependencies
✅ Simple ES module usage
✅ No direct crypto/TLS usage
✅ Standard library only (fetch, dns, express)
✅ ARM64 Docker images available

Risk level: 🟢 Low (incremental from Node 18)

Testing Plan

Phase 1: Local Testing

# Change Dockerfile
FROM node:20

# Run tests
npm test

# Verify all 50 tests pass

Phase 2: Docker Build

docker build -t adsb2dd:node20-test .
docker run -p 49155:80 adsb2dd:node20-test

# Test API endpoint
curl "http://localhost:49155/api/dd?server=https://api.adsb.lol&rx=-35,138.7,50&tx=-35,138.6,50&fc=204.64"

Phase 3: Raspberry Pi 5 Deployment

cd /opt/adsb2dd
git pull
docker compose down
docker compose build
docker compose up -d

# Monitor for 24-48 hours
docker logs -f adsb2dd

Focus Areas

  • ✅ All unit tests pass
  • ⚠️ DNS resolution (SSRF protection working)
  • ⚠️ HTTPS fetch to adsb.lol and tar1090
  • ⚠️ ARM64 performance
  • ⚠️ Memory usage patterns

Implementation

Simple Change

# Dockerfile
- FROM node:18
+ FROM node:20

That's it! No code changes needed.

Rollback Plan

# Quick revert if issues arise
git revert HEAD
git push
docker compose build && docker compose up -d

Recommendation

Proceed: The incremental risk from Node 18 → 20 is minimal, and the extended support window is valuable.

References

Related

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions