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. .nvmrc in the repository root

22

2. .node-version — same format.

3. engines.node in package.json

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

4. Project settingsProject → Settings → Node version.

Repository files take priority over the dashboard setting. That is deliberate: if you keep the version in your repo, it stays the source of truth, and your deploy will not start differing from your local build because of a toggle in a panel. The setting is for people who would rather not keep the version in code.

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.

:::tip 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. :::