bun-types 1.3.2-canary.20251104T140728 → 1.3.2-canary.20251106T140813

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.
Files changed (312) hide show
  1. package/bun.d.ts +4 -4
  2. package/docs/README.md +28 -0
  3. package/globals.d.ts +0 -1
  4. package/overrides.d.ts +45 -15
  5. package/package.json +1 -1
  6. package/test.d.ts +1 -1
  7. package/docs/api/binary-data.md +0 -1038
  8. package/docs/api/cc.md +0 -197
  9. package/docs/api/color.md +0 -262
  10. package/docs/api/console.md +0 -57
  11. package/docs/api/cookie.md +0 -449
  12. package/docs/api/dns.md +0 -110
  13. package/docs/api/fetch.md +0 -463
  14. package/docs/api/ffi.md +0 -557
  15. package/docs/api/file-io.md +0 -366
  16. package/docs/api/file-system-router.md +0 -112
  17. package/docs/api/file.md +0 -19
  18. package/docs/api/glob.md +0 -178
  19. package/docs/api/globals.md +0 -387
  20. package/docs/api/hashing.md +0 -319
  21. package/docs/api/html-rewriter.md +0 -334
  22. package/docs/api/http.md +0 -1408
  23. package/docs/api/import-meta.md +0 -69
  24. package/docs/api/node-api.md +0 -14
  25. package/docs/api/redis.md +0 -597
  26. package/docs/api/s3.md +0 -850
  27. package/docs/api/secrets.md +0 -319
  28. package/docs/api/semver.md +0 -52
  29. package/docs/api/spawn.md +0 -582
  30. package/docs/api/sql.md +0 -1374
  31. package/docs/api/sqlite.md +0 -694
  32. package/docs/api/streams.md +0 -230
  33. package/docs/api/tcp.md +0 -221
  34. package/docs/api/transpiler.md +0 -276
  35. package/docs/api/udp.md +0 -123
  36. package/docs/api/utils.md +0 -891
  37. package/docs/api/websockets.md +0 -573
  38. package/docs/api/workers.md +0 -322
  39. package/docs/api/yaml.md +0 -668
  40. package/docs/benchmarks.md +0 -120
  41. package/docs/bun-flavored-toml.md +0 -42
  42. package/docs/bundler/css.md +0 -1028
  43. package/docs/bundler/css_modules.md +0 -145
  44. package/docs/bundler/executables.md +0 -626
  45. package/docs/bundler/fullstack.md +0 -418
  46. package/docs/bundler/hmr.md +0 -234
  47. package/docs/bundler/html.md +0 -349
  48. package/docs/bundler/index.md +0 -1735
  49. package/docs/bundler/intro.md +0 -75
  50. package/docs/bundler/loaders.md +0 -410
  51. package/docs/bundler/macros.md +0 -329
  52. package/docs/bundler/plugins.md +0 -449
  53. package/docs/bundler/vs-esbuild.md +0 -1127
  54. package/docs/cli/add.md +0 -173
  55. package/docs/cli/bun-completions.md +0 -3
  56. package/docs/cli/bun-create.md +0 -338
  57. package/docs/cli/bun-install.md +0 -349
  58. package/docs/cli/bun-upgrade.md +0 -39
  59. package/docs/cli/bunx.md +0 -89
  60. package/docs/cli/filter.md +0 -90
  61. package/docs/cli/info.md +0 -65
  62. package/docs/cli/init.md +0 -85
  63. package/docs/cli/install.md +0 -344
  64. package/docs/cli/link.md +0 -40
  65. package/docs/cli/outdated.md +0 -90
  66. package/docs/cli/patch-commit.md +0 -11
  67. package/docs/cli/pm.md +0 -285
  68. package/docs/cli/publish.md +0 -120
  69. package/docs/cli/remove.md +0 -7
  70. package/docs/cli/run.md +0 -261
  71. package/docs/cli/test.md +0 -397
  72. package/docs/cli/unlink.md +0 -9
  73. package/docs/cli/update.md +0 -129
  74. package/docs/cli/why.md +0 -67
  75. package/docs/contributing/upgrading-webkit.md +0 -57
  76. package/docs/ecosystem/elysia.md +0 -24
  77. package/docs/ecosystem/express.md +0 -37
  78. package/docs/ecosystem/hono.md +0 -18
  79. package/docs/ecosystem/react.md +0 -65
  80. package/docs/ecosystem/stric.md +0 -38
  81. package/docs/guides/binary/arraybuffer-to-array.md +0 -27
  82. package/docs/guides/binary/arraybuffer-to-blob.md +0 -24
  83. package/docs/guides/binary/arraybuffer-to-buffer.md +0 -25
  84. package/docs/guides/binary/arraybuffer-to-string.md +0 -15
  85. package/docs/guides/binary/arraybuffer-to-typedarray.md +0 -39
  86. package/docs/guides/binary/blob-to-arraybuffer.md +0 -14
  87. package/docs/guides/binary/blob-to-dataview.md +0 -14
  88. package/docs/guides/binary/blob-to-stream.md +0 -14
  89. package/docs/guides/binary/blob-to-string.md +0 -15
  90. package/docs/guides/binary/blob-to-typedarray.md +0 -14
  91. package/docs/guides/binary/buffer-to-arraybuffer.md +0 -14
  92. package/docs/guides/binary/buffer-to-blob.md +0 -14
  93. package/docs/guides/binary/buffer-to-readablestream.md +0 -41
  94. package/docs/guides/binary/buffer-to-string.md +0 -25
  95. package/docs/guides/binary/buffer-to-typedarray.md +0 -14
  96. package/docs/guides/binary/dataview-to-string.md +0 -15
  97. package/docs/guides/binary/typedarray-to-arraybuffer.md +0 -25
  98. package/docs/guides/binary/typedarray-to-blob.md +0 -16
  99. package/docs/guides/binary/typedarray-to-buffer.md +0 -14
  100. package/docs/guides/binary/typedarray-to-dataview.md +0 -14
  101. package/docs/guides/binary/typedarray-to-readablestream.md +0 -41
  102. package/docs/guides/binary/typedarray-to-string.md +0 -16
  103. package/docs/guides/deployment/railway.md +0 -157
  104. package/docs/guides/ecosystem/astro.md +0 -72
  105. package/docs/guides/ecosystem/discordjs.md +0 -77
  106. package/docs/guides/ecosystem/docker.md +0 -140
  107. package/docs/guides/ecosystem/drizzle.md +0 -185
  108. package/docs/guides/ecosystem/edgedb.md +0 -228
  109. package/docs/guides/ecosystem/elysia.md +0 -31
  110. package/docs/guides/ecosystem/express.md +0 -40
  111. package/docs/guides/ecosystem/hono.md +0 -39
  112. package/docs/guides/ecosystem/mongoose.md +0 -87
  113. package/docs/guides/ecosystem/neon-drizzle.md +0 -220
  114. package/docs/guides/ecosystem/neon-serverless-postgres.md +0 -55
  115. package/docs/guides/ecosystem/nextjs.md +0 -49
  116. package/docs/guides/ecosystem/nuxt.md +0 -56
  117. package/docs/guides/ecosystem/pm2.md +0 -57
  118. package/docs/guides/ecosystem/prisma.md +0 -141
  119. package/docs/guides/ecosystem/qwik.md +0 -107
  120. package/docs/guides/ecosystem/react.md +0 -50
  121. package/docs/guides/ecosystem/remix.md +0 -78
  122. package/docs/guides/ecosystem/render.md +0 -79
  123. package/docs/guides/ecosystem/sentry.md +0 -52
  124. package/docs/guides/ecosystem/solidstart.md +0 -58
  125. package/docs/guides/ecosystem/ssr-react.md +0 -51
  126. package/docs/guides/ecosystem/stric.md +0 -55
  127. package/docs/guides/ecosystem/sveltekit.md +0 -125
  128. package/docs/guides/ecosystem/systemd.md +0 -113
  129. package/docs/guides/ecosystem/vite.md +0 -71
  130. package/docs/guides/html-rewriter/extract-links.md +0 -68
  131. package/docs/guides/html-rewriter/extract-social-meta.md +0 -93
  132. package/docs/guides/http/cluster.md +0 -66
  133. package/docs/guides/http/fetch-unix.md +0 -33
  134. package/docs/guides/http/fetch.md +0 -24
  135. package/docs/guides/http/file-uploads.md +0 -94
  136. package/docs/guides/http/hot.md +0 -26
  137. package/docs/guides/http/proxy.md +0 -24
  138. package/docs/guides/http/server.md +0 -46
  139. package/docs/guides/http/simple.md +0 -18
  140. package/docs/guides/http/stream-file.md +0 -48
  141. package/docs/guides/http/stream-iterator.md +0 -47
  142. package/docs/guides/http/stream-node-streams-in-bun.md +0 -20
  143. package/docs/guides/http/tls.md +0 -30
  144. package/docs/guides/install/add-dev.md +0 -26
  145. package/docs/guides/install/add-git.md +0 -36
  146. package/docs/guides/install/add-optional.md +0 -25
  147. package/docs/guides/install/add-peer.md +0 -43
  148. package/docs/guides/install/add-tarball.md +0 -33
  149. package/docs/guides/install/add.md +0 -42
  150. package/docs/guides/install/azure-artifacts.md +0 -73
  151. package/docs/guides/install/cicd.md +0 -41
  152. package/docs/guides/install/custom-registry.md +0 -30
  153. package/docs/guides/install/from-npm-install-to-bun-install.md +0 -214
  154. package/docs/guides/install/git-diff-bun-lockfile.md +0 -44
  155. package/docs/guides/install/jfrog-artifactory.md +0 -28
  156. package/docs/guides/install/npm-alias.md +0 -23
  157. package/docs/guides/install/registry-scope.md +0 -38
  158. package/docs/guides/install/trusted.md +0 -46
  159. package/docs/guides/install/workspaces.md +0 -70
  160. package/docs/guides/install/yarnlock.md +0 -44
  161. package/docs/guides/process/argv.md +0 -58
  162. package/docs/guides/process/ctrl-c.md +0 -16
  163. package/docs/guides/process/ipc.md +0 -66
  164. package/docs/guides/process/nanoseconds.md +0 -13
  165. package/docs/guides/process/os-signals.md +0 -39
  166. package/docs/guides/process/spawn-stderr.md +0 -31
  167. package/docs/guides/process/spawn-stdout.md +0 -26
  168. package/docs/guides/process/spawn.md +0 -41
  169. package/docs/guides/process/stdin.md +0 -54
  170. package/docs/guides/read-file/arraybuffer.md +0 -28
  171. package/docs/guides/read-file/buffer.md +0 -19
  172. package/docs/guides/read-file/exists.md +0 -16
  173. package/docs/guides/read-file/json.md +0 -17
  174. package/docs/guides/read-file/mime.md +0 -20
  175. package/docs/guides/read-file/stream.md +0 -26
  176. package/docs/guides/read-file/string.md +0 -22
  177. package/docs/guides/read-file/uint8array.md +0 -21
  178. package/docs/guides/read-file/watch.md +0 -68
  179. package/docs/guides/runtime/build-time-constants.md +0 -293
  180. package/docs/guides/runtime/cicd.md +0 -43
  181. package/docs/guides/runtime/codesign-macos-executable.md +0 -56
  182. package/docs/guides/runtime/define-constant.md +0 -145
  183. package/docs/guides/runtime/delete-directory.md +0 -37
  184. package/docs/guides/runtime/delete-file.md +0 -19
  185. package/docs/guides/runtime/heap-snapshot.md +0 -26
  186. package/docs/guides/runtime/import-html.md +0 -15
  187. package/docs/guides/runtime/import-json.md +0 -44
  188. package/docs/guides/runtime/import-toml.md +0 -30
  189. package/docs/guides/runtime/import-yaml.md +0 -102
  190. package/docs/guides/runtime/read-env.md +0 -32
  191. package/docs/guides/runtime/set-env.md +0 -47
  192. package/docs/guides/runtime/shell.md +0 -40
  193. package/docs/guides/runtime/timezone.md +0 -35
  194. package/docs/guides/runtime/tsconfig-paths.md +0 -29
  195. package/docs/guides/runtime/typescript.md +0 -49
  196. package/docs/guides/runtime/vscode-debugger.md +0 -47
  197. package/docs/guides/runtime/web-debugger.md +0 -82
  198. package/docs/guides/streams/node-readable-to-arraybuffer.md +0 -11
  199. package/docs/guides/streams/node-readable-to-blob.md +0 -11
  200. package/docs/guides/streams/node-readable-to-json.md +0 -12
  201. package/docs/guides/streams/node-readable-to-string.md +0 -12
  202. package/docs/guides/streams/node-readable-to-uint8array.md +0 -11
  203. package/docs/guides/streams/to-array.md +0 -14
  204. package/docs/guides/streams/to-arraybuffer.md +0 -14
  205. package/docs/guides/streams/to-blob.md +0 -14
  206. package/docs/guides/streams/to-buffer.md +0 -15
  207. package/docs/guides/streams/to-json.md +0 -14
  208. package/docs/guides/streams/to-string.md +0 -14
  209. package/docs/guides/streams/to-typedarray.md +0 -22
  210. package/docs/guides/test/bail.md +0 -22
  211. package/docs/guides/test/coverage-threshold.md +0 -60
  212. package/docs/guides/test/coverage.md +0 -44
  213. package/docs/guides/test/happy-dom.md +0 -68
  214. package/docs/guides/test/migrate-from-jest.md +0 -143
  215. package/docs/guides/test/mock-clock.md +0 -48
  216. package/docs/guides/test/mock-functions.md +0 -68
  217. package/docs/guides/test/rerun-each.md +0 -14
  218. package/docs/guides/test/run-tests.md +0 -111
  219. package/docs/guides/test/skip-tests.md +0 -39
  220. package/docs/guides/test/snapshot.md +0 -95
  221. package/docs/guides/test/spy-on.md +0 -46
  222. package/docs/guides/test/svelte-test.md +0 -120
  223. package/docs/guides/test/testing-library.md +0 -92
  224. package/docs/guides/test/timeout.md +0 -15
  225. package/docs/guides/test/todo-tests.md +0 -67
  226. package/docs/guides/test/update-snapshots.md +0 -46
  227. package/docs/guides/test/watch-mode.md +0 -19
  228. package/docs/guides/util/base64.md +0 -15
  229. package/docs/guides/util/deep-equals.md +0 -39
  230. package/docs/guides/util/deflate.md +0 -18
  231. package/docs/guides/util/detect-bun.md +0 -23
  232. package/docs/guides/util/entrypoint.md +0 -17
  233. package/docs/guides/util/escape-html.md +0 -22
  234. package/docs/guides/util/file-url-to-path.md +0 -14
  235. package/docs/guides/util/gzip.md +0 -18
  236. package/docs/guides/util/hash-a-password.md +0 -54
  237. package/docs/guides/util/import-meta-dir.md +0 -13
  238. package/docs/guides/util/import-meta-file.md +0 -13
  239. package/docs/guides/util/import-meta-path.md +0 -13
  240. package/docs/guides/util/javascript-uuid.md +0 -23
  241. package/docs/guides/util/main.md +0 -32
  242. package/docs/guides/util/path-to-file-url.md +0 -14
  243. package/docs/guides/util/sleep.md +0 -22
  244. package/docs/guides/util/version.md +0 -21
  245. package/docs/guides/util/which-path-to-executable-bin.md +0 -15
  246. package/docs/guides/websocket/compression.md +0 -31
  247. package/docs/guides/websocket/context.md +0 -77
  248. package/docs/guides/websocket/pubsub.md +0 -41
  249. package/docs/guides/websocket/simple.md +0 -33
  250. package/docs/guides/write-file/append.md +0 -52
  251. package/docs/guides/write-file/basic.md +0 -44
  252. package/docs/guides/write-file/blob.md +0 -28
  253. package/docs/guides/write-file/cat.md +0 -17
  254. package/docs/guides/write-file/file-cp.md +0 -16
  255. package/docs/guides/write-file/filesink.md +0 -52
  256. package/docs/guides/write-file/response.md +0 -17
  257. package/docs/guides/write-file/stdout.md +0 -21
  258. package/docs/guides/write-file/stream.md +0 -17
  259. package/docs/guides/write-file/unlink.md +0 -16
  260. package/docs/index.md +0 -77
  261. package/docs/install/audit.md +0 -57
  262. package/docs/install/cache.md +0 -59
  263. package/docs/install/catalogs.md +0 -298
  264. package/docs/install/index.md +0 -248
  265. package/docs/install/isolated.md +0 -197
  266. package/docs/install/lifecycle.md +0 -46
  267. package/docs/install/lockfile.md +0 -58
  268. package/docs/install/npmrc.md +0 -105
  269. package/docs/install/overrides.md +0 -73
  270. package/docs/install/patch.md +0 -59
  271. package/docs/install/registries.md +0 -30
  272. package/docs/install/security-scanner-api.md +0 -81
  273. package/docs/install/workspaces.md +0 -114
  274. package/docs/installation.md +0 -327
  275. package/docs/project/asan.md +0 -124
  276. package/docs/project/benchmarking.md +0 -203
  277. package/docs/project/bindgen.md +0 -225
  278. package/docs/project/building-windows.md +0 -162
  279. package/docs/project/contributing.md +0 -347
  280. package/docs/project/internals/build-process-for-ci.md +0 -75
  281. package/docs/project/licensing.md +0 -73
  282. package/docs/project/roadmap.md +0 -87
  283. package/docs/quickstart.md +0 -157
  284. package/docs/runtime/autoimport.md +0 -94
  285. package/docs/runtime/bun-apis.md +0 -207
  286. package/docs/runtime/bunfig.md +0 -772
  287. package/docs/runtime/debugger.md +0 -325
  288. package/docs/runtime/env.md +0 -253
  289. package/docs/runtime/hot.md +0 -145
  290. package/docs/runtime/index.md +0 -312
  291. package/docs/runtime/jsx.md +0 -385
  292. package/docs/runtime/loaders.md +0 -130
  293. package/docs/runtime/modules.md +0 -320
  294. package/docs/runtime/nodejs-apis.md +0 -463
  295. package/docs/runtime/plugins.md +0 -561
  296. package/docs/runtime/shell.md +0 -605
  297. package/docs/runtime/typescript.md +0 -139
  298. package/docs/runtime/web-apis.md +0 -128
  299. package/docs/test/configuration.md +0 -154
  300. package/docs/test/coverage.md +0 -142
  301. package/docs/test/discovery.md +0 -85
  302. package/docs/test/dom.md +0 -75
  303. package/docs/test/examples/concurrent-test-glob.md +0 -132
  304. package/docs/test/hot.md +0 -15
  305. package/docs/test/lifecycle.md +0 -81
  306. package/docs/test/mocks.md +0 -313
  307. package/docs/test/reporters.md +0 -117
  308. package/docs/test/runtime-behavior.md +0 -95
  309. package/docs/test/snapshots.md +0 -68
  310. package/docs/test/time.md +0 -126
  311. package/docs/test/writing.md +0 -825
  312. package/docs/typescript.md +0 -53
