bun link
Link local packages for development
Use bun link in a local directory to register the current package as a "linkable" package.
cd /path/to/cool-pkg
cat package.json
bun link
bun link v1.3.3 (7416672e)
Success! Registered "cool-pkg"
To use cool-pkg in a project, run:
bun link cool-pkg
Or add it in dependencies in your package.json file:
"cool-pkg": "link:cool-pkg"
You can now "link" this package into other projects using bun link cool-pkg. This command creates a symlink in the target project's node_modules directory pointing to the local directory.
cd /path/to/my-app
bun link cool-pkg
Pass --save to also add cool-pkg to the dependencies field of your app's package.json, with a version specifier that tells Bun to load from the registered local directory instead of installing from npm:
bun link --save cool-pkg
{
"name": "my-app",
"version": "1.0.0",
"dependencies": {
"cool-pkg": "link:cool-pkg" // [!code ++]
}
}
Linking a directory by path
link: also accepts a path, as in Yarn and pnpm. The path is relative to the package.json that declares it, and Bun installs a symlink to that directory. Nothing has to be registered with bun link first.
{
"dependencies": {
"design-tokens": "link:./vendor/design-tokens",
"shared": "link:../shared"
}
}
- Anything that is not a package name is a path:
link:./dir,link:../dir,link:vendor/dir, an absolute path.link:dirandlink:@scope/dirare names registered withbun link; writelink:./dirfor the directory. - The directory must exist. It does not need a
package.json. - The directory's own dependencies are not installed. Use
file:for a copy whose dependencies are installed, or make the directory a workspace. - Only your project may use a path: the root
package.json, a workspace, afile:directory one of them depends on, or a top-leveloverrides/resolutionsentry.bun installfails when a package from the registry, git or a tarball declares one, so replace alink:path before you publish a package.
Unlinking
Use bun unlink in the root directory to unregister a local package.
cd /path/to/cool-pkg
bun unlink
bun unlink v1.3.3 (7416672e)
success: unlinked package "cool-pkg"
CLI Usage
bun link <packages>
Installation Scope
--globalbooleanHas no effect: bun link always registers packages in the global folder. Alias: -g
Dependency Management
--productionbooleanDon't install devDependencies. Alias: -p
--omitstringExclude dev, optional, or peer dependencies from install
Project Files & Lockfiles
--yarnbooleanWrite a yarn.lock file (yarn v1). Alias: -y
--frozen-lockfilebooleanDisallow changes to lockfile
--save-text-lockfilebooleanSave a text-based lockfile
--lockfile-onlybooleanGenerate a lockfile without installing dependencies
--no-savebooleanDon't update package.json or save a lockfile (the default)
--savebooleanUpdate package.json and save a lockfile (false by default)
--trustbooleanAdd to trustedDependencies in the project's package.json and install the package(s)
Installation Control
--forcebooleanAlways request the latest versions from the registry & reinstall all dependencies. Alias: -f
--no-verifybooleanSkip verifying integrity of newly downloaded packages
--backendstringPlatform-specific optimizations for installing dependencies. One of clonefile, hardlink,
symlink, or copyfile
--linkerstringLinker strategy (one of isolated or hoisted)
--dry-runbooleanWith bun link <package>, resolve but don't install packages, update package.json, or
save a lockfile. Has no effect on bare bun link, which still registers the current package
--ignore-scriptsbooleanSkip lifecycle scripts for all packages, including the project's package.json and trusted dependencies
Network & Registry
--castringProvide a Certificate Authority signing certificate
--cafilestringSame as --ca, but as a file path to the certificate
--use-system-cabooleanUse the system's trusted certificate authorities
--use-openssl-cabooleanUse OpenSSL's default CA store instead of the bundled one
--use-bundled-cabooleanUse bundled CA store
--registrystringUse a specific registry by default, overriding .npmrc, bunfig.toml, and environment
variables
--network-concurrencynumberdefault 64Maximum number of concurrent network requests
Performance & Resource
--concurrent-scriptsnumberMaximum number of concurrent jobs for lifecycle scripts (default: 2x CPU cores)
Caching
--cache-dirstringStore & load cached data from a specific directory path
--no-cachebooleanIgnore manifest cache entirely
Output & Logging
--silentbooleanDon't log anything
--quietbooleanDisable the progress bar
--verbosebooleanExcessively verbose logging
--no-progressbooleanDisable the progress bar
--no-summarybooleanDon't print a summary
Platform Targeting
--cpustringOverride CPU architecture for optional dependencies (e.g., x64, arm64, * for
all)
--osstringOverride operating system for optional dependencies (e.g., linux, darwin, * for
all)
--libcstringOverride libc for optional dependencies (e.g., glibc, musl, * for all)
Global Configuration & Context
--configstringSpecify path to config file (bunfig.toml). Alias: -c
--cwdstringSet a specific current working directory
--env-filestringLoad environment variables from the specified file(s)
--no-env-filebooleanDisable automatic loading of .env files
Help
--helpbooleanPrint this help menu. Alias: -h