bun patch
lets you persistently patch node_modules in a maintainable, git-friendly way.
Sometimes, you need to make a small change to a package in node_modules/
to fix a bug or add a feature. bun patch
makes it easy to do this without vendoring the entire package and reuse the patch across multiple installs, multiple projects, and multiple machines.
Features:
- Generates
.patch
files applied to dependencies innode_modules
on install .patch
files can be committed to your repository, reused across multiple installs, projects, and machines"patchedDependencies"
inpackage.json
keeps track of patched packagesbun patch
lets you patch packages innode_modules/
while preserving the integrity of Bun’s Global Cache- Test your changes locally before committing them with
bun patch --commit <pkg>
- To preserve disk space and keep
bun install
fast, patched packages are committed to the Global Cache and shared across projects where possible
Step 1. Prepare the package for patching
To get started, usebun patch <pkg>
to prepare the package for patching:
terminal
Don’t forget to call
bun patch <pkg>
! This ensures the package folder in node_modules/
contains a fresh copy of the package with no symlinks/hardlinks to Bun’s cache.If you forget to do this, you might end up editing the package globally in the cache!Step 2. Test your changes locally
bun patch <pkg>
makes it safe to edit the <pkg>
in node_modules/
directly, while preserving the integrity of Bun’s Global Cache. This works by re-creating an unlinked clone of the package in node_modules/
and diffing it against the original package in the Global Cache.
Step 3. Commit your changes
Once you’re happy with your changes, runbun patch --commit <path or pkg>
.
Bun will generate a patch file in patches/
, update your package.json
and lockfile, and Bun will start using the patched package:
terminal
CLI Usage
Patch Generation
Install a package containing modifications in
dir
The directory to put the patch file in (only if —commit is used)
Dependency Management
Don’t install devDependencies. Alias:
-p
Skip lifecycle scripts in the project’s
package.json
(dependency scripts are never
run)Add to
trustedDependencies
in the project’s package.json
and install the
package(s)Install globally. Alias:
-g
Exclude
dev
, optional
, or peer
dependencies from installProject Files & Lockfiles
Write a
yarn.lock
file (yarn v1). Alias: -y
Don’t update
package.json
or save a lockfileSave to
package.json
(true by default)Disallow changes to lockfile
Save a text-based lockfile
Generate a lockfile without installing dependencies
Installation Control
Platform-specific optimizations for installing dependencies. Possible values:
clonefile
(default), hardlink
, symlink
,
copyfile
Linker strategy (one of
isolated
or hoisted
)Don’t install anything
Always request the latest versions from the registry & reinstall all dependencies. Alias:
-f
Skip verifying integrity of newly downloaded packages
Network & Registry
Provide a Certificate Authority signing certificate
Same as
—ca
, but as a file path to the certificateUse a specific registry by default, overriding
.npmrc
, bunfig.toml
, and
environment variablesMaximum number of concurrent network requests (default 48)
Performance & Resource
Maximum number of concurrent jobs for lifecycle scripts (default 5)
Caching
Store & load cached data from a specific directory path
Ignore manifest cache entirely
Output & Logging
Don’t log anything
Only show tarball name when packing
Excessively verbose logging
Disable the progress bar
Don’t print a summary
Platform Targeting
Override CPU architecture for optional dependencies (e.g.,
x64
, arm64
,
*
for all)Override operating system for optional dependencies (e.g.,
linux
, darwin
, *
for all)Global Configuration & Context
Specify path to config file (
bunfig.toml
). Alias: -c
Set a specific current working directory
Help
Print this help menu. Alias:
-h