# Lockfile (/docs/pm/lockfile)

<!-- agent-signals: reading_time_min: 1 · est_tokens: 549 · updated: 2026-07-28 -->
Related: [bunx](/docs/pm/bunx.md), [Workspaces](/docs/pm/workspaces.md), [Catalogs](/docs/pm/catalogs.md), [bun --filter](/docs/pm/filter.md), [Global cache](/docs/pm/global-cache.md), [Global virtual store](/docs/pm/global-store.md)

`bun install` creates a lockfile called `bun.lock`.

#### Should it be committed to git? [#should-it-be-committed-to-git]

Yes

#### Generate a lockfile without installing? [#generate-a-lockfile-without-installing]

To generate a lockfile without installing to `node_modules`, use the `--lockfile-only` flag. The lockfile is always saved to disk, even if it is already up to date with your project's `package.json`(s).

```bash terminal icon="terminal"
bun install --lockfile-only
```

<Note>
  `--lockfile-only` still populates the global install cache with registry metadata and git/tarball dependencies.
</Note>

#### Can I opt out? [#can-i-opt-out]

To install without creating a lockfile:

```bash terminal icon="terminal"
bun install --no-save
```

To write a Yarn lockfile *in addition* to `bun.lock`:

<CodeGroup>
  <CodeBlockTabs defaultValue="terminal">
    <CodeBlockTabsList>
      <CodeBlockTabsTrigger value="terminal">
        terminal
      </CodeBlockTabsTrigger>

      <CodeBlockTabsTrigger value="bunfig.toml">
        bunfig.toml
      </CodeBlockTabsTrigger>
    </CodeBlockTabsList>

    <CodeBlockTab value="terminal">
      ```bash icon="terminal" 
      bun install --yarn
      ```
    </CodeBlockTab>

    <CodeBlockTab value="bunfig.toml">
      ```toml icon="settings" 
      [install.lockfile]
      # whether to save a non-Bun lockfile alongside bun.lock
      # only "yarn" is supported
      print = "yarn"
      ```
    </CodeBlockTab>
  </CodeBlockTabs>
</CodeGroup>

#### Text-based lockfile [#text-based-lockfile]

Bun v1.2 changed the default lockfile format to the text-based `bun.lock`. To migrate an existing binary `bun.lockb`, run `bun install --save-text-lockfile --frozen-lockfile --lockfile-only` and delete `bun.lockb`.

For more on the format, see [the blog post](https://bun.com/blog/bun-lock-text-lockfile).

#### Automatic lockfile migration [#automatic-lockfile-migration]

When running `bun install` in a project without a `bun.lock`, Bun automatically migrates existing lockfiles:

* `yarn.lock` (v1)
* `package-lock.json` (npm)
* `pnpm-lock.yaml` (pnpm)

The original lockfile is preserved and can be removed manually after verification.
