Runtime
Bundler
Package Manager
Test Runner
Guides
Reference
Blog
Install Bun
Package Manager Advanced Configuration

Global cache

How Bun stores and manages packages in its global cache

Bun stores every package downloaded from the registry in a global cache at ~/.bun/install/cache, or the path set by the BUN_INSTALL_CACHE_DIR environment variable. Packages live in subdirectories named like ${name}@${version}, so multiple versions of a package can be cached.


Minimizing re-downloads

When installing a package, if the cache already contains a version in the range specified by package.json, Bun uses the cached copy instead of downloading it again.


Fast copying

Once a package is downloaded into the cache, Bun still needs to copy those files into node_modules. It uses the fastest syscalls available for this: hardlinks on Linux, clonefile on macOS.


Saving disk space

Since Bun uses hardlinks to "copy" a module into a project's node_modules directory on Linux and Windows, the contents of the package only exist in a single location on disk, greatly reducing the disk space used by node_modules.

The same applies on macOS, with a caveat. There Bun uses clonefile, which is copy-on-write: the clone occupies no extra disk space, but it counts towards the drive's limit. Because the copy only happens on write, patching node_modules/* in one project can't affect other installations.