Bun

bun install

The bun CLI contains a Node.js-compatible package manager designed to be a dramatically faster replacement for npm, yarn, and pnpm. It's a standalone tool that will work in pre-existing Node.js projects; if your project has a package.json, bun install can help you speed up your workflow.

⚡️ 25x faster — Switch from npm install to bun install in any Node.js project to make your installations up to 25x faster.

For Linux users

Manage dependencies

bun install

To install all dependencies of a project:

bun install

On Linux, bun install tends to install packages 20-100x faster than npm install. On macOS, it's more like 4-80x.

package install benchmark

Running bun install will:

  • Install all dependencies, devDependencies, and optionalDependencies. Bun does not install peerDependencies by default.
  • Run your project's {pre|post}install scripts at the appropriate time. For security reasons Bun does not execute lifecycle scripts of installed dependencies.
  • Write a bun.lockb lockfile to the project root.

To install in production mode (i.e. without devDependencies):

bun install --production

To perform a dry run (i.e. don't actually install anything):

bun install --dry-run

To modify logging verbosity:

bun install --verbose # debug logging
bun install --silent  # no logging

Configuring behavior

bun add

To add a particular package:

bun add preact

To specify a version, version range, or tag:

bun add zod@3.20.0
bun add zod@^3.0.0
bun add zod@latest

To add a package as a dev dependency ("devDependencies"):

bun add --development @types/react
bun add -d @types/react

To add a package as an optional dependency ("optionalDependencies"):

bun add --optional lodash

To install a package globally:

bun add --global cowsay # or `bun add -g cowsay`
cowsay "Bun!"
 ______
< Bun! >
 ------
        \   ^__^
         \  (oo)\_______
            (__)\       )\/\
                ||----w |
                ||     ||

Configuring global installation behavior

To view a complete list of options for a given command:

bun add --help

bun remove

To remove a dependency:

bun remove preact

Local packages (bun link)

Use bun link in a local directory to register the current package as a "linkable" package.

cd /path/to/cool-pkg
cat package.json
{
  "name": "cool-pkg",
  "version": "1.0.0"
}
bun link
bun link v0.5.7 (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"

This package can now be "linked" into other projects using bun link cool-pkg. This will create a symlink in the node_modules directory of the target project, pointing to the local directory.

cd /path/to/my-app
bun link cool-pkg

In addition, the --save flag can be used to add cool-pkg to the dependencies field of your app's package.json with a special version specifier that tells Bun to load from the registered local directory instead of installing from npm:

{
  "name": "my-app",
  "version": "1.0.0",
  "dependencies": {
    "cool-pkg": "link:cool-pkg"
  }
}

Git dependencies

To add a dependency from a git repository:

bun install git@github.com:moment/moment.git

Bun supports a variety of protocols, including github, git, git+ssh, git+https, and many more.

{
  "dependencies": {
    "dayjs": "git+https://github.com/iamkun/dayjs.git",
    "lodash": "git+ssh://github.com/lodash/lodash.git#4.17.21",
    "moment": "git@github.com:moment/moment.git",
    "zod": "github:colinhacks/zod"
  }
}

Tarball dependencies

A package name can correspond to a publically hosted .tgz file. During bun install, Bun will download and install the package from the specified tarball URL, rather than from the package registry.

package.json
{
  "dependencies": {
    "zod": "https://registry.npmjs.org/zod/-/zod-3.21.4.tgz"
  }
}

CI/CD

Looking to speed up your CI? Use the official oven-sh/setup-bun action to install bun in a GitHub Actions pipeline.

.github/workflows/release.yml
name: bun-types
jobs:
  build:
    name: build-app
    runs-on: ubuntu-latest
    steps:
      - name: Checkout repo
        uses: actions/checkout@v3
      - name: Install bun
        uses: oven-sh/setup-bun@v1
      - name: Install dependencies
        run: bun install
      - name: Build app
        run: bun run build