bun-types 1.3.2-canary.20251105T140650 → 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 (308) hide show
  1. package/docs/README.md +28 -0
  2. package/package.json +1 -1
  3. package/docs/api/binary-data.md +0 -1038
  4. package/docs/api/cc.md +0 -197
  5. package/docs/api/color.md +0 -262
  6. package/docs/api/console.md +0 -57
  7. package/docs/api/cookie.md +0 -449
  8. package/docs/api/dns.md +0 -110
  9. package/docs/api/fetch.md +0 -463
  10. package/docs/api/ffi.md +0 -557
  11. package/docs/api/file-io.md +0 -366
  12. package/docs/api/file-system-router.md +0 -112
  13. package/docs/api/file.md +0 -19
  14. package/docs/api/glob.md +0 -178
  15. package/docs/api/globals.md +0 -387
  16. package/docs/api/hashing.md +0 -319
  17. package/docs/api/html-rewriter.md +0 -334
  18. package/docs/api/http.md +0 -1408
  19. package/docs/api/import-meta.md +0 -69
  20. package/docs/api/node-api.md +0 -14
  21. package/docs/api/redis.md +0 -597
  22. package/docs/api/s3.md +0 -850
  23. package/docs/api/secrets.md +0 -319
  24. package/docs/api/semver.md +0 -52
  25. package/docs/api/spawn.md +0 -582
  26. package/docs/api/sql.md +0 -1374
  27. package/docs/api/sqlite.md +0 -694
  28. package/docs/api/streams.md +0 -230
  29. package/docs/api/tcp.md +0 -221
  30. package/docs/api/transpiler.md +0 -276
  31. package/docs/api/udp.md +0 -123
  32. package/docs/api/utils.md +0 -891
  33. package/docs/api/websockets.md +0 -573
  34. package/docs/api/workers.md +0 -322
  35. package/docs/api/yaml.md +0 -668
  36. package/docs/benchmarks.md +0 -120
  37. package/docs/bun-flavored-toml.md +0 -42
  38. package/docs/bundler/css.md +0 -1028
  39. package/docs/bundler/css_modules.md +0 -145
  40. package/docs/bundler/executables.md +0 -626
  41. package/docs/bundler/fullstack.md +0 -418
  42. package/docs/bundler/hmr.md +0 -234
  43. package/docs/bundler/html.md +0 -349
  44. package/docs/bundler/index.md +0 -1735
  45. package/docs/bundler/intro.md +0 -75
  46. package/docs/bundler/loaders.md +0 -410
  47. package/docs/bundler/macros.md +0 -329
  48. package/docs/bundler/plugins.md +0 -449
  49. package/docs/bundler/vs-esbuild.md +0 -1127
  50. package/docs/cli/add.md +0 -173
  51. package/docs/cli/bun-completions.md +0 -3
  52. package/docs/cli/bun-create.md +0 -338
  53. package/docs/cli/bun-install.md +0 -349
  54. package/docs/cli/bun-upgrade.md +0 -39
  55. package/docs/cli/bunx.md +0 -89
  56. package/docs/cli/filter.md +0 -90
  57. package/docs/cli/info.md +0 -65
  58. package/docs/cli/init.md +0 -85
  59. package/docs/cli/install.md +0 -344
  60. package/docs/cli/link.md +0 -40
  61. package/docs/cli/outdated.md +0 -90
  62. package/docs/cli/patch-commit.md +0 -11
  63. package/docs/cli/pm.md +0 -285
  64. package/docs/cli/publish.md +0 -120
  65. package/docs/cli/remove.md +0 -7
  66. package/docs/cli/run.md +0 -261
  67. package/docs/cli/test.md +0 -397
  68. package/docs/cli/unlink.md +0 -9
  69. package/docs/cli/update.md +0 -129
  70. package/docs/cli/why.md +0 -67
  71. package/docs/contributing/upgrading-webkit.md +0 -57
  72. package/docs/ecosystem/elysia.md +0 -24
  73. package/docs/ecosystem/express.md +0 -37
  74. package/docs/ecosystem/hono.md +0 -18
  75. package/docs/ecosystem/react.md +0 -65
  76. package/docs/ecosystem/stric.md +0 -38
  77. package/docs/guides/binary/arraybuffer-to-array.md +0 -27
  78. package/docs/guides/binary/arraybuffer-to-blob.md +0 -24
  79. package/docs/guides/binary/arraybuffer-to-buffer.md +0 -25
  80. package/docs/guides/binary/arraybuffer-to-string.md +0 -15
  81. package/docs/guides/binary/arraybuffer-to-typedarray.md +0 -39
  82. package/docs/guides/binary/blob-to-arraybuffer.md +0 -14
  83. package/docs/guides/binary/blob-to-dataview.md +0 -14
  84. package/docs/guides/binary/blob-to-stream.md +0 -14
  85. package/docs/guides/binary/blob-to-string.md +0 -15
  86. package/docs/guides/binary/blob-to-typedarray.md +0 -14
  87. package/docs/guides/binary/buffer-to-arraybuffer.md +0 -14
  88. package/docs/guides/binary/buffer-to-blob.md +0 -14
  89. package/docs/guides/binary/buffer-to-readablestream.md +0 -41
  90. package/docs/guides/binary/buffer-to-string.md +0 -25
  91. package/docs/guides/binary/buffer-to-typedarray.md +0 -14
  92. package/docs/guides/binary/dataview-to-string.md +0 -15
  93. package/docs/guides/binary/typedarray-to-arraybuffer.md +0 -25
  94. package/docs/guides/binary/typedarray-to-blob.md +0 -16
  95. package/docs/guides/binary/typedarray-to-buffer.md +0 -14
  96. package/docs/guides/binary/typedarray-to-dataview.md +0 -14
  97. package/docs/guides/binary/typedarray-to-readablestream.md +0 -41
  98. package/docs/guides/binary/typedarray-to-string.md +0 -16
  99. package/docs/guides/deployment/railway.md +0 -157
  100. package/docs/guides/ecosystem/astro.md +0 -72
  101. package/docs/guides/ecosystem/discordjs.md +0 -77
  102. package/docs/guides/ecosystem/docker.md +0 -140
  103. package/docs/guides/ecosystem/drizzle.md +0 -185
  104. package/docs/guides/ecosystem/edgedb.md +0 -228
  105. package/docs/guides/ecosystem/elysia.md +0 -31
  106. package/docs/guides/ecosystem/express.md +0 -40
  107. package/docs/guides/ecosystem/hono.md +0 -39
  108. package/docs/guides/ecosystem/mongoose.md +0 -87
  109. package/docs/guides/ecosystem/neon-drizzle.md +0 -220
  110. package/docs/guides/ecosystem/neon-serverless-postgres.md +0 -55
  111. package/docs/guides/ecosystem/nextjs.md +0 -49
  112. package/docs/guides/ecosystem/nuxt.md +0 -56
  113. package/docs/guides/ecosystem/pm2.md +0 -57
  114. package/docs/guides/ecosystem/prisma.md +0 -141
  115. package/docs/guides/ecosystem/qwik.md +0 -107
  116. package/docs/guides/ecosystem/react.md +0 -50
  117. package/docs/guides/ecosystem/remix.md +0 -78
  118. package/docs/guides/ecosystem/render.md +0 -79
  119. package/docs/guides/ecosystem/sentry.md +0 -52
  120. package/docs/guides/ecosystem/solidstart.md +0 -58
  121. package/docs/guides/ecosystem/ssr-react.md +0 -51
  122. package/docs/guides/ecosystem/stric.md +0 -55
  123. package/docs/guides/ecosystem/sveltekit.md +0 -125
  124. package/docs/guides/ecosystem/systemd.md +0 -113
  125. package/docs/guides/ecosystem/vite.md +0 -71
  126. package/docs/guides/html-rewriter/extract-links.md +0 -68
  127. package/docs/guides/html-rewriter/extract-social-meta.md +0 -93
  128. package/docs/guides/http/cluster.md +0 -66
  129. package/docs/guides/http/fetch-unix.md +0 -33
  130. package/docs/guides/http/fetch.md +0 -24
  131. package/docs/guides/http/file-uploads.md +0 -94
  132. package/docs/guides/http/hot.md +0 -26
  133. package/docs/guides/http/proxy.md +0 -24
  134. package/docs/guides/http/server.md +0 -46
  135. package/docs/guides/http/simple.md +0 -18
  136. package/docs/guides/http/stream-file.md +0 -48
  137. package/docs/guides/http/stream-iterator.md +0 -47
  138. package/docs/guides/http/stream-node-streams-in-bun.md +0 -20
  139. package/docs/guides/http/tls.md +0 -30
  140. package/docs/guides/install/add-dev.md +0 -26
  141. package/docs/guides/install/add-git.md +0 -36
  142. package/docs/guides/install/add-optional.md +0 -25
  143. package/docs/guides/install/add-peer.md +0 -43
  144. package/docs/guides/install/add-tarball.md +0 -33
  145. package/docs/guides/install/add.md +0 -42
  146. package/docs/guides/install/azure-artifacts.md +0 -73
  147. package/docs/guides/install/cicd.md +0 -41
  148. package/docs/guides/install/custom-registry.md +0 -30
  149. package/docs/guides/install/from-npm-install-to-bun-install.md +0 -214
  150. package/docs/guides/install/git-diff-bun-lockfile.md +0 -44
  151. package/docs/guides/install/jfrog-artifactory.md +0 -28
  152. package/docs/guides/install/npm-alias.md +0 -23
  153. package/docs/guides/install/registry-scope.md +0 -38
  154. package/docs/guides/install/trusted.md +0 -46
  155. package/docs/guides/install/workspaces.md +0 -70
  156. package/docs/guides/install/yarnlock.md +0 -44
  157. package/docs/guides/process/argv.md +0 -58
  158. package/docs/guides/process/ctrl-c.md +0 -16
  159. package/docs/guides/process/ipc.md +0 -66
  160. package/docs/guides/process/nanoseconds.md +0 -13
  161. package/docs/guides/process/os-signals.md +0 -39
  162. package/docs/guides/process/spawn-stderr.md +0 -31
  163. package/docs/guides/process/spawn-stdout.md +0 -26
  164. package/docs/guides/process/spawn.md +0 -41
  165. package/docs/guides/process/stdin.md +0 -54
  166. package/docs/guides/read-file/arraybuffer.md +0 -28
  167. package/docs/guides/read-file/buffer.md +0 -19
  168. package/docs/guides/read-file/exists.md +0 -16
  169. package/docs/guides/read-file/json.md +0 -17
  170. package/docs/guides/read-file/mime.md +0 -20
  171. package/docs/guides/read-file/stream.md +0 -26
  172. package/docs/guides/read-file/string.md +0 -22
  173. package/docs/guides/read-file/uint8array.md +0 -21
  174. package/docs/guides/read-file/watch.md +0 -68
  175. package/docs/guides/runtime/build-time-constants.md +0 -293
  176. package/docs/guides/runtime/cicd.md +0 -43
  177. package/docs/guides/runtime/codesign-macos-executable.md +0 -56
  178. package/docs/guides/runtime/define-constant.md +0 -145
  179. package/docs/guides/runtime/delete-directory.md +0 -37
  180. package/docs/guides/runtime/delete-file.md +0 -19
  181. package/docs/guides/runtime/heap-snapshot.md +0 -26
  182. package/docs/guides/runtime/import-html.md +0 -15
  183. package/docs/guides/runtime/import-json.md +0 -44
  184. package/docs/guides/runtime/import-toml.md +0 -30
  185. package/docs/guides/runtime/import-yaml.md +0 -102
  186. package/docs/guides/runtime/read-env.md +0 -32
  187. package/docs/guides/runtime/set-env.md +0 -47
  188. package/docs/guides/runtime/shell.md +0 -40
  189. package/docs/guides/runtime/timezone.md +0 -35
  190. package/docs/guides/runtime/tsconfig-paths.md +0 -29
  191. package/docs/guides/runtime/typescript.md +0 -49
  192. package/docs/guides/runtime/vscode-debugger.md +0 -47
  193. package/docs/guides/runtime/web-debugger.md +0 -82
  194. package/docs/guides/streams/node-readable-to-arraybuffer.md +0 -11
  195. package/docs/guides/streams/node-readable-to-blob.md +0 -11
  196. package/docs/guides/streams/node-readable-to-json.md +0 -12
  197. package/docs/guides/streams/node-readable-to-string.md +0 -12
  198. package/docs/guides/streams/node-readable-to-uint8array.md +0 -11
  199. package/docs/guides/streams/to-array.md +0 -14
  200. package/docs/guides/streams/to-arraybuffer.md +0 -14
  201. package/docs/guides/streams/to-blob.md +0 -14
  202. package/docs/guides/streams/to-buffer.md +0 -15
  203. package/docs/guides/streams/to-json.md +0 -14
  204. package/docs/guides/streams/to-string.md +0 -14
  205. package/docs/guides/streams/to-typedarray.md +0 -22
  206. package/docs/guides/test/bail.md +0 -22
  207. package/docs/guides/test/coverage-threshold.md +0 -60
  208. package/docs/guides/test/coverage.md +0 -44
  209. package/docs/guides/test/happy-dom.md +0 -68
  210. package/docs/guides/test/migrate-from-jest.md +0 -143
  211. package/docs/guides/test/mock-clock.md +0 -48
  212. package/docs/guides/test/mock-functions.md +0 -68
  213. package/docs/guides/test/rerun-each.md +0 -14
  214. package/docs/guides/test/run-tests.md +0 -111
  215. package/docs/guides/test/skip-tests.md +0 -39
  216. package/docs/guides/test/snapshot.md +0 -95
  217. package/docs/guides/test/spy-on.md +0 -46
  218. package/docs/guides/test/svelte-test.md +0 -120
  219. package/docs/guides/test/testing-library.md +0 -92
  220. package/docs/guides/test/timeout.md +0 -15
  221. package/docs/guides/test/todo-tests.md +0 -67
  222. package/docs/guides/test/update-snapshots.md +0 -46
  223. package/docs/guides/test/watch-mode.md +0 -19
  224. package/docs/guides/util/base64.md +0 -15
  225. package/docs/guides/util/deep-equals.md +0 -39
  226. package/docs/guides/util/deflate.md +0 -18
  227. package/docs/guides/util/detect-bun.md +0 -23
  228. package/docs/guides/util/entrypoint.md +0 -17
  229. package/docs/guides/util/escape-html.md +0 -22
  230. package/docs/guides/util/file-url-to-path.md +0 -14
  231. package/docs/guides/util/gzip.md +0 -18
  232. package/docs/guides/util/hash-a-password.md +0 -54
  233. package/docs/guides/util/import-meta-dir.md +0 -13
  234. package/docs/guides/util/import-meta-file.md +0 -13
  235. package/docs/guides/util/import-meta-path.md +0 -13
  236. package/docs/guides/util/javascript-uuid.md +0 -23
  237. package/docs/guides/util/main.md +0 -32
  238. package/docs/guides/util/path-to-file-url.md +0 -14
  239. package/docs/guides/util/sleep.md +0 -22
  240. package/docs/guides/util/version.md +0 -21
  241. package/docs/guides/util/which-path-to-executable-bin.md +0 -15
  242. package/docs/guides/websocket/compression.md +0 -31
  243. package/docs/guides/websocket/context.md +0 -77
  244. package/docs/guides/websocket/pubsub.md +0 -41
  245. package/docs/guides/websocket/simple.md +0 -33
  246. package/docs/guides/write-file/append.md +0 -52
  247. package/docs/guides/write-file/basic.md +0 -44
  248. package/docs/guides/write-file/blob.md +0 -28
  249. package/docs/guides/write-file/cat.md +0 -17
  250. package/docs/guides/write-file/file-cp.md +0 -16
  251. package/docs/guides/write-file/filesink.md +0 -52
  252. package/docs/guides/write-file/response.md +0 -17
  253. package/docs/guides/write-file/stdout.md +0 -21
  254. package/docs/guides/write-file/stream.md +0 -17
  255. package/docs/guides/write-file/unlink.md +0 -16
  256. package/docs/index.md +0 -77
  257. package/docs/install/audit.md +0 -57
  258. package/docs/install/cache.md +0 -59
  259. package/docs/install/catalogs.md +0 -298
  260. package/docs/install/index.md +0 -248
  261. package/docs/install/isolated.md +0 -197
  262. package/docs/install/lifecycle.md +0 -46
  263. package/docs/install/lockfile.md +0 -58
  264. package/docs/install/npmrc.md +0 -105
  265. package/docs/install/overrides.md +0 -73
  266. package/docs/install/patch.md +0 -59
  267. package/docs/install/registries.md +0 -30
  268. package/docs/install/security-scanner-api.md +0 -81
  269. package/docs/install/workspaces.md +0 -114
  270. package/docs/installation.md +0 -327
  271. package/docs/project/asan.md +0 -124
  272. package/docs/project/benchmarking.md +0 -203
  273. package/docs/project/bindgen.md +0 -225
  274. package/docs/project/building-windows.md +0 -162
  275. package/docs/project/contributing.md +0 -347
  276. package/docs/project/internals/build-process-for-ci.md +0 -75
  277. package/docs/project/licensing.md +0 -73
  278. package/docs/project/roadmap.md +0 -87
  279. package/docs/quickstart.md +0 -157
  280. package/docs/runtime/autoimport.md +0 -94
  281. package/docs/runtime/bun-apis.md +0 -207
  282. package/docs/runtime/bunfig.md +0 -772
  283. package/docs/runtime/debugger.md +0 -325
  284. package/docs/runtime/env.md +0 -253
  285. package/docs/runtime/hot.md +0 -145
  286. package/docs/runtime/index.md +0 -312
  287. package/docs/runtime/jsx.md +0 -385
  288. package/docs/runtime/loaders.md +0 -130
  289. package/docs/runtime/modules.md +0 -320
  290. package/docs/runtime/nodejs-apis.md +0 -463
  291. package/docs/runtime/plugins.md +0 -561
  292. package/docs/runtime/shell.md +0 -605
  293. package/docs/runtime/typescript.md +0 -139
  294. package/docs/runtime/web-apis.md +0 -128
  295. package/docs/test/configuration.md +0 -154
  296. package/docs/test/coverage.md +0 -142
  297. package/docs/test/discovery.md +0 -85
  298. package/docs/test/dom.md +0 -75
  299. package/docs/test/examples/concurrent-test-glob.md +0 -132
  300. package/docs/test/hot.md +0 -15
  301. package/docs/test/lifecycle.md +0 -81
  302. package/docs/test/mocks.md +0 -313
  303. package/docs/test/reporters.md +0 -117
  304. package/docs/test/runtime-behavior.md +0 -95
  305. package/docs/test/snapshots.md +0 -68
  306. package/docs/test/time.md +0 -126
  307. package/docs/test/writing.md +0 -825
  308. 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.20251105T140650\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
- ```