Summary
External task runners (n8nio/runners:latest) are completely broken for all n8n deployments since the Node.js v24 upgrade shipped in n8n v2.8.0 (Feb 2026). Every runner instance crash-loops on startup, causing all Code node executions to fail with task timeouts.
A partial fix was merged on Mar 6 (#26672), but it only covers the main n8n Docker image — not the task runner image. A follow-on PR has been submitted to fix the runners image: #26726.
If you are running external task runners in queue mode (Kubernetes, Cloud Run, Docker Compose sidecars, etc.), you are affected.
Root Cause
PR #25707 upgraded NODE_VERSION from 22.22.0 to 24.13.1 across all Docker images. However, the isolated-vm native addon bundled in the task runner image was pre-compiled against Node.js v22’s V8 engine. Node.js v24 uses a different V8 version with an incompatible ABI, causing the native binary to fail to load at runtime:
ERROR [runner:js] Error: Error relocating isolated-vm/out/isolated_vm.node:
_ZN2v811ArrayBuffer9Allocator10ReallocateEPvmm: symbol not found
ERROR [runner:js] code: 'ERR_DLOPEN_FAILED'
ERROR [runner:js] Node.js v24.13.1
ERROR [launcher:js] Runner process exited with error: exit status 1
The runner process exits immediately, the launcher restarts it, and it fails again — an infinite crash loop that renders all Code node execution non-functional.
Timeline
| Date | Event |
|---|---|
| Feb 13 | PR #25707 merged — NODE_VERSION changed from 22.22.0 to 24.13.1 |
| Feb 18 | n8n v2.8.0 released, including the Node.js v24 change |
| Feb 18+ | External task runners begin crash-looping for all users on n8nio/runners:latest |
| Mar 6 | PR #26672 merged — fixes isolated-vm rebuild in the main n8n image (docker/images/n8n/Dockerfile), but does not fix the runners image (docker/images/runners/Dockerfile) |
| Mar 7 | PR #26726 submitted — applies the same fix to the runners Dockerfile |
Affected Versions
- n8n >= 2.8.0 when using external task runners (
n8nio/runners:latestor any image built from the upstream runners Dockerfile after Feb 13) - The main n8n image (single-container deployments with built-in runners) is fixed as of the #26672 merge, but external runner deployments remain broken until #26726 is merged and a new image is published
Workaround
Until the fix is released, you can work around the issue by adding the following to your custom runners Dockerfile, after the task runner files are copied:
RUN apk add --no-cache --virtual .build-deps python3 make g++ && \
npm rebuild isolated-vm && \
apk del .build-deps
Alternatively, pin to an older runner image tag that was built with Node.js v22.
QA Process Concern
I want to raise this respectfully but clearly: this issue was preventable and should have been caught before release.
The original PR #25707 received a code review (including an automated review by @claude) that checked version string consistency across Dockerfiles, CI workflows, and package constraints. The review concluded “
LGTM” and “
Approve and merge.”
However, the review treated a major Node.js version upgrade as a find-and-replace exercise — verifying that all files say “24” instead of “22” — rather than as a binary compatibility migration. Specifically, the review did not:
-
Identify native addons in the dependency tree.
isolated-vmis a C++ native module compiled against V8 headers. Major Node.js version changes break V8 ABI compatibility for pre-built native binaries. This is a well-known risk with native addons. -
Check for existing
npm rebuildsteps. The main n8n Dockerfile already hadnpm rebuild sqlite3— a clear precedent showing that native addon rebuilds are sometimes necessary after Node.js version changes. The runners Dockerfile had no equivalent step, and the review did not flag this gap. -
Account for the split build pipeline. The task runner’s JavaScript bundle is a pre-built CI artifact (
COPY ./dist/task-runner-javascript), not built from source in the Dockerfile. The native addons inside that artifact were compiled against whatever Node.js version CI used at build time. The review did not verify that the CI build environment matched the runtime Node.js version. -
Recommend a smoke test. A simple
docker run n8nio/runners:latest node -e "require('isolated-vm')"would have caught this immediately. No such test was performed or suggested.
The result was a 3+ week outage window for all external task runner deployments — from the v2.8.0 release on Feb 18 until the partial fix on Mar 6, with the runners image still unfixed as of today (Mar 7).
I understand that major version upgrades are complex and that mistakes happen. But the n8n ecosystem increasingly relies on external task runners for production queue-mode deployments (Kubernetes, Cloud Run, etc.), and these users were left with a completely non-functional component for weeks. A more rigorous QA process for infrastructure changes — particularly those touching native addon compatibility — would go a long way toward preventing issues like this from reaching production.
