Setup pnpm
ActionsImportant
This action supports pnpm v12 and earlier.
For pnpm v11 and newer, pnpm/setup is also available. It downloads pnpm's self-contained release binary (no Node.js or npm required) and can install a JavaScript runtime (Node.js, Bun, or Deno) in the same step, replacing actions/setup-node when its feature set fits your workflow.
You can continue using pnpm/action-setup with actions/setup-node, including for pnpm v11 and v12. See Using pnpm/setup instead below if you want a single action to install pnpm and a JavaScript runtime.
pnpm/setup cannot install pnpm v11 on Intel macOS (darwin-x64), where no standalone pnpm v11 binary is published. On that platform, run actions/setup-node with Node.js 22.13 or newer before pnpm/action-setup, or upgrade to pnpm v12.
Install pnpm package manager.
The v2 version of this action has stopped working with newer Node.js versions. Please, upgrade to the latest version to fix any issues.
pnpm/setup installs pnpm v11+ as a native standalone executable and can install Node.js, Bun, or Deno in the same step, so a typical workflow no longer needs actions/setup-node or an explicit pnpm install step:
steps:
- uses: actions/checkout@v6
# Before:
# - uses: pnpm/action-setup@v6
# with:
# version: 10
# cache: true
# - uses: actions/setup-node@v4
# with:
# node-version: 22
# - run: pnpm install
# After:
- uses: pnpm/setup@v1
with:
version: 11
runtime: node@22
cache: trueThe version input can be omitted only when packageManager (or devEngines.packageManager) in package.json declares pnpm v11 or newer; otherwise keep it explicit, since pnpm/setup requires pnpm v11+.
Input and output changes:
pnpm/action-setup |
pnpm/setup |
Notes |
|---|---|---|
version |
version |
Must resolve to pnpm v11 or newer. As before, it can be omitted when packageManager (or devEngines.packageManager) is set in package.json. |
dest |
dest |
Unchanged. |
run_install |
install |
pnpm/setup runs pnpm install automatically when a package.json is present (install: true by default); set install: false to skip it. The object/array form (recursive, cwd, args) is not supported — run those commands in separate steps. |
cache |
cache |
Unchanged. |
cache_dependency_path |
cache-dependency-path |
Renamed to kebab-case. |
package_json_file |
package-json-file |
Renamed to kebab-case. |
standalone |
removed | pnpm/setup always installs the standalone native executable. |
| n/a | runtime |
New: installs Node.js, Bun, or Deno (e.g. node@22, bun@latest, deno@2), or reads devEngines.runtime from package.json. |
| n/a | token |
New: GitHub token for release lookup; defaults to ${{ github.token }} and rarely needs to be set. |
bin_dest (output) |
bin-dest (output) |
Renamed to kebab-case. New outputs runtime-name and runtime-version describe the installed runtime. |
Version of pnpm to install.
Optional when there is a packageManager or devEngines.packageManager field in the package.json.
otherwise, this field is required It supports npm versioning scheme, it could be an exact version (such as 10.9.8), or a version range (such as 10, 10.x.x, 10.9.x, ^10.9.8, *, etc.), or latest.
Optional Where to store pnpm files.
Optional (default: null) If specified, run pnpm install.
If run_install is either null or false, pnpm will not install any npm package.
If run_install is true, pnpm will install dependencies recursively.
If run_install is a YAML string representation of either an object or an array, pnpm will execute every install commands.
Optional (type: boolean, default: false) Whether to use pnpm recursive install.
Optional (type: string) Working directory when run pnpm [recursive] install.
Optional (type: string[]) Additional arguments after pnpm [recursive] install, e.g. [--ignore-scripts, --strict-peer-dependencies].
Optional (type: boolean, default: false) Whether to cache the pnpm store directory.
Optional (type: string, default: pnpm-lock.yaml) File path to the pnpm lockfile, whose contents hash will be used as a cache key. Accepts multiple paths delimited by newlines.
Optional (type: string, default: package.json) File path to the package.json/package.yaml to read packageManager or devEngines.packageManager configuration.
Optional (type: boolean, default: false) For pnpm v11 and earlier, install @pnpm/exe, enabling pnpm to run without Node.js.
For pnpm v12, this input has no effect because the plain pnpm package already installs a standalone native executable.
Expanded path of inputs#dest.
Location of pnpm and pnpx command.
This works when the repo either doesn't have a package.json or has a package.json but it doesn't specify packageManager or devEngines.packageManager.
on:
- push
- pull_request
jobs:
install:
runs-on: ubuntu-latest
steps:
- uses: pnpm/action-setup@v6
with:
version: 10Omit version input to use the version in the packageManager or devEngines.packageManager field in the package.json.
on:
- push
- pull_request
jobs:
install:
runs-on: ubuntu-latest
steps:
- uses: pnpm/action-setup@v6on:
- push
- pull_request
jobs:
install:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
- uses: pnpm/action-setup@v6
with:
version: 10
run_install: |
- recursive: true
args: [--strict-peer-dependencies]
- args: [--global, gulp, prettier, typescript]on:
- push
- pull_request
jobs:
cache-and-install:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v6
- uses: pnpm/action-setup@v6
name: Install pnpm
with:
version: 10
cache: true
- name: Install dependencies
run: pnpm installNote: You don't need to run pnpm store prune at the end; post-action has already taken care of that.
on:
- push
- pull_request
jobs:
cache-and-install-multiple:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v6
- uses: pnpm/action-setup@v6
with:
version: 10
cache: true
cache_dependency_path: |
one/pnpm-lock.yaml
two/pnpm-lock.yaml
run_install: |
- cwd: one
- cwd: twoThis action does not set up Node.js. Use actions/setup-node yourself. As an alternative for pnpm v11 or newer, pnpm/setup can install pnpm and Node.js in a single step.
Setup pnpm is not certified by GitHub. It is provided by a third-party and is governed by separate terms of service, privacy policy, and support documentation.