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
@@ -1,66 +0,0 @@
1
- ---
2
- name: Start a cluster of HTTP servers
3
- description: Run multiple HTTP servers concurrently via the "reusePort" option to share the same port across multiple processes
4
- ---
5
-
6
- To run multiple HTTP servers concurrently, use the `reusePort` option in `Bun.serve()` which shares the same port across multiple processes.
7
-
8
- This automatically load balances incoming requests across multiple instances of Bun.
9
-
10
- ```ts#server.ts
11
- import { serve } from "bun";
12
-
13
- const id = Math.random().toString(36).slice(2);
14
-
15
- serve({
16
- port: process.env.PORT || 8080,
17
- development: false,
18
-
19
- // Share the same port across multiple processes
20
- // This is the important part!
21
- reusePort: true,
22
-
23
- async fetch(request) {
24
- return new Response("Hello from Bun #" + id + "!\n");
25
- }
26
- });
27
- ```
28
-
29
- ---
30
-
31
- {% callout %}
32
- **Linux only** — Windows and macOS ignore the `reusePort` option. This is an operating system limitation with `SO_REUSEPORT`, unfortunately.
33
- {% /callout %}
34
-
35
- After saving the file, start your servers on the same port.
36
-
37
- Under the hood, this uses the Linux `SO_REUSEPORT` and `SO_REUSEADDR` socket options to ensure fair load balancing across multiple processes. [Learn more about `SO_REUSEPORT` and `SO_REUSEADDR`](https://lwn.net/Articles/542629/)
38
-
39
- ```ts#cluster.ts
40
- import { spawn } from "bun";
41
-
42
- const cpus = navigator.hardwareConcurrency; // Number of CPU cores
43
- const buns = new Array(cpus);
44
-
45
- for (let i = 0; i < cpus; i++) {
46
- buns[i] = spawn({
47
- cmd: ["bun", "./server.ts"],
48
- stdout: "inherit",
49
- stderr: "inherit",
50
- stdin: "inherit",
51
- });
52
- }
53
-
54
- function kill() {
55
- for (const bun of buns) {
56
- bun.kill();
57
- }
58
- }
59
-
60
- process.on("SIGINT", kill);
61
- process.on("exit", kill);
62
- ```
63
-
64
- ---
65
-
66
- Bun has also implemented the `node:cluster` module, but this is a faster, simple, and limited alternative.
@@ -1,33 +0,0 @@
1
- ---
2
- name: fetch with unix domain sockets in Bun
3
- ---
4
-
5
- In Bun, the `unix` option in `fetch()` lets you send HTTP requests over a [unix domain socket](https://en.wikipedia.org/wiki/Unix_domain_socket).
6
-
7
- ```ts
8
- const unix = "/var/run/docker.sock";
9
-
10
- const response = await fetch("http://localhost/info", { unix });
11
-
12
- const body = await response.json();
13
- console.log(body); // { ... }
14
- ```
15
-
16
- ---
17
-
18
- The `unix` option is a string that specifies the local file path to a unix domain socket. The `fetch()` function will use the socket to send the request to the server instead of using a TCP network connection. `https` is also supported by using the `https://` protocol in the URL instead of `http://`.
19
-
20
- To send a `POST` request to an API endpoint over a unix domain socket:
21
-
22
- ```ts
23
- const response = await fetch("https://hostname/a/path", {
24
- unix: "/var/run/path/to/unix.sock",
25
- method: "POST",
26
- body: JSON.stringify({ message: "Hello from Bun!" }),
27
- headers: {
28
- "Content-Type": "application/json",
29
- },
30
- });
31
-
32
- const body = await response.json();
33
- ```
@@ -1,24 +0,0 @@
1
- ---
2
- name: Send an HTTP request using fetch
3
- ---
4
-
5
- Bun implements the Web-standard [`fetch`](https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API) API for sending HTTP requests. To send a simple `GET` request to a URL:
6
-
7
- ```ts
8
- const response = await fetch("https://bun.com");
9
- const html = await response.text(); // HTML string
10
- ```
11
-
12
- ---
13
-
14
- To send a `POST` request to an API endpoint.
15
-
16
- ```ts
17
- const response = await fetch("https://bun.com/api", {
18
- method: "POST",
19
- body: JSON.stringify({ message: "Hello from Bun!" }),
20
- headers: { "Content-Type": "application/json" },
21
- });
22
-
23
- const body = await response.json();
24
- ```
@@ -1,94 +0,0 @@
1
- ---
2
- name: Upload files via HTTP using FormData
3
- ---
4
-
5
- To upload files via HTTP with Bun, use the [`FormData`](https://developer.mozilla.org/en-US/docs/Web/API/FormData) API. Let's start with a HTTP server that serves a simple HTML web form.
6
-
7
- ```ts#index.ts
8
- const server = Bun.serve({
9
- port: 4000,
10
- async fetch(req) {
11
- const url = new URL(req.url);
12
-
13
- // return index.html for root path
14
- if (url.pathname === "/")
15
- return new Response(Bun.file("index.html"), {
16
- headers: {
17
- "Content-Type": "text/html",
18
- },
19
- });
20
-
21
- return new Response("Not Found", { status: 404 });
22
- },
23
- });
24
-
25
- console.log(`Listening on http://localhost:${server.port}`);
26
- ```
27
-
28
- ---
29
-
30
- We can define our HTML form in another file, `index.html`.
31
-
32
- ```html#index.html
33
- <!DOCTYPE html>
34
- <html>
35
- <head>
36
- <meta charset="utf-8" />
37
- <title>Form</title>
38
- </head>
39
- <body>
40
- <form action="/action" method="post" enctype="multipart/form-data">
41
- <input type="text" name="name" placeholder="Name" />
42
- <input type="file" name="profilePicture" />
43
- <input type="submit" value="Submit" />
44
- </form>
45
- </body>
46
- </html>
47
- ```
48
-
49
- ---
50
-
51
- At this point, we can run the server and visit [`localhost:4000`](http://localhost:4000) to see our form.
52
-
53
- ```bash
54
- $ bun run index.ts
55
- Listening on http://localhost:4000
56
- ```
57
-
58
- ---
59
-
60
- Our form will send a `POST` request to the `/action` endpoint with the form data. Let's handle that request in our server.
61
-
62
- First we use the [`.formData()`](https://developer.mozilla.org/en-US/docs/Web/API/Request/formData) method on the incoming `Request` to asynchronously parse its contents to a `FormData` instance. Then we can use the [`.get()`](https://developer.mozilla.org/en-US/docs/Web/API/FormData/get) method to extract the value of the `name` and `profilePicture` fields. Here `name` corresponds to a `string` and `profilePicture` is a `Blob`.
63
-
64
- Finally, we write the `Blob` to disk using [`Bun.write()`](https://bun.com/docs/api/file-io#writing-files-bun-write).
65
-
66
- ```ts-diff#index.ts
67
- const server = Bun.serve({
68
- port: 4000,
69
- async fetch(req) {
70
- const url = new URL(req.url);
71
-
72
- // return index.html for root path
73
- if (url.pathname === "/")
74
- return new Response(Bun.file("index.html"), {
75
- headers: {
76
- "Content-Type": "text/html",
77
- },
78
- });
79
-
80
- + // parse formdata at /action
81
- + if (url.pathname === '/action') {
82
- + const formdata = await req.formData();
83
- + const name = formdata.get('name');
84
- + const profilePicture = formdata.get('profilePicture');
85
- + if (!profilePicture) throw new Error('Must upload a profile picture.');
86
- + // write profilePicture to disk
87
- + await Bun.write('profilePicture.png', profilePicture);
88
- + return new Response("Success");
89
- + }
90
-
91
- return new Response("Not Found", { status: 404 });
92
- },
93
- });
94
- ```
@@ -1,26 +0,0 @@
1
- ---
2
- name: Hot reload an HTTP server
3
- ---
4
-
5
- Bun supports the [`--hot`](https://bun.com/docs/runtime/hot#hot-mode) flag to run a file with hot reloading enabled. When any module or file changes, Bun re-runs the file.
6
-
7
- ```sh
8
- $ bun --hot run index.ts
9
- ```
10
-
11
- ---
12
-
13
- Bun detects when you are running an HTTP server with `Bun.serve()`. It reloads your fetch handler when source files change, _without_ restarting the `bun` process. This makes hot reloads nearly instantaneous.
14
-
15
- {% callout %}
16
- Note that this doesn't reload the page on your browser.
17
- {% /callout %}
18
-
19
- ```ts
20
- Bun.serve({
21
- port: 3000,
22
- fetch(req) {
23
- return new Response("Hello world");
24
- },
25
- });
26
- ```
@@ -1,24 +0,0 @@
1
- ---
2
- name: Proxy HTTP requests using fetch()
3
- ---
4
-
5
- In Bun, `fetch` supports sending requests through an HTTP or HTTPS proxy. This is useful on corporate networks or when you need to ensure a request is sent through a specific IP address.
6
-
7
- ```ts
8
- await fetch("https://example.com", {
9
- // The URL of the proxy server
10
- proxy: "https://username:password@proxy.example.com:8080",
11
- });
12
- ```
13
-
14
- ---
15
-
16
- The `proxy` option is a URL string that specifies the proxy server. It can include the username and password if the proxy requires authentication. It can be `http://` or `https://`.
17
-
18
- ---
19
-
20
- You can also set the `$HTTP_PROXY` or `$HTTPS_PROXY` environment variable to the proxy URL. This is useful when you want to use the same proxy for all requests.
21
-
22
- ```sh
23
- HTTPS_PROXY=https://username:password@proxy.example.com:8080 bun run index.ts
24
- ```
@@ -1,46 +0,0 @@
1
- ---
2
- name: Common HTTP server usage
3
- ---
4
-
5
- This starts an HTTP server listening on port `3000`. It demonstrates basic routing with a number of common responses and also handles POST data from standard forms or as JSON.
6
-
7
- See [`Bun.serve`](https://bun.com/docs/api/http) for details.
8
-
9
- ```ts
10
- const server = Bun.serve({
11
- async fetch(req) {
12
- const path = new URL(req.url).pathname;
13
-
14
- // respond with text/html
15
- if (path === "/") return new Response("Welcome to Bun!");
16
-
17
- // redirect
18
- if (path === "/abc") return Response.redirect("/source", 301);
19
-
20
- // send back a file (in this case, *this* file)
21
- if (path === "/source") return new Response(Bun.file(import.meta.path));
22
-
23
- // respond with JSON
24
- if (path === "/api") return Response.json({ some: "buns", for: "you" });
25
-
26
- // receive JSON data to a POST request
27
- if (req.method === "POST" && path === "/api/post") {
28
- const data = await req.json();
29
- console.log("Received JSON:", data);
30
- return Response.json({ success: true, data });
31
- }
32
-
33
- // receive POST data from a form
34
- if (req.method === "POST" && path === "/form") {
35
- const data = await req.formData();
36
- console.log(data.get("someField"));
37
- return new Response("Success");
38
- }
39
-
40
- // 404s
41
- return new Response("Page not found", { status: 404 });
42
- },
43
- });
44
-
45
- console.log(`Listening on ${server.url}`);
46
- ```
@@ -1,18 +0,0 @@
1
- ---
2
- name: Write a simple HTTP server
3
- ---
4
-
5
- This starts an HTTP server listening on port `3000`. It responds to all requests with a `Response` with status `200` and body `"Welcome to Bun!"`.
6
-
7
- See [`Bun.serve`](https://bun.com/docs/api/http) for details.
8
-
9
- ```ts
10
- const server = Bun.serve({
11
- port: 3000,
12
- fetch(request) {
13
- return new Response("Welcome to Bun!");
14
- },
15
- });
16
-
17
- console.log(`Listening on ${server.url}`);
18
- ```
@@ -1,48 +0,0 @@
1
- ---
2
- name: Stream a file as an HTTP Response
3
- ---
4
-
5
- This snippet reads a file from disk using [`Bun.file()`](https://bun.com/docs/api/file-io#reading-files-bun-file). This returns a `BunFile` instance, which can be passed directly into the `new Response` constructor.
6
-
7
- ```ts
8
- const path = "/path/to/file.txt";
9
- const file = Bun.file(path);
10
- const resp = new Response(file);
11
- ```
12
-
13
- ---
14
-
15
- The `Content-Type` is read from the file and automatically set on the `Response`.
16
-
17
- ```ts
18
- new Response(Bun.file("./package.json")).headers.get("Content-Type");
19
- // => application/json;charset=utf-8
20
-
21
- new Response(Bun.file("./test.txt")).headers.get("Content-Type");
22
- // => text/plain;charset=utf-8
23
-
24
- new Response(Bun.file("./index.tsx")).headers.get("Content-Type");
25
- // => text/javascript;charset=utf-8
26
-
27
- new Response(Bun.file("./img.png")).headers.get("Content-Type");
28
- // => image/png
29
- ```
30
-
31
- ---
32
-
33
- Putting it all together with [`Bun.serve()`](https://bun.com/docs/api/http#bun-serve).
34
-
35
- ```ts
36
- // static file server
37
- Bun.serve({
38
- async fetch(req) {
39
- const path = new URL(req.url).pathname;
40
- const file = Bun.file(path);
41
- return new Response(file);
42
- },
43
- });
44
- ```
45
-
46
- ---
47
-
48
- See [Docs > API > File I/O](https://bun.com/docs/api/file-io#writing-files-bun-write) for complete documentation of `Bun.write()`.
@@ -1,47 +0,0 @@
1
- ---
2
- name: Streaming HTTP Server with Async Iterators
3
- ---
4
-
5
- In Bun, [`Response`](https://developer.mozilla.org/en-US/docs/Web/API/Response) objects can accept an async generator function as their body. This allows you to stream data to the client as it becomes available, rather than waiting for the entire response to be ready.
6
-
7
- ```ts
8
- Bun.serve({
9
- port: 3000,
10
- fetch(req) {
11
- return new Response(
12
- // An async generator function
13
- async function* () {
14
- yield "Hello, ";
15
- await Bun.sleep(100);
16
- yield "world!";
17
-
18
- // you can also yield a TypedArray or Buffer
19
- yield new Uint8Array(["\n".charCodeAt(0)]);
20
- },
21
- { headers: { "Content-Type": "text/plain" } },
22
- );
23
- },
24
- });
25
- ```
26
-
27
- ---
28
-
29
- You can pass any async iterable directly to `Response`:
30
-
31
- ```ts
32
- Bun.serve({
33
- port: 3000,
34
- fetch(req) {
35
- return new Response(
36
- {
37
- [Symbol.asyncIterator]: async function* () {
38
- yield "Hello, ";
39
- await Bun.sleep(100);
40
- yield "world!";
41
- },
42
- },
43
- { headers: { "Content-Type": "text/plain" } },
44
- );
45
- },
46
- });
47
- ```
@@ -1,20 +0,0 @@
1
- ---
2
- name: Streaming HTTP Server with Node.js Streams
3
- ---
4
-
5
- In Bun, [`Response`](https://developer.mozilla.org/en-US/docs/Web/API/Response) objects can accept a Node.js [`Readable`](https://nodejs.org/api/stream.html#stream_readable_streams).
6
-
7
- This works because Bun's `Response` object allows any async iterable as its body. Node.js streams are async iterables, so you can pass them directly to `Response`.
8
-
9
- ```ts
10
- import { Readable } from "stream";
11
- import { serve } from "bun";
12
- serve({
13
- port: 3000,
14
- fetch(req) {
15
- return new Response(Readable.from(["Hello, ", "world!"]), {
16
- headers: { "Content-Type": "text/plain" },
17
- });
18
- },
19
- });
20
- ```
@@ -1,30 +0,0 @@
1
- ---
2
- name: Configure TLS on an HTTP server
3
- ---
4
-
5
- Set the `tls` key to configure TLS. Both `key` and `cert` are required. The `key` should be the contents of your private key; `cert` should be the contents of your issued certificate. Use [`Bun.file()`](https://bun.com/docs/api/file-io#reading-files-bun-file) to read the contents.
6
-
7
- ```ts
8
- const server = Bun.serve({
9
- fetch: request => new Response("Welcome to Bun!"),
10
- tls: {
11
- cert: Bun.file("cert.pem"),
12
- key: Bun.file("key.pem"),
13
- },
14
- });
15
- ```
16
-
17
- ---
18
-
19
- By default Bun trusts the default Mozilla-curated list of well-known root CAs. To override this list, pass an array of certificates as `ca`.
20
-
21
- ```ts
22
- const server = Bun.serve({
23
- fetch: request => new Response("Welcome to Bun!"),
24
- tls: {
25
- cert: Bun.file("cert.pem"),
26
- key: Bun.file("key.pem"),
27
- ca: [Bun.file("ca1.pem"), Bun.file("ca2.pem")],
28
- },
29
- });
30
- ```
@@ -1,26 +0,0 @@
1
- ---
2
- name: Add a development dependency
3
- ---
4
-
5
- To add an npm package as a development dependency, use `bun add --development`.
6
-
7
- ```sh
8
- $ bun add zod --dev
9
- $ bun add zod -d # shorthand
10
- ```
11
-
12
- ---
13
-
14
- This will add the package to `devDependencies` in `package.json`.
15
-
16
- ```json-diff
17
- {
18
- "devDependencies": {
19
- + "zod": "^3.0.0"
20
- }
21
- }
22
- ```
23
-
24
- ---
25
-
26
- See [Docs > Package manager](https://bun.com/docs/cli/install) for complete documentation of Bun's package manager.
@@ -1,36 +0,0 @@
1
- ---
2
- name: Add a Git dependency
3
- ---
4
-
5
- Bun supports directly adding GitHub repositories as dependencies of your project.
6
-
7
- ```sh
8
- $ bun add github:lodash/lodash
9
- ```
10
-
11
- ---
12
-
13
- This will add the following line to your `package.json`:
14
-
15
- ```json-diff#package.json
16
- {
17
- "dependencies": {
18
- + "lodash": "github:lodash/lodash"
19
- }
20
- }
21
- ```
22
-
23
- ---
24
-
25
- Bun supports a number of protocols for specifying Git dependencies.
26
-
27
- ```sh
28
- $ bun add git+https://github.com/lodash/lodash.git
29
- $ bun add git+ssh://github.com/lodash/lodash.git#4.17.21
30
- $ bun add git@github.com:lodash/lodash.git
31
- $ bun add github:colinhacks/zod
32
- ```
33
-
34
- ---
35
-
36
- See [Docs > Package manager](https://bun.com/docs/cli/install) for complete documentation of Bun's package manager.
@@ -1,25 +0,0 @@
1
- ---
2
- name: Add an optional dependency
3
- ---
4
-
5
- To add an npm package as an optional dependency, use the `--optional` flag.
6
-
7
- ```sh
8
- $ bun add zod --optional
9
- ```
10
-
11
- ---
12
-
13
- This will add the package to `optionalDependencies` in `package.json`.
14
-
15
- ```json-diff
16
- {
17
- "optionalDependencies": {
18
- + "zod": "^3.0.0"
19
- }
20
- }
21
- ```
22
-
23
- ---
24
-
25
- See [Docs > Package manager](https://bun.com/docs/cli/install) for complete documentation of Bun's package manager.
@@ -1,43 +0,0 @@
1
- ---
2
- name: Add a peer dependency
3
- ---
4
-
5
- To add an npm package as a peer dependency, use the `--peer` flag.
6
-
7
- ```sh
8
- $ bun add @types/bun --peer
9
- ```
10
-
11
- ---
12
-
13
- This will add the package to `peerDependencies` in `package.json`.
14
-
15
- ```json-diff
16
- {
17
- "peerDependencies": {
18
- + "@types/bun": "^1.3.2-canary.20251104T140728"
19
- }
20
- }
21
- ```
22
-
23
- ---
24
-
25
- Running `bun install` will install peer dependencies by default, unless marked optional in `peerDependenciesMeta`.
26
-
27
- ```json-diff
28
- {
29
- "peerDependencies": {
30
- "@types/bun": "^1.3.2-canary.20251104T140728"
31
- },
32
- "peerDependenciesMeta": {
33
- + "@types/bun": {
34
- + "optional": true
35
- + }
36
- }
37
-
38
- }
39
- ```
40
-
41
- ---
42
-
43
- See [Docs > Package manager](https://bun.com/docs/cli/install) for complete documentation of Bun's package manager.
@@ -1,33 +0,0 @@
1
- ---
2
- name: Add a tarball dependency
3
- ---
4
-
5
- Bun's package manager can install any publicly available tarball URL as a dependency of your project.
6
-
7
- ```sh
8
- $ bun add zod@https://registry.npmjs.org/zod/-/zod-3.21.4.tgz
9
- ```
10
-
11
- ---
12
-
13
- Running this command will download, extract, and install the tarball to your project's `node_modules` directory. It will also add the following line to your `package.json`:
14
-
15
- ```json-diff#package.json
16
- {
17
- "dependencies": {
18
- + "zod": "https://registry.npmjs.org/zod/-/zod-3.21.4.tgz"
19
- }
20
- }
21
- ```
22
-
23
- ---
24
-
25
- The package `"zod"` can now be imported as usual.
26
-
27
- ```ts
28
- import { z } from "zod";
29
- ```
30
-
31
- ---
32
-
33
- See [Docs > Package manager](https://bun.com/docs/cli/install) for complete documentation of Bun's package manager.