Skip to main content

Node.js and Python versions

Layero picks the version to build and run your project on. If you need a specific one, you can pin it.

Supported versions

Node.jsStatus
24supported
22supported, default
20supported
18deprecated
PythonStatus
3.13supported
3.12supported, default
3.11supported
3.10supported

The version your project built on — and where it came from — appears in the build log as [config] node=22.18.0 (.nvmrc).

Pinning a Node.js version

Listed in priority order; the first one found wins.

1. Project settingsProject → Settings → Node.js version (you can also pick it while creating the project).

2. .nvmrc in the repository root

22

3. .node-version — same format.

4. engines.node in package.json

{
"engines": { "node": ">=22" }
}

The dashboard setting takes priority over repository files: it is the last place where you tell the platform what you want, and that choice should not lose silently to a file. If the version is set in both places we build on the one you picked, and name the pin we overrode in the build log:

[config] node=24 (project settings); project setting overrode .nvmrc=22

Leave the setting on "Auto" if you want the repository to decide.

A major (22) is enough. We update the exact build within a major ourselves, along with security updates.

Pinning a Python version

1. runtime.txt (Heroku format):

python-3.12

2. .python-version — just 3.12.

There is no dashboard setting for Python yet.

If you pin an unsupported version

The build does not fail. We build on the default version and say so in the log:

[config] WARNING: Requested Node.js 16 is not supported (supported: 18, 20, 22, 24). Using 22.18.0.

This way a typo in .nvmrc does not block a deploy. Do read the warning though: the default may differ from what you build on locally.

Retiring versions

When a version reaches end of life upstream, we go through three steps:

  1. Warning — in the build log and in the dashboard. Everything keeps working.
  2. Closed for new builds — roughly 3–4 months later. A new deploy on that version will not start, and the error says what to change.
  3. Anything already deployed keeps running, always. We never rebuild your site without you: static files sit in storage, application images are immutable.

We email you before a version closes.

Node.js 18 is at step one. New builds on it close on 1 September 2026.

Worth upgrading early

Node.js 18 genuinely cannot build a modern frontend any more — Vite, for instance, fails with ReferenceError: CustomEvent is not defined, a function added in Node 19. If your project is pinned to 18, moving to 22 usually needs no code changes.