Workers Builds uses a build image with support for a variety of languages and tools such as Node.js, Python, PHP, Ruby, and Go.
Workers Builds supports a variety of runtimes, languages, and tools. Builds will use the default versions listed below unless a custom version is detected or specified. You can override the default versions using environment variables or version files. All versions are available for override.
| Tool | Default version | Environment variable | File |
|---|---|---|---|
| Go | 1.27.3 | GO_VERSION |
|
| Node.js | 24.22.1 | NODE_VERSION |
.nvmrc, .node-version |
| Python | 3.14.8 | PYTHON_VERSION |
.python-version, runtime.txt |
| Ruby | 3.4.11 | RUBY_VERSION |
.ruby-version |
The build image preinstalls Node.js 22.23.4 and 24.22.1.
| Tool | Default version | Environment variable | File |
|---|---|---|---|
| Bun | 1.4.4 | BUN_VERSION |
packageManager field in package.json |
| Hugo | extended_0.147.7 | HUGO_VERSION |
|
| npm | 10.9.2 | packageManager field in package.json |
|
| yarn | 4.18.1 | YARN_VERSION |
packageManager field in package.json |
| pnpm | 9.10.0 | PNPM_VERSION |
packageManager field in package.json |
| pip | 26.2.2 | ||
| gem | 3.6.9 | ||
| poetry | 2.4.3 | ||
| pipx | 1.17.2 | ||
| bundler | 2.6.9 | ||
| uv | 0.13.4 |
For details on the packageManager field, refer to Package manager versions.
If you need to override a specific version of a language or tool within the image, you can specify it as a build environment variable, or set the relevant file in your source code as shown above.
To set the version using a build environment variables, you can:
- Find the environment variable name for the language or tool and desired version (e.g.
NODE_VERSION = 22) - Add and save the environment variable on the dashboard by going to Settings > Build > Build Variables and Secrets in your Workers project
Or, to set the version by adding a file to your project, you can:
- Find the filename for the language or tool (e.g.
.nvmrc) - Add the specified file name to the root directory and set the desired version number as the file's content. For example, if the version number is 22, the file should contain '22'.
To set the version of npm, yarn, pnpm, or Bun, add the packageManager ↗︎ field to your package.json. This is the only way to change the npm version.
{
"packageManager": "npm@11.19.1"
}- Workers Builds reads
packageManagerfrom thepackage.jsonin your project's root directory. If the root directory is not the top level of your repository, Workers Builds also reads thepackage.jsonat the top level of the repository. If both files setpackageManager, use the same value in each. - Use an exact version, such as
npm@11.19.1. Do not use ranges such asnpm@^11. - The
engines.npmfield inpackage.jsondoes not set the npm version. If you only setengines.npm, Workers Builds uses the default npm version, and npm prints anEBADENGINEwarning instead of failing. packageManagersets the version of the package manager. The lockfile in your repository still determines which package manager installs your dependencies.
Workers Builds runs pnpm through Corepack ↗︎. With the default Corepack settings, version selection follows this order:
- The top-level
packageManagerfield inpackage.json. devEngines.packageManagerinpackage.json, when it specifiespnpmand a version.- The
PNPM_VERSIONbuild variable. - The build image's default pnpm version.
Project version requirements take precedence over PNPM_VERSION. Use an exact version to keep builds consistent. A version range in devEngines.packageManager can select different releases across builds. The pnpm version recorded in pnpm-lock.yaml does not pin the version Corepack runs.
The Detected the following tools from environment log line reports tool selection before Corepack applies devEngines.packageManager. Check pnpm's install output for the version that actually ran.
You can add the following build variable to disable automatic dependency installation and run a custom install command instead.
| Build variable | Value |
|---|---|
SKIP_DEPENDENCY_INSTALL |
1 or true |
In the following table, review the pre-installed packages in the build image. The packages are installed with apt, a package manager for Linux distributions.
curl |
libbz2-dev |
libreadline-dev |
git |
libc++1 |
libssl-dev |
git-lfs |
libdb-dev |
libvips-dev |
unzip |
libgdbm-dev |
libyaml-dev |
autoconf |
libgdbm6 |
tzdata |
build-essential |
libgbm1 |
wget |
bzip2 |
libgmp-dev |
zlib1g-dev |
gnupg |
liblzma-dev |
zstd |
libffi-dev |
libncurses5-dev |
Workers Builds are run in the following environment:
| Build Environment | Ubuntu 24.04 |
| Architecture | x86_64 |
Build commands use the CA certificates installed in the build image at /etc/ssl/certs/ca-certificates.crt. Workers Builds sets the following environment variables so that runtimes with their own bundled CA certificates use them as well, including older versions you select with a version override:
| Environment variable | Value |
|---|---|
SSL_CERT_FILE |
/etc/ssl/certs/ca-certificates.crt |
PIP_CERT |
/etc/ssl/certs/ca-certificates.crt |
REQUESTS_CA_BUNDLE |
/etc/ssl/certs/ca-certificates.crt |
NODE_OPTIONS |
--use-openssl-ca |
If you set any of these variables as a build variable, your value replaces the default. --use-openssl-ca is added to your own NODE_OPTIONS, unless it already contains --use-openssl-ca or --use-bundled-ca.
Preinstalled software (languages and tools) will be updated before reaching end-of-life (EOL). These updates apply only if you have not overridden the default version.
- Minor version updates: May be updated to the latest available minor version without notice. For tools that do not follow semantic versioning (e.g., Bun or Hugo), updates that may contain breaking changes will receive 3 months’ notice.
- Major version updates: Updated to the next stable long-term support (LTS) version with 3 months’ notice.
How you'll be notified (for changes requiring notice):
- Cloudflare Changelog ↗︎
- Dashboard notifications for projects that will receive the update
- Email notifications to project owners
To maintain a specific version and avoid automatic updates, override the default version.
To avoid unexpected build failures:
- Monitor announcements via the Cloudflare Changelog ↗︎, dashboard notifications, and email
- Pin specific versions of critical preinstalled software by overriding default versions