package/docs/api/spawn.md DELETED
@@ -1,582 +0,0 @@
1
- Spawn child processes with `Bun.spawn` or `Bun.spawnSync`.
2
-
3
- ## Spawn a process (`Bun.spawn()`)
4
-
5
- Provide a command as an array of strings. The result of `Bun.spawn()` is a `Bun.Subprocess` object.
6
-
7
- ```ts
8
- const proc = Bun.spawn(["bun", "--version"]);
9
- console.log(await proc.exited); // 0
10
- ```
11
-
12
- The second argument to `Bun.spawn` is a parameters object that can be used to configure the subprocess.
13
-
14
- ```ts
15
- const proc = Bun.spawn(["bun", "--version"], {
16
- cwd: "./path/to/subdir", // specify a working directory
17
- env: { ...process.env, FOO: "bar" }, // specify environment variables
18
- onExit(proc, exitCode, signalCode, error) {
19
- // exit handler
20
- },
21
- });
22
-
23
- proc.pid; // process ID of subprocess
24
- ```
25
-
26
- ## Input stream
27
-
28
- By default, the input stream of the subprocess is undefined; it can be configured with the `stdin` parameter.
29
-
30
- ```ts
31
- const proc = Bun.spawn(["cat"], {
32
- stdin: await fetch(
33
- "https://raw.githubusercontent.com/oven-sh/bun/main/examples/hashing.js",
34
- ),
35
- });
36
-
37
- const text = await proc.stdout.text();
38
- console.log(text); // "const input = "hello world".repeat(400); ..."
39
- ```
40
-
41
- {% table %}
42
-
43
- ---
44
-
45
- - `null`
46
- - **Default.** Provide no input to the subprocess
47
-
48
- ---
49
-
50
- - `"pipe"`
51
- - Return a `FileSink` for fast incremental writing
52
-
53
- ---
54
-
55
- - `"inherit"`
56
- - Inherit the `stdin` of the parent process
57
-
58
- ---
59
-
60
- - `Bun.file()`
61
- - Read from the specified file.
62
-
63
- ---
64
-
65
- - `TypedArray | DataView`
66
- - Use a binary buffer as input.
67
-
68
- ---
69
-
70
- - `Response`
71
- - Use the response `body` as input.
72
-
73
- ---
74
-
75
- - `Request`
76
- - Use the request `body` as input.
77
-
78
- ---
79
-
80
- - `ReadableStream`
81
- - Use a readable stream as input.
82
-
83
- ---
84
-
85
- - `Blob`
86
- - Use a blob as input.
87
-
88
- ---
89
-
90
- - `number`
91
- - Read from the file with a given file descriptor.
92
-
93
- {% /table %}
94
-
95
- The `"pipe"` option lets incrementally write to the subprocess's input stream from the parent process.
96
-
97
- ```ts
98
- const proc = Bun.spawn(["cat"], {
99
- stdin: "pipe", // return a FileSink for writing
100
- });
101
-
102
- // enqueue string data
103
- proc.stdin.write("hello");
104
-
105
- // enqueue binary data
106
- const enc = new TextEncoder();
107
- proc.stdin.write(enc.encode(" world!"));
108
-
109
- // send buffered data
110
- proc.stdin.flush();
111
-
112
- // close the input stream
113
- proc.stdin.end();
114
- ```
115
-
116
- Passing a `ReadableStream` to `stdin` lets you pipe data from a JavaScript `ReadableStream` directly to the subprocess's input:
117
-
118
- ```ts
119
- const stream = new ReadableStream({
120
- start(controller) {
121
- controller.enqueue("Hello from ");
122
- controller.enqueue("ReadableStream!");
123
- controller.close();
124
- },
125
- });
126
-
127
- const proc = Bun.spawn(["cat"], {
128
- stdin: stream,
129
- stdout: "pipe",
130
- });
131
-
132
- const output = await new Response(proc.stdout).text();
133
- console.log(output); // "Hello from ReadableStream!"
134
- ```
135
-
136
- ## Output streams
137
-
138
- You can read results from the subprocess via the `stdout` and `stderr` properties. By default these are instances of `ReadableStream`.
139
-
140
- ```ts
141
- const proc = Bun.spawn(["bun", "--version"]);
142
- const text = await proc.stdout.text();
143
- console.log(text); // => "1.3.2-canary.20251104T140728\n"
144
- ```
145
-
146
- Configure the output stream by passing one of the following values to `stdout/stderr`:
147
-
148
- {% table %}
149
-
150
- ---
151
-
152
- - `"pipe"`
153
- - **Default for `stdout`.** Pipe the output to a `ReadableStream` on the returned `Subprocess` object.
154
-
155
- ---
156
-
157
- - `"inherit"`
158
- - **Default for `stderr`.** Inherit from the parent process.
159
-
160
- ---
161
-
162
- - `"ignore"`
163
- - Discard the output.
164
-
165
- ---
166
-
167
- - `Bun.file()`
168
- - Write to the specified file.
169
-
170
- ---
171
-
172
- - `number`
173
- - Write to the file with the given file descriptor.
174
-
175
- {% /table %}
176
-
177
- ## Exit handling
178
-
179
- Use the `onExit` callback to listen for the process exiting or being killed.
180
-
181
- ```ts
182
- const proc = Bun.spawn(["bun", "--version"], {
183
- onExit(proc, exitCode, signalCode, error) {
184
- // exit handler
185
- },
186
- });
187
- ```
188
-
189
- For convenience, the `exited` property is a `Promise` that resolves when the process exits.
190
-
191
- ```ts
192
- const proc = Bun.spawn(["bun", "--version"]);
193
-
194
- await proc.exited; // resolves when process exit
195
- proc.killed; // boolean — was the process killed?
196
- proc.exitCode; // null | number
197
- proc.signalCode; // null | "SIGABRT" | "SIGALRM" | ...
198
- ```
199
-
200
- To kill a process:
201
-
202
- ```ts
203
- const proc = Bun.spawn(["bun", "--version"]);
204
- proc.kill();
205
- proc.killed; // true
206
-
207
- proc.kill(15); // specify a signal code
208
- proc.kill("SIGTERM"); // specify a signal name
209
- ```
210
-
211
- The parent `bun` process will not terminate until all child processes have exited. Use `proc.unref()` to detach the child process from the parent.
212
-
213
- ```ts
214
- const proc = Bun.spawn(["bun", "--version"]);
215
- proc.unref();
216
- ```
217
-
218
- ## Resource usage
219
-
220
- You can get information about the process's resource usage after it has exited:
221
-
222
- ```ts
223
- const proc = Bun.spawn(["bun", "--version"]);
224
- await proc.exited;
225
-
226
- const usage = proc.resourceUsage();
227
- console.log(`Max memory used: ${usage.maxRSS} bytes`);
228
- console.log(`CPU time (user): ${usage.cpuTime.user} µs`);
229
- console.log(`CPU time (system): ${usage.cpuTime.system} µs`);
230
- ```
231
-
232
- ## Using AbortSignal
233
-
234
- You can abort a subprocess using an `AbortSignal`:
235
-
236
- ```ts
237
- const controller = new AbortController();
238
- const { signal } = controller;
239
-
240
- const proc = Bun.spawn({
241
- cmd: ["sleep", "100"],
242
- signal,
243
- });
244
-
245
- // Later, to abort the process:
246
- controller.abort();
247
- ```
248
-
249
- ## Using timeout and killSignal
250
-
251
- You can set a timeout for a subprocess to automatically terminate after a specific duration:
252
-
253
- ```ts
254
- // Kill the process after 5 seconds
255
- const proc = Bun.spawn({
256
- cmd: ["sleep", "10"],
257
- timeout: 5000, // 5 seconds in milliseconds
258
- });
259
-
260
- await proc.exited; // Will resolve after 5 seconds
261
- ```
262
-
263
- By default, timed-out processes are killed with the `SIGTERM` signal. You can specify a different signal with the `killSignal` option:
264
-
265
- ```ts
266
- // Kill the process with SIGKILL after 5 seconds
267
- const proc = Bun.spawn({
268
- cmd: ["sleep", "10"],
269
- timeout: 5000,
270
- killSignal: "SIGKILL", // Can be string name or signal number
271
- });
272
- ```
273
-
274
- The `killSignal` option also controls which signal is sent when an AbortSignal is aborted.
275
-
276
- ## Using maxBuffer
277
-
278
- For spawnSync, you can limit the maximum number of bytes of output before the process is killed:
279
-
280
- ```ts
281
- // KIll 'yes' after it emits over 100 bytes of output
282
- const result = Bun.spawnSync({
283
- cmd: ["yes"], // or ["bun", "exec", "yes"] on windows
284
- maxBuffer: 100,
285
- });
286
- // process exits
287
- ```
288
-
289
- ## Inter-process communication (IPC)
290
-
291
- Bun supports direct inter-process communication channel between two `bun` processes. To receive messages from a spawned Bun subprocess, specify an `ipc` handler.
292
-
293
- ```ts#parent.ts
294
- const child = Bun.spawn(["bun", "child.ts"], {
295
- ipc(message) {
296
- /**
297
- * The message received from the sub process
298
- **/
299
- },
300
- });
301
- ```
302
-
303
- The parent process can send messages to the subprocess using the `.send()` method on the returned `Subprocess` instance. A reference to the sending subprocess is also available as the second argument in the `ipc` handler.
304
-
305
- ```ts#parent.ts
306
- const childProc = Bun.spawn(["bun", "child.ts"], {
307
- ipc(message, childProc) {
308
- /**
309
- * The message received from the sub process
310
- **/
311
- childProc.send("Respond to child")
312
- },
313
- });
314
-
315
- childProc.send("I am your father"); // The parent can send messages to the child as well
316
- ```
317
-
318
- Meanwhile the child process can send messages to its parent using with `process.send()` and receive messages with `process.on("message")`. This is the same API used for `child_process.fork()` in Node.js.
319
-
320
- ```ts#child.ts
321
- process.send("Hello from child as string");
322
- process.send({ message: "Hello from child as object" });
323
-
324
- process.on("message", (message) => {
325
- // print message from parent
326
- console.log(message);
327
- });
328
- ```
329
-
330
- ```ts#child.ts
331
- // send a string
332
- process.send("Hello from child as string");
333
-
334
- // send an object
335
- process.send({ message: "Hello from child as object" });
336
- ```
337
-
338
- The `serialization` option controls the underlying communication format between the two processes:
339
-
340
- - `advanced`: (default) Messages are serialized using the JSC `serialize` API, which supports cloning [everything `structuredClone` supports](https://developer.mozilla.org/en-US/docs/Web/API/Web_Workers_API/Structured_clone_algorithm). This does not support transferring ownership of objects.
341
- - `json`: Messages are serialized using `JSON.stringify` and `JSON.parse`, which does not support as many object types as `advanced` does.
342
-
343
- To disconnect the IPC channel from the parent process, call:
344
-
345
- ```ts
346
- childProc.disconnect();
347
- ```
348
-
349
- ### IPC between Bun & Node.js
350
-
351
- To use IPC between a `bun` process and a Node.js process, set `serialization: "json"` in `Bun.spawn`. This is because Node.js and Bun use different JavaScript engines with different object serialization formats.
352
-
353
- ```js#bun-node-ipc.js
354
- if (typeof Bun !== "undefined") {
355
- const prefix = `[bun ${process.versions.bun} 🐇]`;
356
- const node = Bun.spawn({
357
- cmd: ["node", __filename],
358
- ipc({ message }) {
359
- console.log(message);
360
- node.send({ message: `${prefix} 👋 hey node` });
361
- node.kill();
362
- },
363
- stdio: ["inherit", "inherit", "inherit"],
364
- serialization: "json",
365
- });
366
-
367
- node.send({ message: `${prefix} 👋 hey node` });
368
- } else {
369
- const prefix = `[node ${process.version}]`;
370
- process.on("message", ({ message }) => {
371
- console.log(message);
372
- process.send({ message: `${prefix} 👋 hey bun` });
373
- });
374
- }
375
- ```
376
-
377
- ## Blocking API (`Bun.spawnSync()`)
378
-
379
- Bun provides a synchronous equivalent of `Bun.spawn` called `Bun.spawnSync`. This is a blocking API that supports the same inputs and parameters as `Bun.spawn`. It returns a `SyncSubprocess` object, which differs from `Subprocess` in a few ways.
380
-
381
- 1. It contains a `success` property that indicates whether the process exited with a zero exit code.
382
- 2. The `stdout` and `stderr` properties are instances of `Buffer` instead of `ReadableStream`.
383
- 3. There is no `stdin` property. Use `Bun.spawn` to incrementally write to the subprocess's input stream.
384
-
385
- ```ts
386
- const proc = Bun.spawnSync(["echo", "hello"]);
387
-
388
- console.log(proc.stdout.toString());
389
- // => "hello\n"
390
- ```
391
-
392
- As a rule of thumb, the asynchronous `Bun.spawn` API is better for HTTP servers and apps, and `Bun.spawnSync` is better for building command-line tools.
393
-
394
- ## Benchmarks
395
-
396
- {%callout%}
397
- ⚡️ Under the hood, `Bun.spawn` and `Bun.spawnSync` use [`posix_spawn(3)`](https://man7.org/linux/man-pages/man3/posix_spawn.3.html).
398
- {%/callout%}
399
-
400
- Bun's `spawnSync` spawns processes 60% faster than the Node.js `child_process` module.
401
-
402
- ```bash
403
- $ bun spawn.mjs
404
- cpu: Apple M1 Max
405
- runtime: bun 1.x (arm64-darwin)
406
-
407
- benchmark time (avg) (min … max) p75 p99 p995
408
- --------------------------------------------------------- -----------------------------
409
- spawnSync echo hi 888.14 µs/iter (821.83 µs … 1.2 ms) 905.92 µs 1 ms 1.03 ms
410
- $ node spawn.node.mjs
411
- cpu: Apple M1 Max
412
- runtime: node v18.9.1 (arm64-darwin)
413
-
414
- benchmark time (avg) (min … max) p75 p99 p995
415
- --------------------------------------------------------- -----------------------------
416
- spawnSync echo hi 1.47 ms/iter (1.14 ms … 2.64 ms) 1.57 ms 2.37 ms 2.52 ms
417
- ```
418
-
419
- ## Reference
420
-
421
- A reference of the Spawn API and types are shown below. The real types have complex generics to strongly type the `Subprocess` streams with the options passed to `Bun.spawn` and `Bun.spawnSync`. For full details, find these types as defined [bun.d.ts](https://github.com/oven-sh/bun/blob/main/packages/bun-types/bun.d.ts).
422
-
423
- ```ts
424
- interface Bun {
425
- spawn(command: string[], options?: SpawnOptions.OptionsObject): Subprocess;
426
- spawnSync(
427
- command: string[],
428
- options?: SpawnOptions.OptionsObject,
429
- ): SyncSubprocess;
430
-
431
- spawn(options: { cmd: string[] } & SpawnOptions.OptionsObject): Subprocess;
432
- spawnSync(
433
- options: { cmd: string[] } & SpawnOptions.OptionsObject,
434
- ): SyncSubprocess;
435
- }
436
-
437
- namespace SpawnOptions {
438
- interface OptionsObject {
439
- cwd?: string;
440
- env?: Record<string, string | undefined>;
441
- stdio?: [Writable, Readable, Readable];
442
- stdin?: Writable;
443
- stdout?: Readable;
444
- stderr?: Readable;
445
- onExit?(
446
- subprocess: Subprocess,
447
- exitCode: number | null,
448
- signalCode: number | null,
449
- error?: ErrorLike,
450
- ): void | Promise<void>;
451
- ipc?(message: any, subprocess: Subprocess): void;
452
- serialization?: "json" | "advanced";
453
- windowsHide?: boolean;
454
- windowsVerbatimArguments?: boolean;
455
- argv0?: string;
456
- signal?: AbortSignal;
457
- timeout?: number;
458
- killSignal?: string | number;
459
- maxBuffer?: number;
460
- }
461
-
462
- type Readable =
463
- | "pipe"
464
- | "inherit"
465
- | "ignore"
466
- | null // equivalent to "ignore"
467
- | undefined // to use default
468
- | BunFile
469
- | ArrayBufferView
470
- | number;
471
-
472
- type Writable =
473
- | "pipe"
474
- | "inherit"
475
- | "ignore"
476
- | null // equivalent to "ignore"
477
- | undefined // to use default
478
- | BunFile
479
- | ArrayBufferView
480
- | number
481
- | ReadableStream
482
- | Blob
483
- | Response
484
- | Request;
485
- }
486
-
487
- interface Subprocess extends AsyncDisposable {
488
- readonly stdin: FileSink | number | undefined;
489
- readonly stdout: ReadableStream<Uint8Array> | number | undefined;
490
- readonly stderr: ReadableStream<Uint8Array> | number | undefined;
491
- readonly readable: ReadableStream<Uint8Array> | number | undefined;
492
- readonly pid: number;
493
- readonly exited: Promise<number>;
494
- readonly exitCode: number | null;
495
- readonly signalCode: NodeJS.Signals | null;
496
- readonly killed: boolean;
497
-
498
- kill(exitCode?: number | NodeJS.Signals): void;
499
- ref(): void;
500
- unref(): void;
501
-
502
- send(message: any): void;
503
- disconnect(): void;
504
- resourceUsage(): ResourceUsage | undefined;
505
- }
506
-
507
- interface SyncSubprocess {
508
- stdout: Buffer | undefined;
509
- stderr: Buffer | undefined;
510
- exitCode: number;
511
- success: boolean;
512
- resourceUsage: ResourceUsage;
513
- signalCode?: string;
514
- exitedDueToTimeout?: true;
515
- pid: number;
516
- }
517
-
518
- interface ResourceUsage {
519
- contextSwitches: {
520
- voluntary: number;
521
- involuntary: number;
522
- };
523
-
524
- cpuTime: {
525
- user: number;
526
- system: number;
527
- total: number;
528
- };
529
- maxRSS: number;
530
-
531
- messages: {
532
- sent: number;
533
- received: number;
534
- };
535
- ops: {
536
- in: number;
537
- out: number;
538
- };
539
- shmSize: number;
540
- signalCount: number;
541
- swapCount: number;
542
- }
543
-
544
- type Signal =
545
- | "SIGABRT"
546
- | "SIGALRM"
547
- | "SIGBUS"
548
- | "SIGCHLD"
549
- | "SIGCONT"
550
- | "SIGFPE"
551
- | "SIGHUP"
552
- | "SIGILL"
553
- | "SIGINT"
554
- | "SIGIO"
555
- | "SIGIOT"
556
- | "SIGKILL"
557
- | "SIGPIPE"
558
- | "SIGPOLL"
559
- | "SIGPROF"
560
- | "SIGPWR"
561
- | "SIGQUIT"
562
- | "SIGSEGV"
563
- | "SIGSTKFLT"
564
- | "SIGSTOP"
565
- | "SIGSYS"
566
- | "SIGTERM"
567
- | "SIGTRAP"
568
- | "SIGTSTP"
569
- | "SIGTTIN"
570
- | "SIGTTOU"
571
- | "SIGUNUSED"
572
- | "SIGURG"
573
- | "SIGUSR1"
574
- | "SIGUSR2"
575
- | "SIGVTALRM"
576
- | "SIGWINCH"
577
- | "SIGXCPU"
578
- | "SIGXFSZ"
579
- | "SIGBREAK"
580
- | "SIGLOST"
581
- | "SIGINFO";
582
- ```