bun-types 1.2.19 → 1.2.20-canary.20250721T140723
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/docs/api/fetch.md +1 -1
- package/docs/api/spawn.md +1 -1
- package/docs/cli/install.md +56 -1
- package/docs/cli/pm.md +1 -1
- package/docs/cli/publish.md +1 -1
- package/docs/cli/update.md +82 -0
- package/docs/guides/ecosystem/nuxt.md +1 -1
- package/docs/guides/install/add-peer.md +2 -2
- package/docs/guides/install/from-npm-install-to-bun-install.md +1 -1
- package/docs/guides/test/run-tests.md +3 -3
- package/docs/guides/test/snapshot.md +3 -3
- package/docs/guides/test/update-snapshots.md +1 -1
- package/docs/guides/util/version.md +1 -1
- package/docs/install/index.md +12 -0
- package/docs/install/isolated.md +195 -0
- package/docs/installation.md +4 -4
- package/docs/runtime/debugger.md +3 -3
- package/docs/test/dom.md +1 -1
- package/package.json +1 -1
package/docs/api/fetch.md
CHANGED
|
@@ -337,7 +337,7 @@ This will print the request and response headers to your terminal:
|
|
|
337
337
|
```sh
|
|
338
338
|
[fetch] > HTTP/1.1 GET http://example.com/
|
|
339
339
|
[fetch] > Connection: keep-alive
|
|
340
|
-
[fetch] > User-Agent: Bun/1.2.
|
|
340
|
+
[fetch] > User-Agent: Bun/1.2.20-canary.20250721T140723
|
|
341
341
|
[fetch] > Accept: */*
|
|
342
342
|
[fetch] > Host: example.com
|
|
343
343
|
[fetch] > Accept-Encoding: gzip, deflate, br
|
package/docs/api/spawn.md
CHANGED
|
@@ -140,7 +140,7 @@ You can read results from the subprocess via the `stdout` and `stderr` propertie
|
|
|
140
140
|
```ts
|
|
141
141
|
const proc = Bun.spawn(["bun", "--version"]);
|
|
142
142
|
const text = await proc.stdout.text();
|
|
143
|
-
console.log(text); // => "1.2.
|
|
143
|
+
console.log(text); // => "1.2.20-canary.20250721T140723\n"
|
|
144
144
|
```
|
|
145
145
|
|
|
146
146
|
Configure the output stream by passing one of the following values to `stdout/stderr`:
|
package/docs/cli/install.md
CHANGED
|
@@ -183,6 +183,30 @@ Bun supports installing dependencies from Git, GitHub, and local or remotely-hos
|
|
|
183
183
|
}
|
|
184
184
|
```
|
|
185
185
|
|
|
186
|
+
## Installation strategies
|
|
187
|
+
|
|
188
|
+
Bun supports two package installation strategies that determine how dependencies are organized in `node_modules`:
|
|
189
|
+
|
|
190
|
+
### Hoisted installs (default for single projects)
|
|
191
|
+
|
|
192
|
+
The traditional npm/Yarn approach that flattens dependencies into a shared `node_modules` directory:
|
|
193
|
+
|
|
194
|
+
```bash
|
|
195
|
+
$ bun install --linker hoisted
|
|
196
|
+
```
|
|
197
|
+
|
|
198
|
+
### Isolated installs
|
|
199
|
+
|
|
200
|
+
A pnpm-like approach that creates strict dependency isolation to prevent phantom dependencies:
|
|
201
|
+
|
|
202
|
+
```bash
|
|
203
|
+
$ bun install --linker isolated
|
|
204
|
+
```
|
|
205
|
+
|
|
206
|
+
Isolated installs create a central package store in `node_modules/.bun/` with symlinks in the top-level `node_modules`. This ensures packages can only access their declared dependencies.
|
|
207
|
+
|
|
208
|
+
For complete documentation on isolated installs, refer to [Package manager > Isolated installs](https://bun.com/docs/install/isolated).
|
|
209
|
+
|
|
186
210
|
## Configuration
|
|
187
211
|
|
|
188
212
|
The default behavior of `bun install` can be configured in `bunfig.toml`. The default values are shown below.
|
|
@@ -213,11 +237,15 @@ dryRun = false
|
|
|
213
237
|
|
|
214
238
|
# equivalent to `--concurrent-scripts` flag
|
|
215
239
|
concurrentScripts = 16 # (cpu count or GOMAXPROCS) x2
|
|
240
|
+
|
|
241
|
+
# installation strategy: "hoisted" or "isolated"
|
|
242
|
+
# default: "hoisted"
|
|
243
|
+
linker = "hoisted"
|
|
216
244
|
```
|
|
217
245
|
|
|
218
246
|
## CI/CD
|
|
219
247
|
|
|
220
|
-
|
|
248
|
+
Use the official [`oven-sh/setup-bun`](https://github.com/oven-sh/setup-bun) action to install `bun` in a GitHub Actions pipeline:
|
|
221
249
|
|
|
222
250
|
```yaml#.github/workflows/release.yml
|
|
223
251
|
name: bun-types
|
|
@@ -236,4 +264,31 @@ jobs:
|
|
|
236
264
|
run: bun run build
|
|
237
265
|
```
|
|
238
266
|
|
|
267
|
+
For CI/CD environments that want to enforce reproducible builds, use `bun ci` to fail the build if the package.json is out of sync with the lockfile:
|
|
268
|
+
|
|
269
|
+
```bash
|
|
270
|
+
$ bun ci
|
|
271
|
+
```
|
|
272
|
+
|
|
273
|
+
This is equivalent to `bun install --frozen-lockfile`. It installs exact versions from `bun.lock` and fails if `package.json` doesn't match the lockfile. To use `bun ci` or `bun install --frozen-lockfile`, you must commit `bun.lock` to version control.
|
|
274
|
+
|
|
275
|
+
And instead of running `bun install`, run `bun ci`.
|
|
276
|
+
|
|
277
|
+
```yaml#.github/workflows/release.yml
|
|
278
|
+
name: bun-types
|
|
279
|
+
jobs:
|
|
280
|
+
build:
|
|
281
|
+
name: build-app
|
|
282
|
+
runs-on: ubuntu-latest
|
|
283
|
+
steps:
|
|
284
|
+
- name: Checkout repo
|
|
285
|
+
uses: actions/checkout@v4
|
|
286
|
+
- name: Install bun
|
|
287
|
+
uses: oven-sh/setup-bun@v2
|
|
288
|
+
- name: Install dependencies
|
|
289
|
+
run: bun ci
|
|
290
|
+
- name: Build app
|
|
291
|
+
run: bun run build
|
|
292
|
+
```
|
|
293
|
+
|
|
239
294
|
{% bunCLIUsage command="install" /%}
|
package/docs/cli/pm.md
CHANGED
package/docs/cli/publish.md
CHANGED
package/docs/cli/update.md
CHANGED
|
@@ -10,6 +10,86 @@ To update a specific dependency to the latest version:
|
|
|
10
10
|
$ bun update [package]
|
|
11
11
|
```
|
|
12
12
|
|
|
13
|
+
## `--interactive`
|
|
14
|
+
|
|
15
|
+
For a more controlled update experience, use the `--interactive` flag to select which packages to update:
|
|
16
|
+
|
|
17
|
+
```sh
|
|
18
|
+
$ bun update --interactive
|
|
19
|
+
$ bun update -i
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
This launches an interactive terminal interface that shows all outdated packages with their current and target versions. You can then select which packages to update.
|
|
23
|
+
|
|
24
|
+
### Interactive Interface
|
|
25
|
+
|
|
26
|
+
The interface displays packages grouped by dependency type:
|
|
27
|
+
|
|
28
|
+
```
|
|
29
|
+
? Select packages to update - Space to toggle, Enter to confirm, a to select all, n to select none, i to invert, l to toggle latest
|
|
30
|
+
|
|
31
|
+
dependencies Current Target Latest
|
|
32
|
+
□ react 17.0.2 18.2.0 18.3.1
|
|
33
|
+
□ lodash 4.17.20 4.17.21 4.17.21
|
|
34
|
+
|
|
35
|
+
devDependencies Current Target Latest
|
|
36
|
+
□ typescript 4.8.0 5.0.0 5.3.3
|
|
37
|
+
□ @types/node 16.11.7 18.0.0 20.11.5
|
|
38
|
+
|
|
39
|
+
optionalDependencies Current Target Latest
|
|
40
|
+
□ some-optional-package 1.0.0 1.1.0 1.2.0
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
**Sections:**
|
|
44
|
+
|
|
45
|
+
- Packages are grouped under section headers: `dependencies`, `devDependencies`, `peerDependencies`, `optionalDependencies`
|
|
46
|
+
- Each section shows column headers aligned with the package data
|
|
47
|
+
|
|
48
|
+
**Columns:**
|
|
49
|
+
|
|
50
|
+
- **Package**: Package name (may have suffix like ` dev`, ` peer`, ` optional` for clarity)
|
|
51
|
+
- **Current**: Currently installed version
|
|
52
|
+
- **Target**: Version that would be installed (respects semver constraints)
|
|
53
|
+
- **Latest**: Latest available version
|
|
54
|
+
|
|
55
|
+
### Keyboard Controls
|
|
56
|
+
|
|
57
|
+
**Selection:**
|
|
58
|
+
|
|
59
|
+
- **Space**: Toggle package selection
|
|
60
|
+
- **Enter**: Confirm selections and update
|
|
61
|
+
- **a/A**: Select all packages
|
|
62
|
+
- **n/N**: Select none
|
|
63
|
+
- **i/I**: Invert selection
|
|
64
|
+
|
|
65
|
+
**Navigation:**
|
|
66
|
+
|
|
67
|
+
- **↑/↓ Arrow keys** or **j/k**: Move cursor
|
|
68
|
+
- **l/L**: Toggle between target and latest version for current package
|
|
69
|
+
|
|
70
|
+
**Exit:**
|
|
71
|
+
|
|
72
|
+
- **Ctrl+C** or **Ctrl+D**: Cancel without updating
|
|
73
|
+
|
|
74
|
+
### Visual Indicators
|
|
75
|
+
|
|
76
|
+
- **☑** Selected packages (will be updated)
|
|
77
|
+
- **□** Unselected packages
|
|
78
|
+
- **>** Current cursor position
|
|
79
|
+
- **Colors**: Red (major), yellow (minor), green (patch) version changes
|
|
80
|
+
- **Underlined**: Currently selected update target
|
|
81
|
+
|
|
82
|
+
### Package Grouping
|
|
83
|
+
|
|
84
|
+
Packages are organized in sections by dependency type:
|
|
85
|
+
|
|
86
|
+
- **dependencies** - Regular runtime dependencies
|
|
87
|
+
- **devDependencies** - Development dependencies
|
|
88
|
+
- **peerDependencies** - Peer dependencies
|
|
89
|
+
- **optionalDependencies** - Optional dependencies
|
|
90
|
+
|
|
91
|
+
Within each section, individual packages may have additional suffixes (` dev`, ` peer`, ` optional`) for extra clarity.
|
|
92
|
+
|
|
13
93
|
## `--latest`
|
|
14
94
|
|
|
15
95
|
By default, `bun update` will update to the latest version of a dependency that satisfies the version range specified in your `package.json`.
|
|
@@ -20,6 +100,8 @@ To update to the latest version, regardless of if it's compatible with the curre
|
|
|
20
100
|
$ bun update --latest
|
|
21
101
|
```
|
|
22
102
|
|
|
103
|
+
In interactive mode, you can toggle individual packages between their target version (respecting semver) and latest version using the **l** key.
|
|
104
|
+
|
|
23
105
|
For example, with the following `package.json`:
|
|
24
106
|
|
|
25
107
|
```json
|
|
@@ -9,7 +9,7 @@ $ bunx nuxi init my-nuxt-app
|
|
|
9
9
|
✔ Which package manager would you like to use?
|
|
10
10
|
bun
|
|
11
11
|
◐ Installing dependencies...
|
|
12
|
-
bun install v1.2.
|
|
12
|
+
bun install v1.2.20-canary.20250721T140723 (16b4bf34)
|
|
13
13
|
+ @nuxt/devtools@0.8.2
|
|
14
14
|
+ nuxt@3.7.0
|
|
15
15
|
785 packages installed [2.67s]
|
|
@@ -15,7 +15,7 @@ This will add the package to `peerDependencies` in `package.json`.
|
|
|
15
15
|
```json-diff
|
|
16
16
|
{
|
|
17
17
|
"peerDependencies": {
|
|
18
|
-
+ "@types/bun": "^1.2.
|
|
18
|
+
+ "@types/bun": "^1.2.20-canary.20250721T140723"
|
|
19
19
|
}
|
|
20
20
|
}
|
|
21
21
|
```
|
|
@@ -27,7 +27,7 @@ Running `bun install` will install peer dependencies by default, unless marked o
|
|
|
27
27
|
```json-diff
|
|
28
28
|
{
|
|
29
29
|
"peerDependencies": {
|
|
30
|
-
"@types/bun": "^1.2.
|
|
30
|
+
"@types/bun": "^1.2.20-canary.20250721T140723"
|
|
31
31
|
},
|
|
32
32
|
"peerDependenciesMeta": {
|
|
33
33
|
+ "@types/bun": {
|
|
@@ -97,7 +97,7 @@ $ bun update
|
|
|
97
97
|
$ bun update @types/bun --latest
|
|
98
98
|
|
|
99
99
|
# Update a dependency to a specific version
|
|
100
|
-
$ bun update @types/bun@1.2.
|
|
100
|
+
$ bun update @types/bun@1.2.20-canary.20250721T140723
|
|
101
101
|
|
|
102
102
|
# Update all dependencies to the latest versions
|
|
103
103
|
$ bun update --latest
|
|
@@ -21,7 +21,7 @@ Here's what the output of a typical test run looks like. In this case, there are
|
|
|
21
21
|
|
|
22
22
|
```sh
|
|
23
23
|
$ bun test
|
|
24
|
-
bun test v1.2.
|
|
24
|
+
bun test v1.2.20-canary.20250721T140723 (9c68abdb)
|
|
25
25
|
|
|
26
26
|
test.test.js:
|
|
27
27
|
✓ add [0.87ms]
|
|
@@ -47,7 +47,7 @@ To only run certain test files, pass a positional argument to `bun test`. The ru
|
|
|
47
47
|
|
|
48
48
|
```sh
|
|
49
49
|
$ bun test test3
|
|
50
|
-
bun test v1.2.
|
|
50
|
+
bun test v1.2.20-canary.20250721T140723 (9c68abdb)
|
|
51
51
|
|
|
52
52
|
test3.test.js:
|
|
53
53
|
✓ add [1.40ms]
|
|
@@ -85,7 +85,7 @@ Adding `-t add` will only run tests with "add" in the name. This works with test
|
|
|
85
85
|
|
|
86
86
|
```sh
|
|
87
87
|
$ bun test -t add
|
|
88
|
-
bun test v1.2.
|
|
88
|
+
bun test v1.2.20-canary.20250721T140723 (9c68abdb)
|
|
89
89
|
|
|
90
90
|
test.test.js:
|
|
91
91
|
✓ add [1.79ms]
|
|
@@ -18,7 +18,7 @@ The first time this test is executed, Bun will evaluate the value passed into `e
|
|
|
18
18
|
|
|
19
19
|
```sh
|
|
20
20
|
$ bun test test/snap
|
|
21
|
-
bun test v1.2.
|
|
21
|
+
bun test v1.2.20-canary.20250721T140723 (9c68abdb)
|
|
22
22
|
|
|
23
23
|
test/snap.test.ts:
|
|
24
24
|
✓ snapshot [1.48ms]
|
|
@@ -61,7 +61,7 @@ Later, when this test file is executed again, Bun will read the snapshot file an
|
|
|
61
61
|
|
|
62
62
|
```sh
|
|
63
63
|
$ bun test
|
|
64
|
-
bun test v1.2.
|
|
64
|
+
bun test v1.2.20-canary.20250721T140723 (9c68abdb)
|
|
65
65
|
|
|
66
66
|
test/snap.test.ts:
|
|
67
67
|
✓ snapshot [1.05ms]
|
|
@@ -78,7 +78,7 @@ To update snapshots, use the `--update-snapshots` flag.
|
|
|
78
78
|
|
|
79
79
|
```sh
|
|
80
80
|
$ bun test --update-snapshots
|
|
81
|
-
bun test v1.2.
|
|
81
|
+
bun test v1.2.20-canary.20250721T140723 (9c68abdb)
|
|
82
82
|
|
|
83
83
|
test/snap.test.ts:
|
|
84
84
|
✓ snapshot [0.86ms]
|
package/docs/install/index.md
CHANGED
|
@@ -81,6 +81,14 @@ $ bun install --verbose # debug logging
|
|
|
81
81
|
$ bun install --silent # no logging
|
|
82
82
|
```
|
|
83
83
|
|
|
84
|
+
To use isolated installs instead of the default hoisted strategy:
|
|
85
|
+
|
|
86
|
+
```bash
|
|
87
|
+
$ bun install --linker isolated
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
Isolated installs create strict dependency isolation similar to pnpm, preventing phantom dependencies and ensuring more deterministic builds. For complete documentation, see [Isolated installs](https://bun.com/docs/install/isolated).
|
|
91
|
+
|
|
84
92
|
{% details summary="Configuring behavior" %}
|
|
85
93
|
The default behavior of `bun install` can be configured in `bunfig.toml`:
|
|
86
94
|
|
|
@@ -110,6 +118,10 @@ dryRun = false
|
|
|
110
118
|
|
|
111
119
|
# equivalent to `--concurrent-scripts` flag
|
|
112
120
|
concurrentScripts = 16 # (cpu count or GOMAXPROCS) x2
|
|
121
|
+
|
|
122
|
+
# installation strategy: "hoisted" or "isolated"
|
|
123
|
+
# default: "hoisted"
|
|
124
|
+
linker = "hoisted"
|
|
113
125
|
```
|
|
114
126
|
|
|
115
127
|
{% /details %}
|
|
@@ -0,0 +1,195 @@
|
|
|
1
|
+
Bun provides an alternative package installation strategy called **isolated installs** that creates strict dependency isolation similar to pnpm's approach. This mode prevents phantom dependencies and ensures reproducible, deterministic builds.
|
|
2
|
+
|
|
3
|
+
## What are isolated installs?
|
|
4
|
+
|
|
5
|
+
Isolated installs create a non-hoisted dependency structure where packages can only access their explicitly declared dependencies. This differs from the traditional "hoisted" installation strategy used by npm and Yarn, where dependencies are flattened into a shared `node_modules` directory.
|
|
6
|
+
|
|
7
|
+
### Key benefits
|
|
8
|
+
|
|
9
|
+
- **Prevents phantom dependencies** — Packages cannot accidentally import dependencies they haven't declared
|
|
10
|
+
- **Deterministic resolution** — Same dependency tree regardless of what else is installed
|
|
11
|
+
- **Better for monorepos** — Workspace isolation prevents cross-contamination between packages
|
|
12
|
+
- **Reproducible builds** — More predictable resolution behavior across environments
|
|
13
|
+
|
|
14
|
+
## Using isolated installs
|
|
15
|
+
|
|
16
|
+
### Command line
|
|
17
|
+
|
|
18
|
+
Use the `--linker` flag to specify the installation strategy:
|
|
19
|
+
|
|
20
|
+
```bash
|
|
21
|
+
# Use isolated installs
|
|
22
|
+
$ bun install --linker isolated
|
|
23
|
+
|
|
24
|
+
# Use traditional hoisted installs
|
|
25
|
+
$ bun install --linker hoisted
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
### Configuration file
|
|
29
|
+
|
|
30
|
+
Set the default linker strategy in your `bunfig.toml`:
|
|
31
|
+
|
|
32
|
+
```toml
|
|
33
|
+
[install]
|
|
34
|
+
linker = "isolated"
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
### Default behavior
|
|
38
|
+
|
|
39
|
+
By default, Bun uses the **hoisted** installation strategy for all projects. To use isolated installs, you must explicitly specify the `--linker isolated` flag or set it in your configuration file.
|
|
40
|
+
|
|
41
|
+
## How isolated installs work
|
|
42
|
+
|
|
43
|
+
### Directory structure
|
|
44
|
+
|
|
45
|
+
Instead of hoisting dependencies, isolated installs create a two-tier structure:
|
|
46
|
+
|
|
47
|
+
```
|
|
48
|
+
node_modules/
|
|
49
|
+
├── .bun/ # Central package store
|
|
50
|
+
│ ├── package@1.0.0/ # Versioned package installations
|
|
51
|
+
│ │ └── node_modules/
|
|
52
|
+
│ │ └── package/ # Actual package files
|
|
53
|
+
│ ├── @scope+package@2.1.0/ # Scoped packages (+ replaces /)
|
|
54
|
+
│ │ └── node_modules/
|
|
55
|
+
│ │ └── @scope/
|
|
56
|
+
│ │ └── package/
|
|
57
|
+
│ └── ...
|
|
58
|
+
└── package-name -> .bun/package@1.0.0/node_modules/package # Symlinks
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
### Resolution algorithm
|
|
62
|
+
|
|
63
|
+
1. **Central store** — All packages are installed in `node_modules/.bun/package@version/` directories
|
|
64
|
+
2. **Symlinks** — Top-level `node_modules` contains symlinks pointing to the central store
|
|
65
|
+
3. **Peer resolution** — Complex peer dependencies create specialized directory names
|
|
66
|
+
4. **Deduplication** — Packages with identical package IDs and peer dependency sets are shared
|
|
67
|
+
|
|
68
|
+
### Workspace handling
|
|
69
|
+
|
|
70
|
+
In monorepos, workspace dependencies are handled specially:
|
|
71
|
+
|
|
72
|
+
- **Workspace packages** — Symlinked directly to their source directories, not the store
|
|
73
|
+
- **Workspace dependencies** — Can access other workspace packages in the monorepo
|
|
74
|
+
- **External dependencies** — Installed in the isolated store with proper isolation
|
|
75
|
+
|
|
76
|
+
## Comparison with hoisted installs
|
|
77
|
+
|
|
78
|
+
| Aspect | Hoisted (npm/Yarn) | Isolated (pnpm-like) |
|
|
79
|
+
| ------------------------- | ------------------------------------------ | --------------------------------------- |
|
|
80
|
+
| **Dependency access** | Packages can access any hoisted dependency | Packages only see declared dependencies |
|
|
81
|
+
| **Phantom dependencies** | ❌ Possible | ✅ Prevented |
|
|
82
|
+
| **Disk usage** | ✅ Lower (shared installs) | ✅ Similar (uses symlinks) |
|
|
83
|
+
| **Determinism** | ❌ Less deterministic | ✅ More deterministic |
|
|
84
|
+
| **Node.js compatibility** | ✅ Standard behavior | ✅ Compatible via symlinks |
|
|
85
|
+
| **Best for** | Single projects, legacy code | Monorepos, strict dependency management |
|
|
86
|
+
|
|
87
|
+
## Advanced features
|
|
88
|
+
|
|
89
|
+
### Peer dependency handling
|
|
90
|
+
|
|
91
|
+
Isolated installs handle peer dependencies through sophisticated resolution:
|
|
92
|
+
|
|
93
|
+
```bash
|
|
94
|
+
# Package with peer dependencies creates specialized paths
|
|
95
|
+
node_modules/.bun/package@1.0.0_react@18.2.0/
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
The directory name encodes both the package version and its peer dependency versions, ensuring each unique combination gets its own installation.
|
|
99
|
+
|
|
100
|
+
### Backend strategies
|
|
101
|
+
|
|
102
|
+
Bun uses different file operation strategies for performance:
|
|
103
|
+
|
|
104
|
+
- **Clonefile** (macOS) — Copy-on-write filesystem clones for maximum efficiency
|
|
105
|
+
- **Hardlink** (Linux/Windows) — Hardlinks to save disk space
|
|
106
|
+
- **Copyfile** (fallback) — Full file copies when other methods aren't available
|
|
107
|
+
|
|
108
|
+
### Debugging isolated installs
|
|
109
|
+
|
|
110
|
+
Enable verbose logging to understand the installation process:
|
|
111
|
+
|
|
112
|
+
```bash
|
|
113
|
+
$ bun install --linker isolated --verbose
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
This shows:
|
|
117
|
+
|
|
118
|
+
- Store entry creation
|
|
119
|
+
- Symlink operations
|
|
120
|
+
- Peer dependency resolution
|
|
121
|
+
- Deduplication decisions
|
|
122
|
+
|
|
123
|
+
## Troubleshooting
|
|
124
|
+
|
|
125
|
+
### Compatibility issues
|
|
126
|
+
|
|
127
|
+
Some packages may not work correctly with isolated installs due to:
|
|
128
|
+
|
|
129
|
+
- **Hardcoded paths** — Packages that assume a flat `node_modules` structure
|
|
130
|
+
- **Dynamic imports** — Runtime imports that don't follow Node.js resolution
|
|
131
|
+
- **Build tools** — Tools that scan `node_modules` directly
|
|
132
|
+
|
|
133
|
+
If you encounter issues, you can:
|
|
134
|
+
|
|
135
|
+
1. **Switch to hoisted mode** for specific projects:
|
|
136
|
+
|
|
137
|
+
```bash
|
|
138
|
+
$ bun install --linker hoisted
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
2. **Report compatibility issues** to help improve isolated install support
|
|
142
|
+
|
|
143
|
+
### Performance considerations
|
|
144
|
+
|
|
145
|
+
- **Install time** — May be slightly slower due to symlink operations
|
|
146
|
+
- **Disk usage** — Similar to hoisted (uses symlinks, not file copies)
|
|
147
|
+
- **Memory usage** — Higher during install due to complex peer resolution
|
|
148
|
+
|
|
149
|
+
## Migration guide
|
|
150
|
+
|
|
151
|
+
### From npm/Yarn
|
|
152
|
+
|
|
153
|
+
```bash
|
|
154
|
+
# Remove existing node_modules and lockfiles
|
|
155
|
+
$ rm -rf node_modules package-lock.json yarn.lock
|
|
156
|
+
|
|
157
|
+
# Install with isolated linker
|
|
158
|
+
$ bun install --linker isolated
|
|
159
|
+
```
|
|
160
|
+
|
|
161
|
+
### From pnpm
|
|
162
|
+
|
|
163
|
+
Isolated installs are conceptually similar to pnpm, so migration should be straightforward:
|
|
164
|
+
|
|
165
|
+
```bash
|
|
166
|
+
# Remove pnpm files
|
|
167
|
+
$ rm -rf node_modules pnpm-lock.yaml
|
|
168
|
+
|
|
169
|
+
# Install with Bun's isolated linker
|
|
170
|
+
$ bun install --linker isolated
|
|
171
|
+
```
|
|
172
|
+
|
|
173
|
+
The main difference is that Bun uses symlinks in `node_modules` while pnpm uses a global store with symlinks.
|
|
174
|
+
|
|
175
|
+
## When to use isolated installs
|
|
176
|
+
|
|
177
|
+
**Use isolated installs when:**
|
|
178
|
+
|
|
179
|
+
- Working in monorepos with multiple packages
|
|
180
|
+
- Strict dependency management is required
|
|
181
|
+
- Preventing phantom dependencies is important
|
|
182
|
+
- Building libraries that need deterministic dependencies
|
|
183
|
+
|
|
184
|
+
**Use hoisted installs when:**
|
|
185
|
+
|
|
186
|
+
- Working with legacy code that assumes flat `node_modules`
|
|
187
|
+
- Compatibility with existing build tools is required
|
|
188
|
+
- Working in environments where symlinks aren't well supported
|
|
189
|
+
- You prefer the simpler traditional npm behavior
|
|
190
|
+
|
|
191
|
+
## Related documentation
|
|
192
|
+
|
|
193
|
+
- [Package manager > Workspaces](https://bun.com/docs/install/workspaces) — Monorepo workspace management
|
|
194
|
+
- [Package manager > Lockfile](https://bun.com/docs/install/lockfile) — Understanding Bun's lockfile format
|
|
195
|
+
- [CLI > install](https://bun.com/docs/cli/install) — Complete `bun install` command reference
|
package/docs/installation.md
CHANGED
|
@@ -14,7 +14,7 @@ Kernel version 5.6 or higher is strongly recommended, but the minimum is 5.1. Us
|
|
|
14
14
|
```bash#macOS/Linux_(curl)
|
|
15
15
|
$ curl -fsSL https://bun.com/install | bash # for macOS, Linux, and WSL
|
|
16
16
|
# to install a specific version
|
|
17
|
-
$ curl -fsSL https://bun.com/install | bash -s "bun-v1.2.
|
|
17
|
+
$ curl -fsSL https://bun.com/install | bash -s "bun-v1.2.20-canary.20250721T140723"
|
|
18
18
|
```
|
|
19
19
|
|
|
20
20
|
```bash#npm
|
|
@@ -189,10 +189,10 @@ Since Bun is a single binary, you can install older versions of Bun by re-runnin
|
|
|
189
189
|
|
|
190
190
|
### Installing a specific version of Bun on Linux/Mac
|
|
191
191
|
|
|
192
|
-
To install a specific version of Bun, you can pass the git tag of the version you want to install to the install script, such as `bun-v1.2.0` or `bun-v1.2.
|
|
192
|
+
To install a specific version of Bun, you can pass the git tag of the version you want to install to the install script, such as `bun-v1.2.0` or `bun-v1.2.20-canary.20250721T140723`.
|
|
193
193
|
|
|
194
194
|
```sh
|
|
195
|
-
$ curl -fsSL https://bun.com/install | bash -s "bun-v1.2.
|
|
195
|
+
$ curl -fsSL https://bun.com/install | bash -s "bun-v1.2.20-canary.20250721T140723"
|
|
196
196
|
```
|
|
197
197
|
|
|
198
198
|
### Installing a specific version of Bun on Windows
|
|
@@ -201,7 +201,7 @@ On Windows, you can install a specific version of Bun by passing the version num
|
|
|
201
201
|
|
|
202
202
|
```sh
|
|
203
203
|
# PowerShell:
|
|
204
|
-
$ iex "& {$(irm https://bun.com/install.ps1)} -Version 1.2.
|
|
204
|
+
$ iex "& {$(irm https://bun.com/install.ps1)} -Version 1.2.20-canary.20250721T140723"
|
|
205
205
|
```
|
|
206
206
|
|
|
207
207
|
## Downloading Bun binaries directly
|
package/docs/runtime/debugger.md
CHANGED
|
@@ -124,11 +124,11 @@ await fetch("https://example.com", {
|
|
|
124
124
|
This prints the `fetch` request as a single-line `curl` command to let you copy-paste into your terminal to replicate the request.
|
|
125
125
|
|
|
126
126
|
```sh
|
|
127
|
-
[fetch] $ curl --http1.1 "https://example.com/" -X POST -H "content-type: application/json" -H "Connection: keep-alive" -H "User-Agent: Bun/1.2.
|
|
127
|
+
[fetch] $ curl --http1.1 "https://example.com/" -X POST -H "content-type: application/json" -H "Connection: keep-alive" -H "User-Agent: Bun/1.2.20-canary.20250721T140723" -H "Accept: */*" -H "Host: example.com" -H "Accept-Encoding: gzip, deflate, br" --compressed -H "Content-Length: 13" --data-raw "{\"foo\":\"bar\"}"
|
|
128
128
|
[fetch] > HTTP/1.1 POST https://example.com/
|
|
129
129
|
[fetch] > content-type: application/json
|
|
130
130
|
[fetch] > Connection: keep-alive
|
|
131
|
-
[fetch] > User-Agent: Bun/1.2.
|
|
131
|
+
[fetch] > User-Agent: Bun/1.2.20-canary.20250721T140723
|
|
132
132
|
[fetch] > Accept: */*
|
|
133
133
|
[fetch] > Host: example.com
|
|
134
134
|
[fetch] > Accept-Encoding: gzip, deflate, br
|
|
@@ -170,7 +170,7 @@ This prints the following to the console:
|
|
|
170
170
|
[fetch] > HTTP/1.1 POST https://example.com/
|
|
171
171
|
[fetch] > content-type: application/json
|
|
172
172
|
[fetch] > Connection: keep-alive
|
|
173
|
-
[fetch] > User-Agent: Bun/1.2.
|
|
173
|
+
[fetch] > User-Agent: Bun/1.2.20-canary.20250721T140723
|
|
174
174
|
[fetch] > Accept: */*
|
|
175
175
|
[fetch] > Host: example.com
|
|
176
176
|
[fetch] > Accept-Encoding: gzip, deflate, br
|
package/docs/test/dom.md
CHANGED
package/package.json
CHANGED