OpenClaw merged PR #99832, "fix: reject incompatible Node 23 runtimes" on July 4th, tightening the runtime contract around a specific Node.js compatibility gap.
The PR is labeled P0 and compatibility-risk because the failure mode could hit users before OpenClaw reached a useful state. OpenClaw could install successfully on Node 23.0 through 23.10, then fail at startup or during state migration because those releases do not expose the required StatementSync.columns() API.
That is the kind of setup bug that feels especially frustrating: the installer appears to accept the environment, but the product fails later in a lower-level SQLite-backed path.
What Changed
The supported runtime contract is now narrower and clearer. OpenClaw accepts Node 22.19+, Node 23.11+, or newer major versions, and rejects Node 23.0 through 23.10 consistently across the setup and launch path.
The PR applies the boundary in several places:
- package metadata
- the launcher
- runtime guards
- daemon diagnostics
- the macOS runtime locator
- shell, PowerShell, and CLI-only installers
The CLI-only installer also verifies the required node:sqlite statement API before accepting an existing runtime. That matters because a version number check alone is less useful than proving the API OpenClaw actually needs is available.
Why It Matters
OpenClaw has been adding more native app, Gateway, and local-first workflows. Those paths depend on setup reliability. If a user has an incompatible but superficially modern Node 23 runtime, OpenClaw needs to stop early with an actionable message instead of reaching a runtime crash.
PR #99832 turns that into a direct compatibility guard. Node 23.7, for example, is now rejected before startup with a supported-range diagnostic. Node 22.19, Node 23.11, and Node 24 proceed successfully in the reported launcher matrix.
That makes the installation contract easier to explain and easier to debug.
Validation
The PR reports a focused Vitest matrix with seven files passing, nine tests passing, and 197 skipped. The author also ran a real launcher matrix with Node 22.19, 23.7, 23.11, and 24.
The important behavioral proof is the boundary itself: Node 23.7 exits with the supported-range diagnostic, while Node 22.19, 23.11, and 24 start successfully.
Additional validation included bash -n checks for the install scripts, byte-identical installer source files against the companion openclaw.ai branch, AWS Crabbox Linux changed checks and build proof, and a final automated review with no accepted actionable findings.
The only noted local gap is the macOS Swift unit suite, which could not run locally because the package requires Swift 6.2 while the installed toolchain was Swift 6.0. The PR says RuntimeLocator boundary tests are included for CI.
Bottom Line
This is not a flashy feature, but it is important release engineering. OpenClaw now rejects the broken Node 23 interval before users reach a SQLite-backed failure path.
For operators and Mac app users, that should turn a confusing startup crash into a clear runtime requirement.
