diff --git a/Dockerfile b/Dockerfile index 6bc43cb6..706ba212 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,4 @@ -FROM node:24-trixie-slim AS builder +FROM node:24.14.1-trixie-slim AS builder WORKDIR /app RUN apt-get update \ @@ -13,7 +13,7 @@ RUN if [ -f package-lock.json ]; then npm ci --no-audit --no-fund; else npm inst COPY . ./ RUN mkdir -p /app/data && npm run build -- --webpack -FROM node:24-trixie-slim AS runner-base +FROM node:24.14.1-trixie-slim AS runner-base WORKDIR /app LABEL org.opencontainers.image.title="omniroute" \ diff --git a/docs/TROUBLESHOOTING.md b/docs/TROUBLESHOOTING.md index fc0e6526..f9a69755 100644 --- a/docs/TROUBLESHOOTING.md +++ b/docs/TROUBLESHOOTING.md @@ -15,7 +15,7 @@ Common problems and solutions for OmniRoute. | No logs written to disk | Set `APP_LOG_TO_FILE=true` and verify call log capture is enabled | | EACCES: permission denied | Set `DATA_DIR=/path/to/writable/dir` to override `~/.omniroute` | | Routing strategy not saving | Update to v1.4.11+ (Zod schema fix for settings persistence) | -| Login crash / blank page | You may be on Node.js 24+ — see [Node.js Compatibility](#nodejs-compatibility) below | +| Login crash / blank page | Check Node.js version — see [Node.js Compatibility](#nodejs-compatibility) below | | `dlopen` / `slice is not valid mach-o file` (macOS) | Run `cd $(npm root -g)/omniroute/app && npm rebuild better-sqlite3 && omniroute` — see [macOS native module rebuild](#macos-native-module-rebuild) below | | Proxy "fetch failed" | Ensure proxy config is set at the correct level — see [Proxy Issues](#proxy-issues) below | @@ -27,10 +27,7 @@ Common problems and solutions for OmniRoute. ### Login page crashes or shows "Module self-registration" error -**Cause:** You are running a Node.js version outside OmniRoute's approved secure runtime floor. Two cases matter: - -1. **Node.js 24+**: `better-sqlite3` is not supported here and startup can fail hard. -2. **Older Node 20/22 patch levels**: the runtime may start, but it falls below the patched security floor OmniRoute now requires. +**Cause:** You are running a Node.js version outside OmniRoute's approved secure runtime floor. The most common case is running an older Node 20, 22, or 24 patch level that falls below the patched security floor OmniRoute requires. **Symptoms:** @@ -40,16 +37,16 @@ Common problems and solutions for OmniRoute. **Fix:** -1. Install a patched Node.js 22 LTS release (recommended): +1. Install a supported Node.js LTS release (recommended: Node.js 24.x): ```bash - nvm install 22.22.2 - nvm use 22.22.2 + nvm install 24 + nvm use 24 ``` -2. Verify your version: `node --version` should show `v22.22.2` or newer on the 22.x LTS line +2. Verify your version: `node --version` should show `v24.0.0` or newer on the 24.x LTS line 3. Reinstall OmniRoute: `npm install -g omniroute` 4. Restart: `omniroute` -> **Supported secure versions:** `>=20.20.2 <21` or `>=22.22.2 <23`. Node.js 24+ is **not supported**. +> **Supported secure versions:** `>=20.20.2 <21`, `>=22.22.2 <23`, or `>=24.0.0 <25`. Node.js 24.x LTS (Krypton) is fully supported. ### macOS: `dlopen` / "slice is not valid mach-o file" diff --git a/src/shared/utils/nodeRuntimeSupport.ts b/src/shared/utils/nodeRuntimeSupport.ts index 2106ed1c..98daa345 100644 --- a/src/shared/utils/nodeRuntimeSupport.ts +++ b/src/shared/utils/nodeRuntimeSupport.ts @@ -16,7 +16,7 @@ export const SECURE_NODE_LINES = Object.freeze([ export const RECOMMENDED_NODE_VERSION = "24.14.1"; export const SUPPORTED_NODE_RANGE = ">=20.20.2 <21 || >=22.22.2 <23 || >=24.0.0 <25"; export const SUPPORTED_NODE_DISPLAY = - "Node.js 20.20.2+ (20.x LTS), 22.22.2+ (22.x LTS), or 24.x (24.x LTS)"; + "Node.js 20.20.2+ (20.x LTS), 22.22.2+ (22.x LTS), or 24.0.0+ (24.x LTS)"; export interface NodeVersionInfo { major: number;