@depup/bun-types 1.3.11-depup.0

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 (361) hide show
  1. package/CLAUDE.md +105 -0
  2. package/README.md +25 -0
  3. package/bun.d.ts +8712 -0
  4. package/bun.ns.d.ts +5 -0
  5. package/bundle.d.ts +74 -0
  6. package/changes.json +5 -0
  7. package/deprecated.d.ts +184 -0
  8. package/devserver.d.ts +187 -0
  9. package/docs/README.md +28 -0
  10. package/docs/bundler/bytecode.mdx +447 -0
  11. package/docs/bundler/css.mdx +1024 -0
  12. package/docs/bundler/esbuild.mdx +304 -0
  13. package/docs/bundler/executables.mdx +1318 -0
  14. package/docs/bundler/fullstack.mdx +1086 -0
  15. package/docs/bundler/hot-reloading.mdx +229 -0
  16. package/docs/bundler/html-static.mdx +498 -0
  17. package/docs/bundler/index.mdx +1840 -0
  18. package/docs/bundler/loaders.mdx +451 -0
  19. package/docs/bundler/macros.mdx +328 -0
  20. package/docs/bundler/minifier.mdx +1286 -0
  21. package/docs/bundler/plugins.mdx +477 -0
  22. package/docs/bundler/standalone-html.mdx +314 -0
  23. package/docs/feedback.mdx +75 -0
  24. package/docs/guides/binary/arraybuffer-to-array.mdx +29 -0
  25. package/docs/guides/binary/arraybuffer-to-blob.mdx +26 -0
  26. package/docs/guides/binary/arraybuffer-to-buffer.mdx +27 -0
  27. package/docs/guides/binary/arraybuffer-to-string.mdx +17 -0
  28. package/docs/guides/binary/arraybuffer-to-typedarray.mdx +41 -0
  29. package/docs/guides/binary/blob-to-arraybuffer.mdx +16 -0
  30. package/docs/guides/binary/blob-to-dataview.mdx +16 -0
  31. package/docs/guides/binary/blob-to-stream.mdx +16 -0
  32. package/docs/guides/binary/blob-to-string.mdx +17 -0
  33. package/docs/guides/binary/blob-to-typedarray.mdx +16 -0
  34. package/docs/guides/binary/buffer-to-arraybuffer.mdx +16 -0
  35. package/docs/guides/binary/buffer-to-blob.mdx +16 -0
  36. package/docs/guides/binary/buffer-to-readablestream.mdx +43 -0
  37. package/docs/guides/binary/buffer-to-string.mdx +27 -0
  38. package/docs/guides/binary/buffer-to-typedarray.mdx +16 -0
  39. package/docs/guides/binary/dataview-to-string.mdx +17 -0
  40. package/docs/guides/binary/typedarray-to-arraybuffer.mdx +27 -0
  41. package/docs/guides/binary/typedarray-to-blob.mdx +18 -0
  42. package/docs/guides/binary/typedarray-to-buffer.mdx +16 -0
  43. package/docs/guides/binary/typedarray-to-dataview.mdx +16 -0
  44. package/docs/guides/binary/typedarray-to-readablestream.mdx +43 -0
  45. package/docs/guides/binary/typedarray-to-string.mdx +18 -0
  46. package/docs/guides/deployment/aws-lambda.mdx +204 -0
  47. package/docs/guides/deployment/digital-ocean.mdx +161 -0
  48. package/docs/guides/deployment/google-cloud-run.mdx +194 -0
  49. package/docs/guides/deployment/railway.mdx +145 -0
  50. package/docs/guides/deployment/render.mdx +82 -0
  51. package/docs/guides/deployment/vercel.mdx +97 -0
  52. package/docs/guides/ecosystem/astro.mdx +82 -0
  53. package/docs/guides/ecosystem/discordjs.mdx +80 -0
  54. package/docs/guides/ecosystem/docker.mdx +151 -0
  55. package/docs/guides/ecosystem/drizzle.mdx +195 -0
  56. package/docs/guides/ecosystem/elysia.mdx +31 -0
  57. package/docs/guides/ecosystem/express.mdx +43 -0
  58. package/docs/guides/ecosystem/gel.mdx +261 -0
  59. package/docs/guides/ecosystem/hono.mdx +47 -0
  60. package/docs/guides/ecosystem/mongoose.mdx +92 -0
  61. package/docs/guides/ecosystem/neon-drizzle.mdx +234 -0
  62. package/docs/guides/ecosystem/neon-serverless-postgres.mdx +60 -0
  63. package/docs/guides/ecosystem/nextjs.mdx +103 -0
  64. package/docs/guides/ecosystem/nuxt.mdx +96 -0
  65. package/docs/guides/ecosystem/pm2.mdx +55 -0
  66. package/docs/guides/ecosystem/prisma-postgres.mdx +169 -0
  67. package/docs/guides/ecosystem/prisma.mdx +164 -0
  68. package/docs/guides/ecosystem/qwik.mdx +114 -0
  69. package/docs/guides/ecosystem/react.mdx +52 -0
  70. package/docs/guides/ecosystem/remix.mdx +97 -0
  71. package/docs/guides/ecosystem/sentry.mdx +54 -0
  72. package/docs/guides/ecosystem/solidstart.mdx +62 -0
  73. package/docs/guides/ecosystem/ssr-react.mdx +49 -0
  74. package/docs/guides/ecosystem/stric.mdx +54 -0
  75. package/docs/guides/ecosystem/sveltekit.mdx +138 -0
  76. package/docs/guides/ecosystem/systemd.mdx +114 -0
  77. package/docs/guides/ecosystem/tanstack-start.mdx +791 -0
  78. package/docs/guides/ecosystem/upstash.mdx +87 -0
  79. package/docs/guides/ecosystem/vite.mdx +77 -0
  80. package/docs/guides/html-rewriter/extract-links.mdx +71 -0
  81. package/docs/guides/html-rewriter/extract-social-meta.mdx +97 -0
  82. package/docs/guides/http/cluster.mdx +69 -0
  83. package/docs/guides/http/fetch-unix.mdx +35 -0
  84. package/docs/guides/http/fetch.mdx +26 -0
  85. package/docs/guides/http/file-uploads.mdx +97 -0
  86. package/docs/guides/http/hot.mdx +28 -0
  87. package/docs/guides/http/proxy.mdx +50 -0
  88. package/docs/guides/http/server.mdx +48 -0
  89. package/docs/guides/http/simple.mdx +20 -0
  90. package/docs/guides/http/sse.mdx +91 -0
  91. package/docs/guides/http/stream-file.mdx +50 -0
  92. package/docs/guides/http/stream-iterator.mdx +49 -0
  93. package/docs/guides/http/stream-node-streams-in-bun.mdx +22 -0
  94. package/docs/guides/http/tls.mdx +32 -0
  95. package/docs/guides/index.mdx +10 -0
  96. package/docs/guides/install/add-dev.mdx +28 -0
  97. package/docs/guides/install/add-git.mdx +40 -0
  98. package/docs/guides/install/add-optional.mdx +27 -0
  99. package/docs/guides/install/add-peer.mdx +45 -0
  100. package/docs/guides/install/add-tarball.mdx +35 -0
  101. package/docs/guides/install/add.mdx +44 -0
  102. package/docs/guides/install/azure-artifacts.mdx +76 -0
  103. package/docs/guides/install/cicd.mdx +43 -0
  104. package/docs/guides/install/custom-registry.mdx +32 -0
  105. package/docs/guides/install/from-npm-install-to-bun-install.mdx +230 -0
  106. package/docs/guides/install/git-diff-bun-lockfile.mdx +48 -0
  107. package/docs/guides/install/jfrog-artifactory.mdx +28 -0
  108. package/docs/guides/install/npm-alias.mdx +25 -0
  109. package/docs/guides/install/registry-scope.mdx +40 -0
  110. package/docs/guides/install/trusted.mdx +52 -0
  111. package/docs/guides/install/workspaces.mdx +70 -0
  112. package/docs/guides/install/yarnlock.mdx +51 -0
  113. package/docs/guides/process/argv.mdx +66 -0
  114. package/docs/guides/process/ctrl-c.mdx +18 -0
  115. package/docs/guides/process/ipc.mdx +69 -0
  116. package/docs/guides/process/nanoseconds.mdx +15 -0
  117. package/docs/guides/process/os-signals.mdx +31 -0
  118. package/docs/guides/process/spawn-stderr.mdx +34 -0
  119. package/docs/guides/process/spawn-stdout.mdx +28 -0
  120. package/docs/guides/process/spawn.mdx +43 -0
  121. package/docs/guides/process/stdin.mdx +62 -0
  122. package/docs/guides/read-file/arraybuffer.mdx +30 -0
  123. package/docs/guides/read-file/buffer.mdx +21 -0
  124. package/docs/guides/read-file/exists.mdx +18 -0
  125. package/docs/guides/read-file/json.mdx +19 -0
  126. package/docs/guides/read-file/mime.mdx +22 -0
  127. package/docs/guides/read-file/stream.mdx +28 -0
  128. package/docs/guides/read-file/string.mdx +24 -0
  129. package/docs/guides/read-file/uint8array.mdx +23 -0
  130. package/docs/guides/read-file/watch.mdx +66 -0
  131. package/docs/guides/runtime/build-time-constants.mdx +295 -0
  132. package/docs/guides/runtime/cicd.mdx +45 -0
  133. package/docs/guides/runtime/codesign-macos-executable.mdx +61 -0
  134. package/docs/guides/runtime/define-constant.mdx +149 -0
  135. package/docs/guides/runtime/delete-directory.mdx +39 -0
  136. package/docs/guides/runtime/delete-file.mdx +21 -0
  137. package/docs/guides/runtime/heap-snapshot.mdx +28 -0
  138. package/docs/guides/runtime/import-html.mdx +15 -0
  139. package/docs/guides/runtime/import-json.mdx +46 -0
  140. package/docs/guides/runtime/import-json5.mdx +74 -0
  141. package/docs/guides/runtime/import-toml.mdx +32 -0
  142. package/docs/guides/runtime/import-yaml.mdx +104 -0
  143. package/docs/guides/runtime/read-env.mdx +37 -0
  144. package/docs/guides/runtime/set-env.mdx +51 -0
  145. package/docs/guides/runtime/shell.mdx +42 -0
  146. package/docs/guides/runtime/timezone.mdx +38 -0
  147. package/docs/guides/runtime/tsconfig-paths.mdx +31 -0
  148. package/docs/guides/runtime/typescript.mdx +51 -0
  149. package/docs/guides/runtime/vscode-debugger.mdx +47 -0
  150. package/docs/guides/runtime/web-debugger.mdx +103 -0
  151. package/docs/guides/streams/node-readable-to-arraybuffer.mdx +13 -0
  152. package/docs/guides/streams/node-readable-to-blob.mdx +13 -0
  153. package/docs/guides/streams/node-readable-to-json.mdx +14 -0
  154. package/docs/guides/streams/node-readable-to-string.mdx +14 -0
  155. package/docs/guides/streams/node-readable-to-uint8array.mdx +13 -0
  156. package/docs/guides/streams/to-array.mdx +16 -0
  157. package/docs/guides/streams/to-arraybuffer.mdx +16 -0
  158. package/docs/guides/streams/to-blob.mdx +16 -0
  159. package/docs/guides/streams/to-buffer.mdx +17 -0
  160. package/docs/guides/streams/to-json.mdx +16 -0
  161. package/docs/guides/streams/to-string.mdx +16 -0
  162. package/docs/guides/streams/to-typedarray.mdx +24 -0
  163. package/docs/guides/test/bail.mdx +24 -0
  164. package/docs/guides/test/concurrent-test-glob.mdx +146 -0
  165. package/docs/guides/test/coverage-threshold.mdx +67 -0
  166. package/docs/guides/test/coverage.mdx +49 -0
  167. package/docs/guides/test/happy-dom.mdx +73 -0
  168. package/docs/guides/test/migrate-from-jest.mdx +125 -0
  169. package/docs/guides/test/mock-clock.mdx +50 -0
  170. package/docs/guides/test/mock-functions.mdx +70 -0
  171. package/docs/guides/test/rerun-each.mdx +16 -0
  172. package/docs/guides/test/run-tests.mdx +116 -0
  173. package/docs/guides/test/skip-tests.mdx +43 -0
  174. package/docs/guides/test/snapshot.mdx +102 -0
  175. package/docs/guides/test/spy-on.mdx +49 -0
  176. package/docs/guides/test/svelte-test.mdx +113 -0
  177. package/docs/guides/test/testing-library.mdx +93 -0
  178. package/docs/guides/test/timeout.mdx +17 -0
  179. package/docs/guides/test/todo-tests.mdx +74 -0
  180. package/docs/guides/test/update-snapshots.mdx +49 -0
  181. package/docs/guides/test/watch-mode.mdx +24 -0
  182. package/docs/guides/util/base64.mdx +17 -0
  183. package/docs/guides/util/deep-equals.mdx +41 -0
  184. package/docs/guides/util/deflate.mdx +20 -0
  185. package/docs/guides/util/detect-bun.mdx +28 -0
  186. package/docs/guides/util/entrypoint.mdx +19 -0
  187. package/docs/guides/util/escape-html.mdx +24 -0
  188. package/docs/guides/util/file-url-to-path.mdx +16 -0
  189. package/docs/guides/util/gzip.mdx +20 -0
  190. package/docs/guides/util/hash-a-password.mdx +56 -0
  191. package/docs/guides/util/import-meta-dir.mdx +15 -0
  192. package/docs/guides/util/import-meta-file.mdx +15 -0
  193. package/docs/guides/util/import-meta-path.mdx +15 -0
  194. package/docs/guides/util/javascript-uuid.mdx +25 -0
  195. package/docs/guides/util/main.mdx +43 -0
  196. package/docs/guides/util/path-to-file-url.mdx +16 -0
  197. package/docs/guides/util/sleep.mdx +24 -0
  198. package/docs/guides/util/upgrade.mdx +93 -0
  199. package/docs/guides/util/version.mdx +23 -0
  200. package/docs/guides/util/which-path-to-executable-bin.mdx +17 -0
  201. package/docs/guides/websocket/compression.mdx +33 -0
  202. package/docs/guides/websocket/context.mdx +79 -0
  203. package/docs/guides/websocket/pubsub.mdx +43 -0
  204. package/docs/guides/websocket/simple.mdx +38 -0
  205. package/docs/guides/write-file/append.mdx +54 -0
  206. package/docs/guides/write-file/basic.mdx +46 -0
  207. package/docs/guides/write-file/blob.mdx +30 -0
  208. package/docs/guides/write-file/cat.mdx +19 -0
  209. package/docs/guides/write-file/file-cp.mdx +18 -0
  210. package/docs/guides/write-file/filesink.mdx +54 -0
  211. package/docs/guides/write-file/response.mdx +19 -0
  212. package/docs/guides/write-file/stdout.mdx +23 -0
  213. package/docs/guides/write-file/stream.mdx +19 -0
  214. package/docs/guides/write-file/unlink.mdx +18 -0
  215. package/docs/index.mdx +133 -0
  216. package/docs/installation.mdx +372 -0
  217. package/docs/pm/bunx.mdx +91 -0
  218. package/docs/pm/catalogs.mdx +292 -0
  219. package/docs/pm/cli/add.mdx +179 -0
  220. package/docs/pm/cli/audit.mdx +60 -0
  221. package/docs/pm/cli/info.mdx +70 -0
  222. package/docs/pm/cli/install.mdx +591 -0
  223. package/docs/pm/cli/link.mdx +61 -0
  224. package/docs/pm/cli/outdated.mdx +197 -0
  225. package/docs/pm/cli/patch.mdx +69 -0
  226. package/docs/pm/cli/pm.mdx +323 -0
  227. package/docs/pm/cli/publish.mdx +131 -0
  228. package/docs/pm/cli/remove.mdx +16 -0
  229. package/docs/pm/cli/update.mdx +140 -0
  230. package/docs/pm/cli/why.mdx +84 -0
  231. package/docs/pm/filter.mdx +127 -0
  232. package/docs/pm/global-cache.mdx +72 -0
  233. package/docs/pm/isolated-installs.mdx +220 -0
  234. package/docs/pm/lifecycle.mdx +64 -0
  235. package/docs/pm/lockfile.mdx +64 -0
  236. package/docs/pm/npmrc.mdx +245 -0
  237. package/docs/pm/overrides.mdx +83 -0
  238. package/docs/pm/scopes-registries.mdx +35 -0
  239. package/docs/pm/security-scanner-api.mdx +95 -0
  240. package/docs/pm/workspaces.mdx +115 -0
  241. package/docs/project/benchmarking.mdx +296 -0
  242. package/docs/project/bindgen.mdx +223 -0
  243. package/docs/project/building-windows.mdx +143 -0
  244. package/docs/project/contributing.mdx +366 -0
  245. package/docs/project/feedback.mdx +20 -0
  246. package/docs/project/license.mdx +78 -0
  247. package/docs/project/roadmap.mdx +8 -0
  248. package/docs/quickstart.mdx +251 -0
  249. package/docs/runtime/archive.mdx +452 -0
  250. package/docs/runtime/auto-install.mdx +97 -0
  251. package/docs/runtime/binary-data.mdx +846 -0
  252. package/docs/runtime/bun-apis.mdx +60 -0
  253. package/docs/runtime/bunfig.mdx +765 -0
  254. package/docs/runtime/c-compiler.mdx +204 -0
  255. package/docs/runtime/child-process.mdx +659 -0
  256. package/docs/runtime/color.mdx +267 -0
  257. package/docs/runtime/console.mdx +67 -0
  258. package/docs/runtime/cookies.mdx +454 -0
  259. package/docs/runtime/cron.mdx +358 -0
  260. package/docs/runtime/csrf.mdx +171 -0
  261. package/docs/runtime/debugger.mdx +335 -0
  262. package/docs/runtime/environment-variables.mdx +231 -0
  263. package/docs/runtime/ffi.mdx +567 -0
  264. package/docs/runtime/file-io.mdx +306 -0
  265. package/docs/runtime/file-system-router.mdx +118 -0
  266. package/docs/runtime/file-types.mdx +482 -0
  267. package/docs/runtime/glob.mdx +181 -0
  268. package/docs/runtime/globals.mdx +72 -0
  269. package/docs/runtime/hashing.mdx +315 -0
  270. package/docs/runtime/html-rewriter.mdx +333 -0
  271. package/docs/runtime/http/cookies.mdx +79 -0
  272. package/docs/runtime/http/error-handling.mdx +40 -0
  273. package/docs/runtime/http/metrics.mdx +36 -0
  274. package/docs/runtime/http/routing.mdx +289 -0
  275. package/docs/runtime/http/server.mdx +672 -0
  276. package/docs/runtime/http/tls.mdx +101 -0
  277. package/docs/runtime/http/websockets.mdx +414 -0
  278. package/docs/runtime/index.mdx +223 -0
  279. package/docs/runtime/json5.mdx +271 -0
  280. package/docs/runtime/jsonl.mdx +188 -0
  281. package/docs/runtime/jsx.mdx +115 -0
  282. package/docs/runtime/markdown.mdx +381 -0
  283. package/docs/runtime/module-resolution.mdx +374 -0
  284. package/docs/runtime/networking/dns.mdx +111 -0
  285. package/docs/runtime/networking/fetch.mdx +484 -0
  286. package/docs/runtime/networking/tcp.mdx +239 -0
  287. package/docs/runtime/networking/udp.mdx +180 -0
  288. package/docs/runtime/node-api.mdx +19 -0
  289. package/docs/runtime/nodejs-compat.mdx +468 -0
  290. package/docs/runtime/plugins.mdx +419 -0
  291. package/docs/runtime/redis.mdx +583 -0
  292. package/docs/runtime/repl.mdx +176 -0
  293. package/docs/runtime/s3.mdx +881 -0
  294. package/docs/runtime/secrets.mdx +340 -0
  295. package/docs/runtime/semver.mdx +57 -0
  296. package/docs/runtime/shell.mdx +637 -0
  297. package/docs/runtime/sql.mdx +1404 -0
  298. package/docs/runtime/sqlite.mdx +721 -0
  299. package/docs/runtime/streams.mdx +232 -0
  300. package/docs/runtime/templating/create.mdx +269 -0
  301. package/docs/runtime/templating/init.mdx +58 -0
  302. package/docs/runtime/toml.mdx +238 -0
  303. package/docs/runtime/transpiler.mdx +288 -0
  304. package/docs/runtime/typescript.mdx +58 -0
  305. package/docs/runtime/utils.mdx +1010 -0
  306. package/docs/runtime/watch-mode.mdx +161 -0
  307. package/docs/runtime/web-apis.mdx +29 -0
  308. package/docs/runtime/workers.mdx +314 -0
  309. package/docs/runtime/yaml.mdx +470 -0
  310. package/docs/snippets/cli/add.mdx +166 -0
  311. package/docs/snippets/cli/build.mdx +197 -0
  312. package/docs/snippets/cli/bunx.mdx +49 -0
  313. package/docs/snippets/cli/feedback.mdx +17 -0
  314. package/docs/snippets/cli/init.mdx +84 -0
  315. package/docs/snippets/cli/install.mdx +173 -0
  316. package/docs/snippets/cli/link.mdx +163 -0
  317. package/docs/snippets/cli/outdated.mdx +140 -0
  318. package/docs/snippets/cli/patch.mdx +171 -0
  319. package/docs/snippets/cli/publish.mdx +198 -0
  320. package/docs/snippets/cli/remove.mdx +146 -0
  321. package/docs/snippets/cli/run.mdx +305 -0
  322. package/docs/snippets/cli/test.mdx +105 -0
  323. package/docs/snippets/cli/update.mdx +144 -0
  324. package/docs/test/code-coverage.mdx +409 -0
  325. package/docs/test/configuration.mdx +574 -0
  326. package/docs/test/dates-times.mdx +129 -0
  327. package/docs/test/discovery.mdx +90 -0
  328. package/docs/test/dom.mdx +226 -0
  329. package/docs/test/index.mdx +409 -0
  330. package/docs/test/lifecycle.mdx +366 -0
  331. package/docs/test/mocks.mdx +637 -0
  332. package/docs/test/reporters.mdx +126 -0
  333. package/docs/test/runtime-behavior.mdx +342 -0
  334. package/docs/test/snapshots.mdx +434 -0
  335. package/docs/test/writing-tests.mdx +672 -0
  336. package/docs/typescript.mdx +54 -0
  337. package/extensions.d.ts +40 -0
  338. package/fetch.d.ts +79 -0
  339. package/ffi.d.ts +1154 -0
  340. package/globals.d.ts +2067 -0
  341. package/html-rewriter.d.ts +186 -0
  342. package/index.d.ts +32 -0
  343. package/jsc.d.ts +233 -0
  344. package/jsx.d.ts +11 -0
  345. package/overrides.d.ts +376 -0
  346. package/package.json +53 -0
  347. package/redis.d.ts +3352 -0
  348. package/s3.d.ts +1354 -0
  349. package/security.d.ts +101 -0
  350. package/serve.d.ts +1296 -0
  351. package/shell.d.ts +380 -0
  352. package/sql.d.ts +887 -0
  353. package/sqlite.d.ts +1322 -0
  354. package/test-globals.d.ts +22 -0
  355. package/test.d.ts +2392 -0
  356. package/vendor/expect-type/branding.d.ts +283 -0
  357. package/vendor/expect-type/index.d.ts +1207 -0
  358. package/vendor/expect-type/messages.d.ts +395 -0
  359. package/vendor/expect-type/overloads.d.ts +669 -0
  360. package/vendor/expect-type/utils.d.ts +431 -0
  361. package/wasm.d.ts +193 -0
