Files
pnpm/pnpm11/docs/cli/add.md
Zoltan KochanandClaude Opus 5.5 c13953b3bc docs: label shell commands and title file snippets (#16699)
Code blocks that hold only shell commands now use the `sh` language,
and blocks showing a file's contents carry a `title` naming the file,
across the pnpm v12, pnpm v11, and pnpr docs. Bold file-name labels
above code blocks are folded into the titles.

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-07 16:14:37 +02:00

138 lines
3.6 KiB
Markdown

---
id: add
title: "pnpm add <pkg>"
---
Installs a package and any packages that it depends on.
By default, any new package is installed as a production dependency.
## TL;DR
| Command | Meaning |
|----------------------------------------|------------------------------------|
| `pnpm add sax` | Save to `dependencies` |
| `pnpm add -D sax` | Save to `devDependencies` |
| `pnpm add -O sax` | Save to `optionalDependencies` |
| `pnpm add -g sax ` | Install package globally |
| `pnpm add sax@next` | Install from the `next` tag |
| `pnpm add sax@3.0.0` | Specify version `3.0.0` |
## Supported package sources
pnpm supports installing packages from various sources. See the [Supported package sources](../package-sources.md) page for detailed documentation on:
- npm registry
- JSR registry
- Workspace packages
- Local file system (tarballs and directories)
- Remote tarballs
- Git repositories (with semver, subdirectories, and more)
## Options
### --save-prod, -P, -p
Install the specified packages as regular `dependencies`.
### --save-dev, -D, -d
Install the specified packages as `devDependencies`.
### --save-optional, -O, -o
Install the specified packages as `optionalDependencies`.
### --save-exact, -E, -e
Saved dependencies will be configured with an exact version rather than using
pnpm's default semver range operator.
### --save-peer
Using `--save-peer` will add one or more packages to `peerDependencies` and
install them as dev dependencies.
### --save-catalog
Added in: v10.12.1
Save the new dependency to the default [catalog].
### --save-catalog-name &lt;catalog_name\>
Added in: v10.12.1
Save the new dependency to the specified [catalog].
[catalog]: catalogs.md
### --config
Added in: v10.8.0
Save the dependency to [configDependencies](config-dependencies.md).
### --ignore-workspace-root-check
Adding a new dependency to the root workspace package fails, unless the
`--ignore-workspace-root-check` or `-w` flag is used.
For instance, `pnpm add debug -w`.
### --global, -g
Install a package globally. See [Global Packages](../global-packages.md) for details.
Each space-separated package is installed into its own isolated directory. To bundle several packages into a single isolated install (so they share dependencies and are removed together), pass them as a comma-separated list, e.g. `pnpm add -g eslint,prettier`.
### --workspace
Only adds the new dependency if it is found in the workspace.
### --allow-build
Added in: v10.4.0
A list of package names that are allowed to run postinstall scripts during installation.
Example:
```sh
pnpm --allow-build=esbuild add my-bundler
```
This will run `esbuild`'s postinstall script and also add it to the `allowBuilds` field of `pnpm-workspace.yaml`. So, `esbuild` will always be allowed to run its scripts in the future.
Since v11.26.0, prefixing a name with `!` denies the build instead:
```sh
pnpm add --allow-build=!core-js my-bundler
```
writes `allowBuilds: { core-js: false }`, so the package is never asked about again. Global installs (`pnpm add -g`) record the denial too.
### --registry
Specify the registry to use for this installation:
```sh
pnpm add --registry=https://registry.npmjs.org/ lodash
```
### --filter &lt;package_selector\>
[Read more about filtering.](../filtering.md)
import CpuFlag from '../settings/_cpuFlag.mdx'
<CpuFlag />
import OsFlag from '../settings/_osFlag.mdx'
<OsFlag />
import LibcFlag from '../settings/_libcFlag.mdx'
<LibcFlag />