Node.js v22+ & pnpm v11+ images for every supported version pair with Alpine and Bookworm variants.
10K+
Up-to-date Docker images with Node.js and pnpm preinstalled.
pnpm-node provides a complete, predictable set of Node.js + pnpm images across supported Node.js major versions, pnpm 11+, with Alpine and Bookworm variants.
If you need a version of pnpm below 11 use guergeiro/pnpm.
FROM nicklpeterson/pnpm-node:26-12-alpine
# FROM nicklpeterson/pnpm-node:26-12-bookworm
WORKDIR /app
COPY package.json pnpm-lock.yaml ./
RUN pnpm install --frozen-lockfile
COPY . .
CMD ["pnpm", "start"]
Or pull an image directly:
docker pull nicklpeterson/pnpm-node:26-12-alpine
ARG NODE_VERSION
ARG PNPM_VERSION
ARG VARIANT
FROM node:${NODE_VERSION}-${VARIANT}
RUN npm install --global --allow-scripts=pnpm "pnpm@${PNPM_VERSION}"
https://github.com/nicklpeterson/pnpm-node
The project retains pnpm releases so that older pnpm versions remain available when applications need them.
Examples include:
11.0.0
11.1.0
11.10.0
11.27.1
12.0.0
12.2.0
12.3.0
12.5.1
Check the available tags for the complete current list.
The project tracks a current release for each supported Node.js major line.
22.x
24.x
26.x
Major-version aliases use the Node.js patch version currently tracked by the project.
Fully pinned tags expose the exact Node.js version used.
Tags follow this format:
<node>-<pnpm>-<variant>
Examples:
22-12-alpine
22-12-bookworm
24-11-alpine
24-11-bookworm
26-12.5-alpine
26-12.5.1-bookworm
26-12.5.1-alpine
Several levels of version specificity are published.
Images are published as multi-platform images for:
linux/amd64
linux/arm64
Docker automatically selects the appropriate image for your system.
For example, the same tag can be used on:
FROM <dockerhub-user>/pnpm-node:26-12-bookworm
WORKDIR /app
COPY package.json pnpm-lock.yaml ./
RUN pnpm install --frozen-lockfile
COPY . .
RUN pnpm build
CMD ["pnpm", "start"]
You can also use pnpm-node in multi-stage builds:
FROM nicklpeterson/pnpm-node:26-12-bookworm AS build
WORKDIR /app
COPY package.json pnpm-lock.yaml ./
RUN pnpm install --frozen-lockfile
COPY . .
RUN pnpm build
FROM node:26-bookworm
WORKDIR /app
COPY --from=build /app/dist ./dist
COPY --from=build /app/package.json ./
CMD ["node", "dist/index.js"]
This lets you use pnpm for dependency installation and builds without necessarily including pnpm in the final runtime image.
Standard npm-compatible configuration can be supplied by downstream users.
For example:
NPM_CONFIG_REGISTRY=https://registry.example.com/
In CI:
env:
NPM_CONFIG_REGISTRY: https://registry.example.com/
Or during a Docker build:
FROM nicklpeterson/pnpm-node:26-12-bookworm
ARG NPM_CONFIG_REGISTRY
RUN pnpm install --frozen-lockfile
Images are built automatically from the project's version matrix.
When a tracked Node.js version or pnpm version changes, the relevant floating tags are updated.
For example:
26-12-alpine
can move forward as newer Node.js 26 and pnpm 12 releases are added.
Fully pinned tags such as:
26.9.0-12.5.1-alpine
identify a specific Node.js + pnpm combination.
Content type
Image
Digest
sha256:43509f01c…
Size
440.3 MB
Last updated
2 minutes ago
docker pull nicklpeterson/pnpm-node:26.9.0-12.1.0-bookworm