terminal
terminal
dependencies unless --dev, --optional, or --peer is given. If package.json already lists it in another group, that entry is updated in place.
--dev
Alias —
--development, -d, -D"devDependencies"):
terminal
--optional
To add a package as an optional dependency ("optionalDependencies"):
terminal
--peer
To add a package as a peer dependency ("peerDependencies"):
terminal
devDependencies entry is needed.
--exact
Alias —
-E--exact. Bun writes the exact version number to your package.json instead of a version range.
terminal
package.json:
package.json
terminal
--catalog
In a workspace, --catalog writes the version to the root package.json catalog and adds "catalog:" to the current package. --catalog=<name> uses a named catalog (workspaces.catalogs.<name>) and writes "catalog:<name>".
terminal
package.json
packages/app/package.json
- If the catalog already has an entry, it is reused and only
"catalog:"is written to the current package. Pass an explicit version (bun add react@19 --catalog) to replace the entry — this affects every package that references it. - Without a version, a range already in the current
package.json("react": "^18.2.0") is what gets cataloged. - A package that already references
"catalog:<name>"keeps using that catalog. - The name must be attached with
=:--catalog=testing, not--catalog testing. - Tarball and git specifiers are cataloged under the package’s real name. Relative paths and workspace packages are rejected.
bun add react (no version) writes "catalog:" if the default catalog already lists react. Pass a version to write a concrete range instead.
--filter
Alias —
-F!pattern excludes.
terminal
*matches every workspace package but not the root. To include the root, name it:--filter '*' --filter '<root-name>'.- If no workspace matches, nothing is written and the command fails.
- Local paths are resolved from the current directory and rewritten relative to each selected package.
bun.lockis updated for the whole repo, but only the selected workspaces are linked intonode_modules, as withbun install --filter.- Cannot be combined with
--global.
--global
Alias —
bun add --global, bun add -g, bun install --global and bun install -g-g/--global flag. This does not modify the package.json of your current project. Use it to install command-line tools.
terminal
Configuring global installation behavior
Configuring global installation behavior
bunfig.toml
Trusted dependencies
Unlike other npm clients, Bun does not execute arbitrary lifecycle scripts for installed dependencies, such aspostinstall. These scripts represent a potential security risk, as they can execute arbitrary code on your machine.
To tell Bun to allow lifecycle scripts for a particular package, add the package to trustedDependencies in your package.json.
package.json
my-trusted-package.
Git dependencies
To add a dependency from a public or private git repository:terminal
To install private repositories, your system needs the appropriate SSH credentials to access the repository.
github, git, git+ssh, and git+https.
package.json
Tarball dependencies
A package name can correspond to a publicly hosted.tgz file. Bun downloads and installs the package from that tarball URL rather than from the package registry.
terminal
bun add writes the URL to your package.json:
package.json
CLI Usage
Dependency Management
boolean
Don’t install devDependencies. Alias:
-pstring
Exclude
dev, optional, or peer dependencies from installboolean
Install globally. Alias:
-gboolean
Add dependency to
devDependencies. Alias: -dboolean
Add dependency to
optionalDependenciesboolean
Add dependency to
peerDependenciesboolean
Add the exact version instead of the
^ range. Alias: -Eboolean
Only add dependencies to
package.json if they are not already presentstring
Add the resolved version to the root
package.json catalog and depend on it as catalog:;
—catalog=NAME targets catalogs.NAMEstring
Add the package(s) to the matching workspaces instead of the current package. Alias:
-FProject Files & Lockfiles
boolean
Write a
yarn.lock file (yarn v1). Alias: -yboolean
Don’t update
package.json or save a lockfileboolean
default:"true"
Save to
package.jsonboolean
Disallow changes to lockfile
boolean
Add to
trustedDependencies in the project’s package.json and install the package(s)boolean
Save a text-based lockfile
boolean
Generate a lockfile without installing dependencies
Installation Control
boolean
Don’t install anything
boolean
Always request the latest versions from the registry & reinstall all dependencies. Alias:
-fboolean
Skip verifying integrity of newly downloaded packages
boolean
Skip lifecycle scripts in the project’s
package.json (dependency scripts are never run)boolean
Recursively analyze & install dependencies of files passed as arguments (using Bun’s bundler). Alias:
-aNetwork & Registry
string
Provide a Certificate Authority signing certificate
string
Same as
—ca, but as a file path to the certificatestring
Use a specific registry by default, overriding
.npmrc, bunfig.toml, and environment
variablesnumber
default:"48"
Maximum number of concurrent network requests
Performance & Resource
string
default:"clonefile"
Platform-specific optimizations for installing dependencies. One of
clonefile, hardlink,
symlink, or copyfilenumber
Maximum number of concurrent jobs for lifecycle scripts (default: 2x CPU cores)
Caching
string
Store & load cached data from a specific directory path
boolean
Ignore manifest cache entirely
Output & Logging
boolean
Don’t log anything
boolean
Excessively verbose logging
boolean
Disable the progress bar
boolean
Don’t print a summary
Global Configuration & Context
string
Specify path to config file (
bunfig.toml). Alias: -cstring
Set a specific current working directory
Help
boolean
Print this help menu. Alias:
-h