@@ -0,0 +1,659 @@
1
+ ---
2
+ title: Spawn
3
+ description: Spawn child processes with `Bun.spawn` or `Bun.spawnSync`
4
+ ---
5
+
6
+ ## Spawn a process (`Bun.spawn()`)
7
+
8
+ Provide a command as an array of strings. The result of `Bun.spawn()` is a `Bun.Subprocess` object.
9
+
10
+ ```ts
11
+ const proc = Bun.spawn(["bun", "--version"]);
12
+ console.log(await proc.exited); // 0
13
+ ```
14
+
15
+ The second argument to `Bun.spawn` is a parameters object that can be used to configure the subprocess.
16
+
17
+ ```ts
18
+ const proc = Bun.spawn(["bun", "--version"], {
19
+ cwd: "./path/to/subdir", // specify a working directory
20
+ env: { ...process.env, FOO: "bar" }, // specify environment variables
21
+ onExit(proc, exitCode, signalCode, error) {
22
+ // exit handler
23
+ },
24
+ });
25
+
26
+ proc.pid; // process ID of subprocess
27
+ ```
28
+
29
+ ## Input stream
30
+
31
+ By default, the input stream of the subprocess is undefined; it can be configured with the `stdin` parameter.
32
+
33
+ ```ts
34
+ const proc = Bun.spawn(["cat"], {
35
+ stdin: await fetch("https://raw.githubusercontent.com/oven-sh/bun/main/examples/hashing.js"),
36
+ });
37
+
38
+ const text = await proc.stdout.text();
39
+ console.log(text); // "const input = "hello world".repeat(400); ..."
40
+ ```
41
+
42
+ | Value | Description |
43
+ | ------------------------ | ------------------------------------------------ |
44
+ | `null` | **Default.** Provide no input to the subprocess |
45
+ | `"pipe"` | Return a `FileSink` for fast incremental writing |
46
+ | `"inherit"` | Inherit the `stdin` of the parent process |
47
+ | `Bun.file()` | Read from the specified file |
48
+ | `TypedArray \| DataView` | Use a binary buffer as input |
49
+ | `Response` | Use the response `body` as input |
50
+ | `Request` | Use the request `body` as input |
51
+ | `ReadableStream` | Use a readable stream as input |
52
+ | `Blob` | Use a blob as input |
53
+ | `number` | Read from the file with a given file descriptor |
54
+
55
+ The `"pipe"` option lets incrementally write to the subprocess's input stream from the parent process.
56
+
57
+ ```ts
58
+ const proc = Bun.spawn(["cat"], {
59
+ stdin: "pipe", // return a FileSink for writing
60
+ });
61
+
62
+ // enqueue string data
63
+ proc.stdin.write("hello");
64
+
65
+ // enqueue binary data
66
+ const enc = new TextEncoder();
67
+ proc.stdin.write(enc.encode(" world!"));
68
+
69
+ // send buffered data
70
+ proc.stdin.flush();
71
+
72
+ // close the input stream
73
+ proc.stdin.end();
74
+ ```
75
+
76
+ Passing a `ReadableStream` to `stdin` lets you pipe data from a JavaScript `ReadableStream` directly to the subprocess's input:
77
+
78
+ ```ts
79
+ const stream = new ReadableStream({
80
+ start(controller) {
81
+ controller.enqueue("Hello from ");
82
+ controller.enqueue("ReadableStream!");
83
+ controller.close();
84
+ },
85
+ });
86
+
87
+ const proc = Bun.spawn(["cat"], {
88
+ stdin: stream,
89
+ stdout: "pipe",
90
+ });
91
+
92
+ const output = await proc.stdout.text();
93
+ console.log(output); // "Hello from ReadableStream!"
94
+ ```
95
+
96
+ ## Output streams
97
+
98
+ You can read results from the subprocess via the `stdout` and `stderr` properties. By default these are instances of `ReadableStream`.
99
+
100
+ ```ts
101
+ const proc = Bun.spawn(["bun", "--version"]);
102
+ const text = await proc.stdout.text();
103
+ console.log(text); // => "1.3.3\n"
104
+ ```
105
+
106
+ Configure the output stream by passing one of the following values to `stdout/stderr`:
107
+
108
+ | Value | Description |
109
+ | ------------ | --------------------------------------------------------------------------------------------------- |
110
+ | `"pipe"` | **Default for `stdout`.** Pipe the output to a `ReadableStream` on the returned `Subprocess` object |
111
+ | `"inherit"` | **Default for `stderr`.** Inherit from the parent process |
112
+ | `"ignore"` | Discard the output |
113
+ | `Bun.file()` | Write to the specified file |
114
+ | `number` | Write to the file with the given file descriptor |
115
+
116
+ ## Exit handling
117
+
118
+ Use the `onExit` callback to listen for the process exiting or being killed.
119
+
120
+ ```ts index.ts icon="/icons/typescript.svg"
121
+ const proc = Bun.spawn(["bun", "--version"], {
122
+ onExit(proc, exitCode, signalCode, error) {
123
+ // exit handler
124
+ },
125
+ });
126
+ ```
127
+
128
+ For convenience, the `exited` property is a `Promise` that resolves when the process exits.
129
+
130
+ ```ts index.ts icon="/icons/typescript.svg"
131
+ const proc = Bun.spawn(["bun", "--version"]);
132
+
133
+ await proc.exited; // resolves when process exit
134
+ proc.killed; // boolean — was the process killed?
135
+ proc.exitCode; // null | number
136
+ proc.signalCode; // null | "SIGABRT" | "SIGALRM" | ...
137
+ ```
138
+
139
+ To kill a process:
140
+
141
+ ```ts index.ts icon="/icons/typescript.svg"
142
+ const proc = Bun.spawn(["bun", "--version"]);
143
+ proc.kill();
144
+ proc.killed; // true
145
+
146
+ proc.kill(15); // specify a signal code
147
+ proc.kill("SIGTERM"); // specify a signal name
148
+ ```
149
+
150
+ The parent `bun` process will not terminate until all child processes have exited. Use `proc.unref()` to detach the child process from the parent.
151
+
152
+ ```ts index.ts icon="/icons/typescript.svg"
153
+ const proc = Bun.spawn(["bun", "--version"]);
154
+ proc.unref();
155
+ ```
156
+
157
+ ## Resource usage
158
+
159
+ You can get information about the process's resource usage after it has exited:
160
+
161
+ ```ts index.ts icon="/icons/typescript.svg"
162
+ const proc = Bun.spawn(["bun", "--version"]);
163
+ await proc.exited;
164
+
165
+ const usage = proc.resourceUsage();
166
+ console.log(`Max memory used: ${usage.maxRSS} bytes`);
167
+ console.log(`CPU time (user): ${usage.cpuTime.user} µs`);
168
+ console.log(`CPU time (system): ${usage.cpuTime.system} µs`);
169
+ ```
170
+
171
+ ## Using AbortSignal
172
+
173
+ You can abort a subprocess using an `AbortSignal`:
174
+
175
+ ```ts index.ts icon="/icons/typescript.svg"
176
+ const controller = new AbortController();
177
+ const { signal } = controller;
178
+
179
+ const proc = Bun.spawn({
180
+ cmd: ["sleep", "100"],
181
+ signal,
182
+ });
183
+
184
+ // Later, to abort the process:
185
+ controller.abort();
186
+ ```
187
+
188
+ ## Using timeout and killSignal
189
+
190
+ You can set a timeout for a subprocess to automatically terminate after a specific duration:
191
+
192
+ ```ts index.ts icon="/icons/typescript.svg"
193
+ // Kill the process after 5 seconds
194
+ const proc = Bun.spawn({
195
+ cmd: ["sleep", "10"],
196
+ timeout: 5000, // 5 seconds in milliseconds
197
+ });
198
+
199
+ await proc.exited; // Will resolve after 5 seconds
200
+ ```
201
+
202
+ By default, timed-out processes are killed with the `SIGTERM` signal. You can specify a different signal with the `killSignal` option:
203
+
204
+ ```ts index.ts icon="/icons/typescript.svg"
205
+ // Kill the process with SIGKILL after 5 seconds
206
+ const proc = Bun.spawn({
207
+ cmd: ["sleep", "10"],
208
+ timeout: 5000,
209
+ killSignal: "SIGKILL", // Can be string name or signal number
210
+ });
211
+ ```
212
+
213
+ The `killSignal` option also controls which signal is sent when an AbortSignal is aborted.
214
+
215
+ ## Using maxBuffer
216
+
217
+ For spawnSync, you can limit the maximum number of bytes of output before the process is killed:
218
+
219
+ ```ts index.ts icon="/icons/typescript.svg"
220
+ // Kill 'yes' after it emits over 100 bytes of output
221
+ const result = Bun.spawnSync({
222
+ cmd: ["yes"], // or ["bun", "exec", "yes"] on Windows
223
+ maxBuffer: 100,
224
+ });
225
+ // process exits
226
+ ```
227
+
228
+ ## Inter-process communication (IPC)
229
+
230
+ Bun supports direct inter-process communication channel between two `bun` processes. To receive messages from a spawned Bun subprocess, specify an `ipc` handler.
231
+
232
+ ```ts parent.ts icon="/icons/typescript.svg"
233
+ const child = Bun.spawn(["bun", "child.ts"], {
234
+ ipc(message) {
235
+ /**
236
+ * The message received from the sub process
237
+ **/
238
+ },
239
+ });
240
+ ```
241
+
242
+ 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.
243
+
244
+ ```ts parent.ts icon="/icons/typescript.svg"
245
+ const childProc = Bun.spawn(["bun", "child.ts"], {
246
+ ipc(message, childProc) {
247
+ /**
248
+ * The message received from the sub process
249
+ **/
250
+ childProc.send("Respond to child");
251
+ },
252
+ });
253
+
254
+ childProc.send("I am your father"); // The parent can send messages to the child as well
255
+ ```
256
+
257
+ 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.
258
+
259
+ ```ts child.ts
260
+ process.send("Hello from child as string");
261
+ process.send({ message: "Hello from child as object" });
262
+
263
+ process.on("message", message => {
264
+ // print message from parent
265
+ console.log(message);
266
+ });
267
+ ```
268
+
269
+ ```ts child.ts
270
+ // send a string
271
+ process.send("Hello from child as string");
272
+
273
+ // send an object
274
+ process.send({ message: "Hello from child as object" });
275
+ ```
276
+
277
+ The `serialization` option controls the underlying communication format between the two processes:
278
+
279
+ - `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.
280
+ - `json`: Messages are serialized using `JSON.stringify` and `JSON.parse`, which does not support as many object types as `advanced` does.
281
+
282
+ To disconnect the IPC channel from the parent process, call:
283
+
284
+ ```ts
285
+ childProc.disconnect();
286
+ ```
287
+
288
+ ### IPC between Bun & Node.js
289
+
290
+ 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.
291
+
292
+ ```js bun-node-ipc.js icon="file-code"
293
+ if (typeof Bun !== "undefined") {
294
+ const prefix = `[bun ${process.versions.bun} 🐇]`;
295
+ const node = Bun.spawn({
296
+ cmd: ["node", __filename],
297
+ ipc({ message }) {
298
+ console.log(message);
299
+ node.send({ message: `${prefix} 👋 hey node` });
300
+ node.kill();
301
+ },
302
+ stdio: ["inherit", "inherit", "inherit"],
303
+ serialization: "json",
304
+ });
305
+
306
+ node.send({ message: `${prefix} 👋 hey node` });
307
+ } else {
308
+ const prefix = `[node ${process.version}]`;
309
+ process.on("message", ({ message }) => {
310
+ console.log(message);
311
+ process.send({ message: `${prefix} 👋 hey bun` });
312
+ });
313
+ }
314
+ ```
315
+
316
+ ---
317
+
318
+ ## Terminal (PTY) support
319
+
320
+ For interactive terminal applications, you can spawn a subprocess with a pseudo-terminal (PTY) attached using the `terminal` option. This makes the subprocess think it's running in a real terminal, enabling features like colored output, cursor movement, and interactive prompts.
321
+
322
+ ```ts
323
+ const proc = Bun.spawn(["bash"], {
324
+ terminal: {
325
+ cols: 80,
326
+ rows: 24,
327
+ data(terminal, data) {
328
+ // Called when data is received from the terminal
329
+ process.stdout.write(data);
330
+ },
331
+ },
332
+ });
333
+
334
+ // Write to the terminal
335
+ proc.terminal.write("echo hello\n");
336
+
337
+ // Wait for the process to exit
338
+ await proc.exited;
339
+
340
+ // Close the terminal
341
+ proc.terminal.close();
342
+ ```
343
+
344
+ When the `terminal` option is provided:
345
+
346
+ - The subprocess sees `process.stdout.isTTY` as `true`
347
+ - `stdin`, `stdout`, and `stderr` are all connected to the terminal
348
+ - `proc.stdin`, `proc.stdout`, and `proc.stderr` return `null` — use the terminal instead
349
+ - Access the terminal via `proc.terminal`
350
+
351
+ ### Terminal options
352
+
353
+ | Option | Description | Default |
354
+ | ------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------ |
355
+ | `cols` | Number of columns | `80` |
356
+ | `rows` | Number of rows | `24` |
357
+ | `name` | Terminal type for PTY configuration (set `TERM` env var separately via `env` option) | `"xterm-256color"` |
358
+ | `data` | Callback when data is received `(terminal, data) => void` | — |
359
+ | `exit` | Callback when PTY stream closes (EOF or error). `exitCode` is PTY lifecycle status (0=EOF, 1=error), not subprocess exit code. Use `proc.exited` for process exit. | — |
360
+ | `drain` | Callback when ready for more data `(terminal) => void` | — |
361
+
362
+ ### Terminal methods
363
+
364
+ The `Terminal` object returned by `proc.terminal` has the following methods:
365
+
366
+ ```ts
367
+ // Write data to the terminal
368
+ proc.terminal.write("echo hello\n");
369
+
370
+ // Resize the terminal
371
+ proc.terminal.resize(120, 40);
372
+
373
+ // Set raw mode (disable line buffering and echo)
374
+ proc.terminal.setRawMode(true);
375
+
376
+ // Keep event loop alive while terminal is open
377
+ proc.terminal.ref();
378
+ proc.terminal.unref();
379
+
380
+ // Close the terminal
381
+ proc.terminal.close();
382
+ ```
383
+
384
+ ### Reusable Terminal
385
+
386
+ You can create a terminal independently and reuse it across multiple subprocesses:
387
+
388
+ ```ts
389
+ await using terminal = new Bun.Terminal({
390
+ cols: 80,
391
+ rows: 24,
392
+ data(term, data) {
393
+ process.stdout.write(data);
394
+ },
395
+ });
396
+
397
+ // Spawn first process
398
+ const proc1 = Bun.spawn(["echo", "first"], { terminal });
399
+ await proc1.exited;
400
+
401
+ // Reuse terminal for another process
402
+ const proc2 = Bun.spawn(["echo", "second"], { terminal });
403
+ await proc2.exited;
404
+
405
+ // Terminal is closed automatically by `await using`
406
+ ```
407
+
408
+ When passing an existing `Terminal` object:
409
+
410
+ - The terminal can be reused across multiple spawns
411
+ - You control when to close the terminal
412
+ - The `exit` callback fires when you call `terminal.close()`, not when each subprocess exits
413
+ - Use `proc.exited` to detect individual subprocess exits
414
+
415
+ This is useful for running multiple commands in sequence through the same terminal session.
416
+
417
+ <Note>Terminal support is only available on POSIX systems (Linux, macOS). It is not available on Windows.</Note>
418
+
419
+ ---
420
+
421
+ ## Blocking API (`Bun.spawnSync()`)
422
+
423
+ 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.
424
+
425
+ 1. It contains a `success` property that indicates whether the process exited with a zero exit code.
426
+ 2. The `stdout` and `stderr` properties are instances of `Buffer` instead of `ReadableStream`.
427
+ 3. There is no `stdin` property. Use `Bun.spawn` to incrementally write to the subprocess's input stream.
428
+
429
+ ```ts
430
+ const proc = Bun.spawnSync(["echo", "hello"]);
431
+
432
+ console.log(proc.stdout.toString());
433
+ // => "hello\n"
434
+ ```
435
+
436
+ 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.
437
+
438
+ ---
439
+
440
+ ## Benchmarks
441
+
442
+ <Note>
443
+ ⚡️ Under the hood, `Bun.spawn` and `Bun.spawnSync` use
444
+ [`posix_spawn(3)`](https://man7.org/linux/man-pages/man3/posix_spawn.3.html).
445
+ </Note>
446
+
447
+ Bun's `spawnSync` spawns processes 60% faster than the Node.js `child_process` module.
448
+
449
+ ```bash terminal icon="terminal"
450
+ bun spawn.mjs
451
+ ```
452
+
453
+ ```txt
454
+ cpu: Apple M1 Max
455
+ runtime: bun 1.x (arm64-darwin)
456
+
457
+ benchmark time (avg) (min … max) p75 p99 p995
458
+ --------------------------------------------------------- -----------------------------
459
+ spawnSync echo hi 888.14 µs/iter (821.83 µs … 1.2 ms) 905.92 µs 1 ms 1.03 ms
460
+ ```
461
+
462
+ ```sh terminal icon="terminal"
463
+ node spawn.node.mjs
464
+ ```
465
+
466
+ ```txt
467
+ cpu: Apple M1 Max
468
+ runtime: node v18.9.1 (arm64-darwin)
469
+
470
+ benchmark time (avg) (min … max) p75 p99 p995
471
+ --------------------------------------------------------- -----------------------------
472
+ spawnSync echo hi 1.47 ms/iter (1.14 ms … 2.64 ms) 1.57 ms 2.37 ms 2.52 ms
473
+ ```
474
+
475
+ ---
476
+
477
+ ## Reference
478
+
479
+ 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).
480
+
481
+ ```ts See Typescript Definitions expandable
482
+ interface Bun {
483
+ spawn(command: string[], options?: SpawnOptions.OptionsObject): Subprocess;
484
+ spawnSync(command: string[], options?: SpawnOptions.OptionsObject): SyncSubprocess;
485
+
486
+ spawn(options: { cmd: string[] } & SpawnOptions.OptionsObject): Subprocess;
487
+ spawnSync(options: { cmd: string[] } & SpawnOptions.OptionsObject): SyncSubprocess;
488
+ }
489
+
490
+ namespace SpawnOptions {
491
+ interface OptionsObject {
492
+ cwd?: string;
493
+ env?: Record<string, string | undefined>;
494
+ stdio?: [Writable, Readable, Readable];
495
+ stdin?: Writable;
496
+ stdout?: Readable;
497
+ stderr?: Readable;
498
+ onExit?(
499
+ subprocess: Subprocess,
500
+ exitCode: number | null,
501
+ signalCode: number | null,
502
+ error?: ErrorLike,
503
+ ): void | Promise<void>;
504
+ ipc?(message: any, subprocess: Subprocess): void;
505
+ serialization?: "json" | "advanced";
506
+ windowsHide?: boolean;
507
+ windowsVerbatimArguments?: boolean;
508
+ argv0?: string;
509
+ signal?: AbortSignal;
510
+ timeout?: number;
511
+ killSignal?: string | number;
512
+ maxBuffer?: number;
513
+ terminal?: TerminalOptions; // PTY support (POSIX only)
514
+ }
515
+
516
+ type Readable =
517
+ | "pipe"
518
+ | "inherit"
519
+ | "ignore"
520
+ | null // equivalent to "ignore"
521
+ | undefined // to use default
522
+ | BunFile
523
+ | ArrayBufferView
524
+ | number;
525
+
526
+ type Writable =
527
+ | "pipe"
528
+ | "inherit"
529
+ | "ignore"
530
+ | null // equivalent to "ignore"
531
+ | undefined // to use default
532
+ | BunFile
533
+ | ArrayBufferView
534
+ | number
535
+ | ReadableStream
536
+ | Blob
537
+ | Response
538
+ | Request;
539
+ }
540
+
541
+ interface Subprocess extends AsyncDisposable {
542
+ readonly stdin: FileSink | number | undefined | null;
543
+ readonly stdout: ReadableStream<Uint8Array<ArrayBuffer>> | number | undefined | null;
544
+ readonly stderr: ReadableStream<Uint8Array<ArrayBuffer>> | number | undefined | null;
545
+ readonly readable: ReadableStream<Uint8Array<ArrayBuffer>> | number | undefined | null;
546
+ readonly terminal: Terminal | undefined;
547
+ readonly pid: number;
548
+ readonly exited: Promise<number>;
549
+ readonly exitCode: number | null;
550
+ readonly signalCode: NodeJS.Signals | null;
551
+ readonly killed: boolean;
552
+
553
+ kill(exitCode?: number | NodeJS.Signals): void;
554
+ ref(): void;
555
+ unref(): void;
556
+
557
+ send(message: any): void;
558
+ disconnect(): void;
559
+ resourceUsage(): ResourceUsage | undefined;
560
+ }
561
+
562
+ interface SyncSubprocess {
563
+ stdout: Buffer | undefined;
564
+ stderr: Buffer | undefined;
565
+ exitCode: number;
566
+ success: boolean;
567
+ resourceUsage: ResourceUsage;
568
+ signalCode?: string;
569
+ exitedDueToTimeout?: true;
570
+ pid: number;
571
+ }
572
+
573
+ interface TerminalOptions {
574
+ cols?: number;
575
+ rows?: number;
576
+ name?: string;
577
+ data?: (terminal: Terminal, data: Uint8Array<ArrayBuffer>) => void;
578
+ /** Called when PTY stream closes (EOF or error). exitCode is PTY lifecycle status (0=EOF, 1=error), not subprocess exit code. */
579
+ exit?: (terminal: Terminal, exitCode: number, signal: string | null) => void;
580
+ drain?: (terminal: Terminal) => void;
581
+ }
582
+
583
+ interface Terminal extends AsyncDisposable {
584
+ readonly stdin: number;
585
+ readonly stdout: number;
586
+ readonly closed: boolean;
587
+ write(data: string | BufferSource): number;
588
+ resize(cols: number, rows: number): void;
589
+ setRawMode(enabled: boolean): void;
590
+ ref(): void;
591
+ unref(): void;
592
+ close(): void;
593
+ }
594
+
595
+ interface ResourceUsage {
596
+ contextSwitches: {
597
+ voluntary: number;
598
+ involuntary: number;
599
+ };
600
+
601
+ cpuTime: {
602
+ user: number;
603
+ system: number;
604
+ total: number;
605
+ };
606
+ maxRSS: number;
607
+
608
+ messages: {
609
+ sent: number;
610
+ received: number;
611
+ };
612
+ ops: {
613
+ in: number;
614
+ out: number;
615
+ };
616
+ shmSize: number;
617
+ signalCount: number;
618
+ swapCount: number;
619
+ }
620
+
621
+ type Signal =
622
+ | "SIGABRT"
623
+ | "SIGALRM"
624
+ | "SIGBUS"
625
+ | "SIGCHLD"
626
+ | "SIGCONT"
627
+ | "SIGFPE"
628
+ | "SIGHUP"
629
+ | "SIGILL"
630
+ | "SIGINT"
631
+ | "SIGIO"
632
+ | "SIGIOT"
633
+ | "SIGKILL"
634
+ | "SIGPIPE"
635
+ | "SIGPOLL"
636
+ | "SIGPROF"
637
+ | "SIGPWR"
638
+ | "SIGQUIT"
639
+ | "SIGSEGV"
640
+ | "SIGSTKFLT"
641
+ | "SIGSTOP"
642
+ | "SIGSYS"
643
+ | "SIGTERM"
644
+ | "SIGTRAP"
645
+ | "SIGTSTP"
646
+ | "SIGTTIN"
647
+ | "SIGTTOU"
648
+ | "SIGUNUSED"
649
+ | "SIGURG"
650
+ | "SIGUSR1"
651
+ | "SIGUSR2"
652
+ | "SIGVTALRM"
653
+ | "SIGWINCH"
654
+ | "SIGXCPU"
655
+ | "SIGXFSZ"
656
+ | "SIGBREAK"
657
+ | "SIGLOST"
658
+ | "SIGINFO";
659
+ ```