.npmrc support
Package Manager npmrc configuration
Bun loads configuration options from .npmrc files, so you can reuse your existing registry and scope configuration.
We recommend migrating your .npmrc file to Bun's bunfig.toml format, which supports more
options, including Bun-specific ones.
Supported options
Set the default registry
Bun resolves packages from the default registry, which is npm's official registry (https://registry.npmjs.org/).
To change it, set the registry option in .npmrc:
registry=http://localhost:4873/The equivalent bunfig.toml option is install.registry:
install.registry = "http://localhost:4873/"Set the registry for a specific scope
@<scope>:registry sets the registry for a specific scope:
@myorg:registry=http://localhost:4873/The equivalent bunfig.toml option is to add a key in install.scopes:
[install.scopes]
myorg = "http://localhost:4873/"Configure options for a specific registry
//<registry_url>/:<key>=<value> sets options for a specific registry:
# set an auth token for the registry
# ${...} is a placeholder for environment variables
//http://localhost:4873/:_authToken=${NPM_TOKEN}
# or you could set a username and password
# note that the password is base64 encoded
//http://localhost:4873/:username=myusername
//http://localhost:4873/:_password=${NPM_PASSWORD}
# or use _auth, which is your username and password
# combined into a single string, which is then base 64 encoded
//http://localhost:4873/:_auth=${NPM_AUTH}The following options are supported:
_authTokenusername_password(base64 encoded password)_auth(base64 encoded username:password, for examplebtoa(username + ":" + password))email
The equivalent bunfig.toml option is to add a key in install.scopes:
[install.scopes]
myorg = { url = "http://localhost:4873/", username = "myusername", password = "$NPM_PASSWORD" }link-workspace-packages: Control workspace package installation
Controls how workspace packages are installed when available locally:
link-workspace-packages=trueThe equivalent bunfig.toml option is install.linkWorkspacePackages:
[install]
linkWorkspacePackages = truesave-exact: Save exact versions
Always saves exact versions without the ^ prefix:
save-exact=trueThe equivalent bunfig.toml option is install.exact:
[install]
exact = trueignore-scripts: Skip lifecycle scripts
Prevents running lifecycle scripts during installation:
ignore-scripts=trueThis is equivalent to using the --ignore-scripts flag with bun install.
dry-run: Preview changes without installing
Shows what would be installed without installing anything:
dry-run=trueThe equivalent bunfig.toml option is install.dryRun:
[install]
dryRun = truecache: Configure cache directory
Set the cache directory path, or disable caching:
# set a custom cache directory
cache=/path/to/cache
# or disable caching
cache=falseThe equivalent bunfig.toml option is install.cache:
[install.cache]
# set a custom cache directory
dir = "/path/to/cache"
# or disable caching
disable = trueca and cafile: Configure CA certificates
Configure custom CA certificates for registry connections:
# single CA certificate
ca="-----BEGIN CERTIFICATE-----\n...\n-----END CERTIFICATE-----"
# multiple CA certificates
ca[]="-----BEGIN CERTIFICATE-----\n...\n-----END CERTIFICATE-----"
ca[]="-----BEGIN CERTIFICATE-----\n...\n-----END CERTIFICATE-----"
# or specify a path to a CA file
cafile=/path/to/ca-bundle.crtomit and include: Control dependency types
Control which dependency types are installed:
# omit dev dependencies
omit=dev
# omit multiple types
omit[]=dev
omit[]=optional
# include specific types (overrides omit)
include=devValid values: dev, peer, optional
install-strategy and node-linker: Installation strategy
Control how packages are laid out in node_modules. For compatibility with other package managers, Bun accepts both npm's install-strategy and pnpm/yarn's node-linker. See isolated installs for how the hoisted and isolated layouts differ.
npm's install-strategy:
# flat node_modules structure (default)
install-strategy=hoisted
# symlinked structure
install-strategy=linkedpnpm/yarn's node-linker:
node-linker controls the installation mode. Bun accepts values from both pnpm and yarn:
| Value | Description | Accepted by |
|---|---|---|
isolated | Symlinked structure with isolated dependencies | pnpm |
hoisted | Flat node_modules structure | pnpm |
pnpm | Symlinked structure (same as isolated) | yarn |
node-modules | Flat node_modules structure (same as hoisted) | yarn |
# symlinked/isolated mode
node-linker=isolated
node-linker=pnpm
# flat/hoisted mode
node-linker=hoisted
node-linker=node-modulespublic-hoist-pattern and hoist-pattern: Control hoisting
Control which packages are hoisted to the root node_modules:
# packages matching this pattern will be hoisted to the root
public-hoist-pattern=*eslint*
# multiple patterns
public-hoist-pattern[]=*eslint*
public-hoist-pattern[]=*prettier*
# control general hoisting behavior
hoist-pattern=*
# isolated linker only: disable the node_modules/.bun/node_modules fallback,
# so store packages only resolve declared deps (plus the root node_modules).
# Hoisted installs ignore this setting.
hoist=false