bun-types 1.3.2-canary.20251105T140650 → 1.3.2

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 (370) hide show
  1. package/bun.d.ts +102 -6
  2. package/docs/README.md +28 -0
  3. package/docs/bundler/bytecode.mdx +465 -0
  4. package/docs/bundler/{css.md → css.mdx} +97 -101
  5. package/docs/bundler/esbuild.mdx +253 -0
  6. package/docs/bundler/{executables.md → executables.mdx} +130 -221
  7. package/docs/bundler/fullstack.mdx +1064 -0
  8. package/docs/bundler/{hmr.md → hot-reloading.mdx} +74 -79
  9. package/docs/bundler/{html.md → html-static.mdx} +148 -111
  10. package/docs/bundler/index.mdx +1499 -0
  11. package/docs/bundler/loaders.mdx +356 -0
  12. package/docs/bundler/{macros.md → macros.mdx} +83 -84
  13. package/docs/bundler/minifier.mdx +1306 -0
  14. package/docs/bundler/plugins.mdx +411 -0
  15. package/docs/feedback.mdx +85 -0
  16. package/docs/guides/binary/{arraybuffer-to-array.md → arraybuffer-to-array.mdx} +3 -1
  17. package/docs/guides/binary/{arraybuffer-to-blob.md → arraybuffer-to-blob.mdx} +3 -1
  18. package/docs/guides/binary/{arraybuffer-to-buffer.md → arraybuffer-to-buffer.mdx} +3 -1
  19. package/docs/guides/binary/{arraybuffer-to-string.md → arraybuffer-to-string.mdx} +3 -1
  20. package/docs/guides/binary/{arraybuffer-to-typedarray.md → arraybuffer-to-typedarray.mdx} +3 -1
  21. package/docs/guides/binary/{blob-to-arraybuffer.md → blob-to-arraybuffer.mdx} +3 -1
  22. package/docs/guides/binary/{blob-to-dataview.md → blob-to-dataview.mdx} +3 -1
  23. package/docs/guides/binary/{blob-to-stream.md → blob-to-stream.mdx} +3 -1
  24. package/docs/guides/binary/{blob-to-string.md → blob-to-string.mdx} +3 -1
  25. package/docs/guides/binary/{blob-to-typedarray.md → blob-to-typedarray.mdx} +3 -1
  26. package/docs/guides/binary/{buffer-to-arraybuffer.md → buffer-to-arraybuffer.mdx} +3 -1
  27. package/docs/guides/binary/{buffer-to-blob.md → buffer-to-blob.mdx} +3 -1
  28. package/docs/guides/binary/{buffer-to-readablestream.md → buffer-to-readablestream.mdx} +3 -1
  29. package/docs/guides/binary/{buffer-to-string.md → buffer-to-string.mdx} +3 -1
  30. package/docs/guides/binary/{buffer-to-typedarray.md → buffer-to-typedarray.mdx} +3 -1
  31. package/docs/guides/binary/{dataview-to-string.md → dataview-to-string.mdx} +3 -1
  32. package/docs/guides/binary/{typedarray-to-arraybuffer.md → typedarray-to-arraybuffer.mdx} +3 -1
  33. package/docs/guides/binary/{typedarray-to-blob.md → typedarray-to-blob.mdx} +3 -1
  34. package/docs/guides/binary/{typedarray-to-buffer.md → typedarray-to-buffer.mdx} +3 -1
  35. package/docs/guides/binary/{typedarray-to-dataview.md → typedarray-to-dataview.mdx} +3 -1
  36. package/docs/guides/binary/{typedarray-to-readablestream.md → typedarray-to-readablestream.mdx} +3 -1
  37. package/docs/guides/binary/{typedarray-to-string.md → typedarray-to-string.mdx} +3 -1
  38. package/docs/guides/deployment/aws-lambda.mdx +204 -0
  39. package/docs/guides/deployment/digital-ocean.mdx +161 -0
  40. package/docs/guides/deployment/google-cloud-run.mdx +197 -0
  41. package/docs/guides/deployment/{railway.md → railway.mdx} +42 -54
  42. package/docs/guides/deployment/render.mdx +82 -0
  43. package/docs/guides/deployment/vercel.mdx +99 -0
  44. package/docs/guides/ecosystem/{astro.md → astro.mdx} +16 -6
  45. package/docs/guides/ecosystem/{discordjs.md → discordjs.mdx} +21 -18
  46. package/docs/guides/ecosystem/{docker.md → docker.mdx} +25 -14
  47. package/docs/guides/ecosystem/{drizzle.md → drizzle.mdx} +32 -22
  48. package/docs/guides/ecosystem/{edgedb.md → edgedb.mdx} +63 -34
  49. package/docs/guides/ecosystem/{elysia.md → elysia.mdx} +11 -11
  50. package/docs/guides/ecosystem/{express.md → express.mdx} +12 -9
  51. package/docs/guides/ecosystem/{hono.md → hono.mdx} +16 -8
  52. package/docs/guides/ecosystem/{mongoose.md → mongoose.mdx} +26 -21
  53. package/docs/guides/ecosystem/{neon-drizzle.md → neon-drizzle.mdx} +49 -35
  54. package/docs/guides/ecosystem/{neon-serverless-postgres.md → neon-serverless-postgres.mdx} +16 -11
  55. package/docs/guides/ecosystem/{nextjs.md → nextjs.mdx} +18 -10
  56. package/docs/guides/ecosystem/{nuxt.md → nuxt.mdx} +45 -11
  57. package/docs/guides/ecosystem/{pm2.md → pm2.mdx} +7 -9
  58. package/docs/guides/ecosystem/prisma-postgres.mdx +169 -0
  59. package/docs/guides/ecosystem/prisma.mdx +164 -0
  60. package/docs/guides/ecosystem/{qwik.md → qwik.mdx} +18 -11
  61. package/docs/guides/ecosystem/{react.md → react.mdx} +9 -7
  62. package/docs/guides/ecosystem/{remix.md → remix.mdx} +45 -26
  63. package/docs/guides/ecosystem/{sentry.md → sentry.mdx} +7 -5
  64. package/docs/guides/ecosystem/{solidstart.md → solidstart.mdx} +21 -13
  65. package/docs/guides/ecosystem/{ssr-react.md → ssr-react.mdx} +9 -11
  66. package/docs/guides/ecosystem/{stric.md → stric.mdx} +16 -17
  67. package/docs/guides/ecosystem/{sveltekit.md → sveltekit.mdx} +42 -29
  68. package/docs/guides/ecosystem/{systemd.md → systemd.mdx} +27 -26
  69. package/docs/guides/ecosystem/upstash.mdx +87 -0
  70. package/docs/guides/ecosystem/{vite.md → vite.mdx} +20 -14
  71. package/docs/guides/html-rewriter/{extract-links.md → extract-links.mdx} +11 -7
  72. package/docs/guides/html-rewriter/{extract-social-meta.md → extract-social-meta.mdx} +6 -2
  73. package/docs/guides/http/{cluster.md → cluster.mdx} +10 -7
  74. package/docs/guides/http/{fetch-unix.md → fetch-unix.mdx} +5 -3
  75. package/docs/guides/http/{fetch.md → fetch.mdx} +5 -3
  76. package/docs/guides/http/{file-uploads.md → file-uploads.mdx} +18 -15
  77. package/docs/guides/http/{hot.md → hot.mdx} +9 -7
  78. package/docs/guides/http/{proxy.md → proxy.mdx} +7 -5
  79. package/docs/guides/http/{server.md → server.mdx} +4 -2
  80. package/docs/guides/http/{simple.md → simple.mdx} +4 -2
  81. package/docs/guides/http/{stream-file.md → stream-file.mdx} +6 -4
  82. package/docs/guides/http/{stream-iterator.md → stream-iterator.mdx} +5 -3
  83. package/docs/guides/http/{stream-node-streams-in-bun.md → stream-node-streams-in-bun.mdx} +4 -2
  84. package/docs/guides/http/{tls.md → tls.mdx} +5 -3
  85. package/docs/guides/index.mdx +10 -0
  86. package/docs/guides/install/{add-dev.md → add-dev.mdx} +8 -6
  87. package/docs/guides/install/add-git.mdx +38 -0
  88. package/docs/guides/install/{add-optional.md → add-optional.mdx} +7 -5
  89. package/docs/guides/install/{add-peer.md → add-peer.mdx} +13 -11
  90. package/docs/guides/install/{add-tarball.md → add-tarball.mdx} +7 -5
  91. package/docs/guides/install/{add.md → add.mdx} +12 -10
  92. package/docs/guides/install/{azure-artifacts.md → azure-artifacts.mdx} +15 -12
  93. package/docs/guides/{runtime/cicd.md → install/cicd.mdx} +13 -13
  94. package/docs/guides/install/{custom-registry.md → custom-registry.mdx} +6 -4
  95. package/docs/guides/install/{from-npm-install-to-bun-install.md → from-npm-install-to-bun-install.mdx} +50 -34
  96. package/docs/guides/install/{git-diff-bun-lockfile.md → git-diff-bun-lockfile.mdx} +14 -11
  97. package/docs/guides/install/{jfrog-artifactory.md → jfrog-artifactory.mdx} +4 -4
  98. package/docs/guides/install/{npm-alias.md → npm-alias.mdx} +6 -4
  99. package/docs/guides/install/{registry-scope.md → registry-scope.mdx} +6 -4
  100. package/docs/guides/install/{trusted.md → trusted.mdx} +22 -18
  101. package/docs/guides/install/{workspaces.md → workspaces.mdx} +13 -13
  102. package/docs/guides/install/{yarnlock.md → yarnlock.mdx} +15 -9
  103. package/docs/guides/process/{argv.md → argv.mdx} +17 -9
  104. package/docs/guides/process/{ctrl-c.md → ctrl-c.mdx} +4 -2
  105. package/docs/guides/process/{ipc.md → ipc.mdx} +13 -10
  106. package/docs/guides/process/{nanoseconds.md → nanoseconds.mdx} +3 -1
  107. package/docs/guides/process/{os-signals.md → os-signals.mdx} +3 -1
  108. package/docs/guides/process/{spawn-stderr.md → spawn-stderr.mdx} +4 -1
  109. package/docs/guides/process/{spawn-stdout.md → spawn-stdout.mdx} +3 -1
  110. package/docs/guides/process/{spawn.md → spawn.mdx} +3 -1
  111. package/docs/guides/process/{stdin.md → stdin.mdx} +15 -7
  112. package/docs/guides/read-file/{arraybuffer.md → arraybuffer.mdx} +5 -3
  113. package/docs/guides/read-file/{buffer.md → buffer.mdx} +4 -2
  114. package/docs/guides/read-file/{exists.md → exists.mdx} +4 -2
  115. package/docs/guides/read-file/{json.md → json.mdx} +4 -2
  116. package/docs/guides/read-file/{mime.md → mime.mdx} +3 -1
  117. package/docs/guides/read-file/{stream.md → stream.mdx} +3 -1
  118. package/docs/guides/read-file/{string.md → string.mdx} +3 -1
  119. package/docs/guides/read-file/{uint8array.md → uint8array.mdx} +3 -1
  120. package/docs/guides/read-file/{watch.md → watch.mdx} +6 -8
  121. package/docs/guides/runtime/{build-time-constants.md → build-time-constants.mdx} +24 -22
  122. package/docs/guides/{install/cicd.md → runtime/cicd.mdx} +11 -7
  123. package/docs/guides/runtime/{codesign-macos-executable.md → codesign-macos-executable.mdx} +14 -9
  124. package/docs/guides/runtime/{define-constant.md → define-constant.mdx} +20 -16
  125. package/docs/guides/runtime/{delete-directory.md → delete-directory.mdx} +5 -3
  126. package/docs/guides/runtime/{delete-file.md → delete-file.mdx} +4 -2
  127. package/docs/guides/runtime/{heap-snapshot.md → heap-snapshot.mdx} +5 -3
  128. package/docs/guides/runtime/{import-html.md → import-html.mdx} +4 -2
  129. package/docs/guides/runtime/{import-json.md → import-json.mdx} +6 -4
  130. package/docs/guides/runtime/{import-toml.md → import-toml.mdx} +5 -3
  131. package/docs/guides/runtime/{import-yaml.md → import-yaml.mdx} +9 -7
  132. package/docs/guides/runtime/{read-env.md → read-env.mdx} +10 -5
  133. package/docs/guides/runtime/{set-env.md → set-env.mdx} +14 -10
  134. package/docs/guides/runtime/{shell.md → shell.mdx} +6 -4
  135. package/docs/guides/runtime/{timezone.md → timezone.mdx} +10 -7
  136. package/docs/guides/runtime/{tsconfig-paths.md → tsconfig-paths.mdx} +5 -3
  137. package/docs/guides/runtime/{typescript.md → typescript.mdx} +8 -6
  138. package/docs/guides/runtime/{vscode-debugger.md → vscode-debugger.mdx} +12 -11
  139. package/docs/guides/runtime/{web-debugger.md → web-debugger.mdx} +39 -18
  140. package/docs/guides/streams/{node-readable-to-arraybuffer.md → node-readable-to-arraybuffer.mdx} +3 -1
  141. package/docs/guides/streams/{node-readable-to-blob.md → node-readable-to-blob.mdx} +3 -1
  142. package/docs/guides/streams/{node-readable-to-json.md → node-readable-to-json.mdx} +3 -1
  143. package/docs/guides/streams/{node-readable-to-string.md → node-readable-to-string.mdx} +3 -1
  144. package/docs/guides/streams/{node-readable-to-uint8array.md → node-readable-to-uint8array.mdx} +3 -1
  145. package/docs/guides/streams/{to-array.md → to-array.mdx} +3 -1
  146. package/docs/guides/streams/{to-arraybuffer.md → to-arraybuffer.mdx} +3 -1
  147. package/docs/guides/streams/{to-blob.md → to-blob.mdx} +3 -1
  148. package/docs/guides/streams/{to-buffer.md → to-buffer.mdx} +3 -1
  149. package/docs/guides/streams/{to-json.md → to-json.mdx} +4 -2
  150. package/docs/guides/streams/{to-string.md → to-string.mdx} +3 -1
  151. package/docs/guides/streams/{to-typedarray.md → to-typedarray.mdx} +3 -1
  152. package/docs/guides/test/{bail.md → bail.mdx} +7 -5
  153. package/docs/guides/test/{coverage-threshold.md → coverage-threshold.mdx} +14 -7
  154. package/docs/guides/test/{coverage.md → coverage.mdx} +9 -4
  155. package/docs/guides/test/{happy-dom.md → happy-dom.mdx} +13 -8
  156. package/docs/guides/test/{migrate-from-jest.md → migrate-from-jest.mdx} +19 -37
  157. package/docs/guides/test/{mock-clock.md → mock-clock.mdx} +3 -1
  158. package/docs/guides/test/{mock-functions.md → mock-functions.mdx} +7 -5
  159. package/docs/guides/test/{rerun-each.md → rerun-each.mdx} +5 -3
  160. package/docs/guides/test/{run-tests.md → run-tests.mdx} +16 -11
  161. package/docs/guides/test/{skip-tests.md → skip-tests.mdx} +8 -4
  162. package/docs/guides/test/{snapshot.md → snapshot.mdx} +20 -13
  163. package/docs/guides/test/spy-on.mdx +49 -0
  164. package/docs/guides/test/{svelte-test.md → svelte-test.mdx} +16 -23
  165. package/docs/guides/test/{testing-library.md → testing-library.mdx} +18 -17
  166. package/docs/guides/test/{timeout.md → timeout.mdx} +5 -3
  167. package/docs/guides/test/{todo-tests.md → todo-tests.mdx} +13 -6
  168. package/docs/guides/test/{update-snapshots.md → update-snapshots.mdx} +9 -6
  169. package/docs/guides/test/{watch-mode.md → watch-mode.mdx} +9 -4
  170. package/docs/guides/util/{base64.md → base64.mdx} +3 -1
  171. package/docs/guides/util/{deep-equals.md → deep-equals.mdx} +5 -3
  172. package/docs/guides/util/{deflate.md → deflate.mdx} +3 -1
  173. package/docs/guides/util/{detect-bun.md → detect-bun.mdx} +3 -1
  174. package/docs/guides/util/{entrypoint.md → entrypoint.mdx} +4 -2
  175. package/docs/guides/util/{escape-html.md → escape-html.mdx} +3 -1
  176. package/docs/guides/util/{file-url-to-path.md → file-url-to-path.mdx} +3 -1
  177. package/docs/guides/util/{gzip.md → gzip.mdx} +3 -1
  178. package/docs/guides/util/{hash-a-password.md → hash-a-password.mdx} +3 -1
  179. package/docs/guides/util/{import-meta-dir.md → import-meta-dir.mdx} +4 -2
  180. package/docs/guides/util/{import-meta-file.md → import-meta-file.mdx} +4 -2
  181. package/docs/guides/util/{import-meta-path.md → import-meta-path.mdx} +4 -2
  182. package/docs/guides/util/{javascript-uuid.md → javascript-uuid.mdx} +3 -1
  183. package/docs/guides/util/{main.md → main.mdx} +19 -8
  184. package/docs/guides/util/{path-to-file-url.md → path-to-file-url.mdx} +3 -1
  185. package/docs/guides/util/{sleep.md → sleep.mdx} +3 -1
  186. package/docs/guides/util/{version.md → version.mdx} +6 -4
  187. package/docs/guides/util/{which-path-to-executable-bin.md → which-path-to-executable-bin.mdx} +4 -2
  188. package/docs/guides/websocket/{compression.md → compression.mdx} +5 -3
  189. package/docs/guides/websocket/{context.md → context.mdx} +9 -12
  190. package/docs/guides/websocket/{pubsub.md → pubsub.mdx} +5 -6
  191. package/docs/guides/websocket/{simple.md → simple.mdx} +5 -3
  192. package/docs/guides/write-file/{append.md → append.mdx} +3 -1
  193. package/docs/guides/write-file/{basic.md → basic.mdx} +3 -1
  194. package/docs/guides/write-file/{blob.md → blob.mdx} +3 -1
  195. package/docs/guides/write-file/{cat.md → cat.mdx} +4 -2
  196. package/docs/guides/write-file/{file-cp.md → file-cp.mdx} +3 -1
  197. package/docs/guides/write-file/{filesink.md → filesink.mdx} +3 -1
  198. package/docs/guides/write-file/{response.md → response.mdx} +3 -1
  199. package/docs/guides/write-file/{stdout.md → stdout.mdx} +3 -1
  200. package/docs/guides/write-file/{stream.md → stream.mdx} +3 -1
  201. package/docs/guides/write-file/{unlink.md → unlink.mdx} +3 -1
  202. package/docs/{index.md → index.mdx} +97 -41
  203. package/docs/installation.mdx +365 -0
  204. package/docs/{cli/bunx.md → pm/bunx.mdx} +25 -31
  205. package/docs/{install/catalogs.md → pm/catalogs.mdx} +18 -24
  206. package/docs/{cli/add.md → pm/cli/add.mdx} +61 -55
  207. package/docs/{install/audit.md → pm/cli/audit.mdx} +11 -8
  208. package/docs/{cli/install.md → pm/cli/install.mdx} +208 -81
  209. package/docs/{cli/link.md → pm/cli/link.mdx} +27 -19
  210. package/docs/{cli/outdated.md → pm/cli/outdated.mdx} +119 -12
  211. package/docs/{install/patch.md → pm/cli/patch.mdx} +25 -15
  212. package/docs/{cli/pm.md → pm/cli/pm.mdx} +96 -62
  213. package/docs/{cli/publish.md → pm/cli/publish.mdx} +38 -35
  214. package/docs/pm/cli/remove.mdx +16 -0
  215. package/docs/{cli/update.md → pm/cli/update.mdx} +26 -15
  216. package/docs/{cli/why.md → pm/cli/why.mdx} +27 -10
  217. package/docs/{cli/filter.md → pm/filter.mdx} +26 -14
  218. package/docs/{install/cache.md → pm/global-cache.mdx} +25 -12
  219. package/docs/{install/isolated.md → pm/isolated-installs.mdx} +32 -24
  220. package/docs/{install/lifecycle.md → pm/lifecycle.mdx} +20 -9
  221. package/docs/{install/lockfile.md → pm/lockfile.mdx} +18 -12
  222. package/docs/{install/npmrc.md → pm/npmrc.mdx} +30 -24
  223. package/docs/{install/overrides.md → pm/overrides.mdx} +47 -37
  224. package/docs/{install/registries.md → pm/scopes-registries.mdx} +8 -3
  225. package/docs/{install/security-scanner-api.md → pm/security-scanner-api.mdx} +22 -8
  226. package/docs/{install/workspaces.md → pm/workspaces.mdx} +17 -22
  227. package/docs/project/{benchmarking.md → benchmarking.mdx} +26 -11
  228. package/docs/project/{bindgen.md → bindgen.mdx} +12 -14
  229. package/docs/project/{building-windows.md → building-windows.mdx} +18 -47
  230. package/docs/project/{contributing.md → contributing.mdx} +56 -60
  231. package/docs/project/feedback.mdx +20 -0
  232. package/docs/project/license.mdx +78 -0
  233. package/docs/project/roadmap.mdx +8 -0
  234. package/docs/quickstart.mdx +240 -0
  235. package/docs/runtime/{autoimport.md → auto-install.mdx} +34 -31
  236. package/docs/{api/binary-data.md → runtime/binary-data.mdx} +77 -269
  237. package/docs/runtime/bun-apis.mdx +59 -0
  238. package/docs/runtime/{bunfig.md → bunfig.mdx} +95 -225
  239. package/docs/{api/cc.md → runtime/c-compiler.mdx} +16 -9
  240. package/docs/{api/spawn.md → runtime/child-process.mdx} +69 -119
  241. package/docs/{api/color.md → runtime/color.mdx} +6 -1
  242. package/docs/{api/console.md → runtime/console.mdx} +17 -7
  243. package/docs/{api/cookie.md → runtime/cookies.mdx} +24 -19
  244. package/docs/runtime/{debugger.md → debugger.mdx} +61 -51
  245. package/docs/runtime/environment-variables.mdx +214 -0
  246. package/docs/{api/ffi.md → runtime/ffi.mdx} +53 -45
  247. package/docs/{api/file-io.md → runtime/file-io.mdx} +41 -101
  248. package/docs/{api/file-system-router.md → runtime/file-system-router.mdx} +8 -2
  249. package/docs/{bundler/loaders.md → runtime/file-types.mdx} +56 -112
  250. package/docs/{api/glob.md → runtime/glob.mdx} +4 -1
  251. package/docs/runtime/globals.mdx +72 -0
  252. package/docs/{api/hashing.md → runtime/hashing.mdx} +18 -22
  253. package/docs/{api/html-rewriter.md → runtime/html-rewriter.mdx} +36 -30
  254. package/docs/runtime/http/cookies.mdx +79 -0
  255. package/docs/runtime/http/error-handling.mdx +40 -0
  256. package/docs/runtime/http/metrics.mdx +36 -0
  257. package/docs/runtime/http/routing.mdx +289 -0
  258. package/docs/runtime/http/server.mdx +647 -0
  259. package/docs/runtime/http/tls.mdx +101 -0
  260. package/docs/{api/websockets.md → runtime/http/websockets.mdx} +62 -231
  261. package/docs/{cli/run.md → runtime/index.mdx} +70 -108
  262. package/docs/runtime/jsx.mdx +115 -0
  263. package/docs/runtime/{modules.md → module-resolution.mdx} +83 -61
  264. package/docs/{api/dns.md → runtime/networking/dns.mdx} +23 -22
  265. package/docs/{api/fetch.md → runtime/networking/fetch.mdx} +10 -5
  266. package/docs/{api/tcp.md → runtime/networking/tcp.mdx} +59 -41
  267. package/docs/{api/udp.md → runtime/networking/udp.mdx} +14 -8
  268. package/docs/{api/node-api.md → runtime/node-api.mdx} +5 -0
  269. package/docs/runtime/{nodejs-apis.md → nodejs-compat.mdx} +9 -4
  270. package/docs/{bundler/plugins.md → runtime/plugins.mdx} +17 -61
  271. package/docs/{api/redis.md → runtime/redis.mdx} +65 -80
  272. package/docs/{api/s3.md → runtime/s3.mdx} +79 -66
  273. package/docs/{api/secrets.md → runtime/secrets.mdx} +27 -10
  274. package/docs/{api/semver.md → runtime/semver.mdx} +9 -4
  275. package/docs/runtime/{shell.md → shell.mdx} +52 -20
  276. package/docs/{api/sql.md → runtime/sql.mdx} +129 -99
  277. package/docs/{api/sqlite.md → runtime/sqlite.mdx} +162 -157
  278. package/docs/{api/streams.md → runtime/streams.mdx} +33 -31
  279. package/docs/{cli/bun-create.md → runtime/templating/create.mdx} +74 -143
  280. package/docs/{cli/init.md → runtime/templating/init.mdx} +24 -51
  281. package/docs/{api/transpiler.md → runtime/transpiler.mdx} +50 -38
  282. package/docs/{typescript.md → runtime/typescript.mdx} +7 -2
  283. package/docs/{api/utils.md → runtime/utils.mdx} +81 -50
  284. package/docs/runtime/{hot.md → watch-mode.mdx} +53 -37
  285. package/docs/runtime/web-apis.mdx +29 -0
  286. package/docs/{api/workers.md → runtime/workers.mdx} +28 -22
  287. package/docs/{api/yaml.md → runtime/yaml.mdx} +33 -232
  288. package/docs/snippets/cli/add.mdx +166 -0
  289. package/docs/snippets/cli/build.mdx +196 -0
  290. package/docs/snippets/cli/feedback.mdx +17 -0
  291. package/docs/snippets/cli/init.mdx +84 -0
  292. package/docs/snippets/cli/install.mdx +173 -0
  293. package/docs/snippets/cli/link.mdx +163 -0
  294. package/docs/snippets/cli/outdated.mdx +140 -0
  295. package/docs/snippets/cli/patch.mdx +171 -0
  296. package/docs/snippets/cli/publish.mdx +198 -0
  297. package/docs/snippets/cli/remove.mdx +146 -0
  298. package/docs/snippets/cli/run.mdx +293 -0
  299. package/docs/snippets/cli/test.mdx +100 -0
  300. package/docs/snippets/cli/update.mdx +144 -0
  301. package/docs/snippets/product-card.mdx +32 -0
  302. package/docs/snippets/product-tiles.mdx +94 -0
  303. package/docs/test/code-coverage.mdx +409 -0
  304. package/docs/test/configuration.mdx +467 -0
  305. package/docs/test/{time.md → dates-times.mdx} +23 -20
  306. package/docs/test/{discovery.md → discovery.mdx} +15 -10
  307. package/docs/test/dom.mdx +226 -0
  308. package/docs/{cli/test.md → test/index.mdx} +77 -94
  309. package/docs/test/lifecycle.mdx +348 -0
  310. package/docs/test/mocks.mdx +637 -0
  311. package/docs/test/{reporters.md → reporters.mdx} +15 -15
  312. package/docs/test/runtime-behavior.mdx +342 -0
  313. package/docs/test/snapshots.mdx +434 -0
  314. package/docs/test/writing-tests.mdx +635 -0
  315. package/docs/typescript.mdx +54 -0
  316. package/package.json +8 -6
  317. package/test.d.ts +2 -2
  318. package/docs/api/file.md +0 -19
  319. package/docs/api/globals.md +0 -387
  320. package/docs/api/http.md +0 -1408
  321. package/docs/api/import-meta.md +0 -69
  322. package/docs/benchmarks.md +0 -120
  323. package/docs/bun-flavored-toml.md +0 -42
  324. package/docs/bundler/css_modules.md +0 -145
  325. package/docs/bundler/fullstack.md +0 -418
  326. package/docs/bundler/index.md +0 -1735
  327. package/docs/bundler/intro.md +0 -75
  328. package/docs/bundler/vs-esbuild.md +0 -1127
  329. package/docs/cli/bun-completions.md +0 -3
  330. package/docs/cli/bun-install.md +0 -349
  331. package/docs/cli/bun-upgrade.md +0 -39
  332. package/docs/cli/info.md +0 -65
  333. package/docs/cli/patch-commit.md +0 -11
  334. package/docs/cli/remove.md +0 -7
  335. package/docs/cli/unlink.md +0 -9
  336. package/docs/contributing/upgrading-webkit.md +0 -57
  337. package/docs/ecosystem/elysia.md +0 -24
  338. package/docs/ecosystem/express.md +0 -37
  339. package/docs/ecosystem/hono.md +0 -18
  340. package/docs/ecosystem/react.md +0 -65
  341. package/docs/ecosystem/stric.md +0 -38
  342. package/docs/guides/ecosystem/prisma.md +0 -141
  343. package/docs/guides/ecosystem/render.md +0 -79
  344. package/docs/guides/install/add-git.md +0 -36
  345. package/docs/guides/test/spy-on.md +0 -46
  346. package/docs/install/index.md +0 -248
  347. package/docs/installation.md +0 -327
  348. package/docs/project/asan.md +0 -124
  349. package/docs/project/internals/build-process-for-ci.md +0 -75
  350. package/docs/project/licensing.md +0 -73
  351. package/docs/project/roadmap.md +0 -87
  352. package/docs/quickstart.md +0 -157
  353. package/docs/runtime/bun-apis.md +0 -207
  354. package/docs/runtime/env.md +0 -253
  355. package/docs/runtime/index.md +0 -312
  356. package/docs/runtime/jsx.md +0 -385
  357. package/docs/runtime/loaders.md +0 -130
  358. package/docs/runtime/plugins.md +0 -561
  359. package/docs/runtime/typescript.md +0 -139
  360. package/docs/runtime/web-apis.md +0 -128
  361. package/docs/test/configuration.md +0 -154
  362. package/docs/test/coverage.md +0 -142
  363. package/docs/test/dom.md +0 -75
  364. package/docs/test/examples/concurrent-test-glob.md +0 -132
  365. package/docs/test/hot.md +0 -15
  366. package/docs/test/lifecycle.md +0 -81
  367. package/docs/test/mocks.md +0 -313
  368. package/docs/test/runtime-behavior.md +0 -95
  369. package/docs/test/snapshots.md +0 -68
  370. package/docs/test/writing.md +0 -825
@@ -1,11 +1,16 @@
1
1
  ---
2
- name: Build an app with SvelteKit and Bun
2
+ title: Build an app with SvelteKit and Bun
3
+ sidebarTitle: "SvelteKit with Bun"
4
+ mode: center
3
5
  ---
4
6
 
5
7
  Use `sv create my-app` to create a SvelteKit project with SvelteKit CLI. Answer the prompts to select a template and set up your development environment.
6
8
 
7
- ```sh
8
- $ bunx sv create my-app
9
+ ```sh terminal icon="terminal"
10
+ bunx sv create my-app
11
+ ```
12
+
13
+ ```txt
9
14
  ┌ Welcome to the Svelte CLI! (v0.5.7)
10
15
 
11
16
  ◇ Which template would you like?
@@ -47,9 +52,12 @@ Then start the development server with `bun --bun run dev`.
47
52
 
48
53
  To run the dev server with Node.js instead of Bun, you can omit the `--bun` flag.
49
54
 
50
- ```sh
51
- $ cd my-app
52
- $ bun --bun run dev
55
+ ```sh terminal icon="terminal"
56
+ cd my-app
57
+ bun --bun run dev
58
+ ```
59
+
60
+ ```txt
53
61
  $ vite dev
54
62
  Forced re-optimization of dependencies
55
63
 
@@ -64,7 +72,9 @@ $ bun --bun run dev
64
72
 
65
73
  Visit [http://localhost:5173](http://localhost:5173/) in a browser to see the template app.
66
74
 
67
- {% image src="https://github.com/oven-sh/bun/assets/3084745/7c76eae8-78f9-44fa-9f15-1bd3ca1a47c0" /%}
75
+ <Frame>
76
+ ![SvelteKit app running](https://github.com/oven-sh/bun/assets/3084745/7c76eae8-78f9-44fa-9f15-1bd3ca1a47c0)
77
+ </Frame>
68
78
 
69
79
  ---
70
80
 
@@ -78,34 +88,37 @@ To build for production, you'll need to add the right SvelteKit adapter. Current
78
88
 
79
89
  Now, make the following changes to your `svelte.config.js`.
80
90
 
81
- ```ts-diff
82
- - import adapter from "@sveltejs/adapter-auto";
83
- + import adapter from "svelte-adapter-bun";
84
- import { vitePreprocess } from '@sveltejs/vite-plugin-svelte';
85
-
86
- /** @type {import('@sveltejs/kit').Config} */
87
- const config = {
88
- // Consult https://svelte.dev/docs/kit/integrations#preprocessors
89
- // for more information about preprocessors
90
- preprocess: vitePreprocess(),
91
-
92
- kit: {
93
- // adapter-auto only supports some environments, see https://svelte.dev/docs/kit/adapter-auto for a list.
94
- // If your environment is not supported, or you settled on a specific environment, switch out the adapter.
95
- // See https://svelte.dev/docs/kit/adapters for more information about adapters.
96
- adapter: adapter()
97
- }
98
- };
99
-
100
- export default config;
91
+ ```ts svelte.config.js icon="file-code"
92
+ import adapter from "@sveltejs/adapter-auto"; // [!code --]
93
+ import adapter from "svelte-adapter-bun"; // [!code ++]
94
+ import { vitePreprocess } from "@sveltejs/vite-plugin-svelte";
95
+
96
+ /** @type {import('@sveltejs/kit').Config} */
97
+ const config = {
98
+ // Consult https://svelte.dev/docs/kit/integrations#preprocessors
99
+ // for more information about preprocessors
100
+ preprocess: vitePreprocess(),
101
+
102
+ kit: {
103
+ // adapter-auto only supports some environments, see https://svelte.dev/docs/kit/adapter-auto for a list.
104
+ // If your environment is not supported, or you settled on a specific environment, switch out the adapter.
105
+ // See https://svelte.dev/docs/kit/adapters for more information about adapters.
106
+ adapter: adapter(),
107
+ },
108
+ };
109
+
110
+ export default config;
101
111
  ```
102
112
 
103
113
  ---
104
114
 
105
115
  To build a production bundle:
106
116
 
107
- ```sh
108
- $ bun --bun run build
117
+ ```sh terminal icon="terminal"
118
+ bun --bun run build
119
+ ```
120
+
121
+ ```txt
109
122
  $ vite build
110
123
  vite v5.4.10 building SSR bundle for production...
111
124
  "confetti" is imported from external module "@neoconfetti/svelte" but never used in "src/routes/sverdle/+page.svelte".
@@ -1,20 +1,18 @@
1
1
  ---
2
- name: Run Bun as a daemon with systemd
2
+ title: Run Bun as a daemon with systemd
3
+ sidebarTitle: "systemd with Bun"
4
+ mode: center
3
5
  ---
4
6
 
5
7
  [systemd](https://systemd.io) is an init system and service manager for Linux operating systems that manages the startup and control of system processes and services.
6
8
 
7
- <!-- systemd provides aggressive parallelization capabilities, uses socket and D-Bus activation for starting services, offers on-demand starting of daemons, keeps track of processes using Linux control groups, maintains mount and auto mount points, and implements an elaborate transactional dependency-based service control logic. systemd supports SysV and LSB init scripts and works as a replacement for sysvinit. -->
8
-
9
- <!-- Other parts include a logging daemon, utilities to control basic system configuration like the hostname, date, locale, maintain a list of logged-in users and running containers and virtual machines, system accounts, runtime directories and settings, and daemons to manage simple network configuration, network time synchronization, log forwarding, and name resolution. -->
10
-
11
9
  ---
12
10
 
13
11
  To run a Bun application as a daemon using **systemd** you'll need to create a _service file_ in `/lib/systemd/system/`.
14
12
 
15
- ```sh
16
- $ cd /lib/systemd/system
17
- $ touch my-app.service
13
+ ```sh terminal icon="terminal"
14
+ cd /lib/systemd/system
15
+ touch my-app.service
18
16
  ```
19
17
 
20
18
  ---
@@ -23,7 +21,7 @@ Here is a typical service file that runs an application on system start. You can
23
21
 
24
22
  Refer to the [systemd documentation](https://www.freedesktop.org/software/systemd/man/systemd.service.html) for more information on each setting.
25
23
 
26
- ```ini#my-app.service
24
+ ```ini my-app.service icon="file-code"
27
25
  [Unit]
28
26
  # describe the app
29
27
  Description=My App
@@ -54,32 +52,35 @@ WantedBy=multi-user.target
54
52
 
55
53
  If your application starts a webserver, note that non-`root` users are not able to listen on ports 80 or 443 by default. To permanently allow Bun to listen on these ports when executed by a non-`root` user, use the following command. This step isn't necessary when running as `root`.
56
54
 
57
- ```bash
58
- $ sudo setcap CAP_NET_BIND_SERVICE=+eip ~/.bun/bin/bun
55
+ ```bash terminal icon="terminal"
56
+ setcap CAP_NET_BIND_SERVICE=+eip ~/.bun/bin/bun
59
57
  ```
60
58
 
61
59
  ---
62
60
 
63
61
  With the service file configured, you can now _enable_ the service. Once enabled, it will start automatically on reboot. This requires `sudo` permissions.
64
62
 
65
- ```bash
66
- $ sudo systemctl enable my-app
63
+ ```bash terminal icon="terminal"
64
+ systemctl enable my-app
67
65
  ```
68
66
 
69
67
  ---
70
68
 
71
69
  To start the service without rebooting, you can manually _start_ it.
72
70
 
73
- ```bash
74
- $ sudo systemctl start my-app
71
+ ```bash terminal icon="terminal"
72
+ systemctl start my-app
75
73
  ```
76
74
 
77
75
  ---
78
76
 
79
77
  Check the status of your application with `systemctl status`. If you've started your app successfully, you should see something like this:
80
78
 
81
- ```bash
82
- $ sudo systemctl status my-app
79
+ ```bash terminal icon="terminal"
80
+ systemctl status my-app
81
+ ```
82
+
83
+ ```txt
83
84
  ● my-app.service - My App
84
85
  Loaded: loaded (/lib/systemd/system/my-app.service; enabled; preset: enabled)
85
86
  Active: active (running) since Thu 2023-10-12 11:34:08 UTC; 1h 8min ago
@@ -95,19 +96,19 @@ $ sudo systemctl status my-app
95
96
 
96
97
  To update the service, edit the contents of the service file, then reload the daemon.
97
98
 
98
- ```bash
99
- $ sudo systemctl daemon-reload
99
+ ```bash terminal icon="terminal"
100
+ systemctl daemon-reload
100
101
  ```
101
102
 
102
103
  ---
103
104
 
104
105
  For a complete guide on the service unit configuration, you can check [this page](https://www.freedesktop.org/software/systemd/man/systemd.service.html). Or refer to this cheatsheet of common commands:
105
106
 
106
- ```bash
107
- $ sudo systemctl daemon-reload # tell systemd that some files got changed
108
- $ sudo systemctl enable my-app # enable the app (to allow auto-start)
109
- $ sudo systemctl disable my-app # disable the app (turns off auto-start)
110
- $ sudo systemctl start my-app # start the app if is stopped
111
- $ sudo systemctl stop my-app # stop the app
112
- $ sudo systemctl restart my-app # restart the app
107
+ ```bash terminal icon="terminal"
108
+ systemctl daemon-reload # tell systemd that some files got changed
109
+ systemctl enable my-app # enable the app (to allow auto-start)
110
+ systemctl disable my-app # disable the app (turns off auto-start)
111
+ systemctl start my-app # start the app if is stopped
112
+ systemctl stop my-app # stop the app
113
+ systemctl restart my-app # restart the app
113
114
  ```
@@ -0,0 +1,87 @@
1
+ ---
2
+ title: Bun Redis with Upstash
3
+ sidebarTitle: Upstash with Bun
4
+ mode: center
5
+ ---
6
+
7
+ [Upstash](https://upstash.com/) is a fully managed Redis database as a service. Upstash works with the Redis® API, which means you can use Bun's native Redis client to connect to your Upstash database.
8
+
9
+ <Note>TLS is enabled by default for all Upstash Redis databases.</Note>
10
+
11
+ ---
12
+
13
+ <Steps>
14
+ <Step title="Create a new project">
15
+ Create a new project by running `bun init`:
16
+
17
+ ```sh terminal icon="terminal"
18
+ bun init bun-upstash-redis
19
+ cd bun-upstash-redis
20
+ ```
21
+ </Step>
22
+ <Step title="Create an Upstash Redis database">
23
+ Go to the [Upstash dashboard](https://console.upstash.com/) and create a new Redis database. After completing the [getting started guide](https://upstash.com/docs/redis/overall/getstarted), you'll see your database page with connection information.
24
+
25
+ The database page displays two connection methods; HTTP and TLS. For Bun's Redis client, you need the **TLS** connection details. This URL starts with `rediss://`.
26
+
27
+ <Frame>
28
+ ![Upstash Redis database page](/images/guides/upstash-1.png)
29
+ </Frame>
30
+
31
+ </Step>
32
+ <Step title="Connect using Bun's Redis client">
33
+ You can connect to Upstash by setting environment variables with Bun's default `redis` client.
34
+
35
+ Set the `REDIS_URL` environment variable in your `.env` file using the Redis endpoint (not the REST URL):
36
+
37
+ ```env .env icon="settings"
38
+ REDIS_URL=rediss://********@********.upstash.io:6379
39
+ ```
40
+
41
+ Bun's Redis client reads connection information from `REDIS_URL` by default:
42
+
43
+ ```ts index.ts icon="/icons/typescript.svg"
44
+ import { redis } from "bun";
45
+
46
+ // Reads from process.env.REDIS_URL automatically
47
+ await redis.set("counter", "0"); // [!code ++]
48
+ ```
49
+
50
+ Alternatively, you can create a custom client using `RedisClient`:
51
+
52
+ ```ts index.ts icon="/icons/typescript.svg"
53
+ import { RedisClient } from "bun";
54
+
55
+ const redis = new RedisClient(process.env.REDIS_URL); // [!code ++]
56
+ ```
57
+
58
+ </Step>
59
+ <Step title="Use the Redis client">
60
+ You can now use the Redis client to interact with your Upstash Redis database:
61
+
62
+ ```ts index.ts icon="/icons/typescript.svg"
63
+ import { redis } from "bun";
64
+
65
+ // Get a value
66
+ let counter = await redis.get("counter");
67
+
68
+ // Set a value if it doesn't exist
69
+ if (!counter) {
70
+ await redis.set("counter", "0");
71
+ }
72
+
73
+ // Increment the counter
74
+ await redis.incr("counter");
75
+
76
+ // Get the updated value
77
+ counter = await redis.get("counter");
78
+ console.log(counter);
79
+ ```
80
+ ```txt
81
+ 1
82
+ ```
83
+
84
+ The Redis client automatically handles connections in the background. No need to manually connect or disconnect for basic operations.
85
+ </Step>
86
+
87
+ </Steps>
@@ -1,17 +1,23 @@
1
1
  ---
2
- name: Build a frontend using Vite and Bun
2
+ title: Build a frontend using Vite and Bun
3
+ sidebarTitle: "Vite with Bun"
4
+ mode: center
3
5
  ---
4
6
 
5
- {% callout %}
6
- You can use Vite with Bun, but many projects get faster builds & drop hundreds of dependencies by switching to [HTML imports](/docs/bundler/html).
7
- {% /callout %}
7
+ <Note>
8
+ You can use Vite with Bun, but many projects get faster builds & drop hundreds of dependencies by switching to [HTML
9
+ imports](/bundler/html-static).
10
+ </Note>
8
11
 
9
12
  ---
10
13
 
11
14
  Vite works out of the box with Bun. Get started with one of Vite's templates.
12
15
 
13
- ```bash
14
- $ bun create vite my-app
16
+ ```bash terminal icon="terminal"
17
+ bun create vite my-app
18
+ ```
19
+
20
+ ```txt
15
21
  ✔ Select a framework: › React
16
22
  ✔ Select a variant: › TypeScript + SWC
17
23
  Scaffolding project in /path/to/my-app...
@@ -21,7 +27,7 @@ Scaffolding project in /path/to/my-app...
21
27
 
22
28
  Then `cd` into the project directory and install dependencies.
23
29
 
24
- ```bash
30
+ ```bash terminal icon="terminal"
25
31
  cd my-app
26
32
  bun install
27
33
  ```
@@ -32,7 +38,7 @@ Start the development server with the `vite` CLI using `bunx`.
32
38
 
33
39
  The `--bun` flag tells Bun to run Vite's CLI using `bun` instead of `node`; by default Bun respects Vite's `#!/usr/bin/env node` [shebang line](<https://en.wikipedia.org/wiki/Shebang_(Unix)>).
34
40
 
35
- ```bash
41
+ ```bash terminal icon="terminal"
36
42
  bunx --bun vite
37
43
  ```
38
44
 
@@ -40,10 +46,10 @@ bunx --bun vite
40
46
 
41
47
  To simplify this command, update the `"dev"` script in `package.json` to the following.
42
48
 
43
- ```json-diff#package.json
49
+ ```json package.json icon="file-json"
44
50
  "scripts": {
45
- - "dev": "vite",
46
- + "dev": "bunx --bun vite",
51
+ "dev": "vite", // [!code --]
52
+ "dev": "bunx --bun vite", // [!code ++]
47
53
  "build": "vite build",
48
54
  "serve": "vite preview"
49
55
  },
@@ -54,7 +60,7 @@ To simplify this command, update the `"dev"` script in `package.json` to the fol
54
60
 
55
61
  Now you can start the development server with `bun run dev`.
56
62
 
57
- ```bash
63
+ ```bash terminal icon="terminal"
58
64
  bun run dev
59
65
  ```
60
66
 
@@ -62,8 +68,8 @@ bun run dev
62
68
 
63
69
  The following command will build your app for production.
64
70
 
65
- ```sh
66
- $ bunx --bun vite build
71
+ ```sh terminal icon="terminal"
72
+ bunx --bun vite build
67
73
  ```
68
74
 
69
75
  ---
@@ -1,12 +1,14 @@
1
1
  ---
2
- name: Extract links from a webpage using HTMLRewriter
2
+ title: Extract links from a webpage using HTMLRewriter
3
+ sidebarTitle: Extract links using HTMLRewriter
4
+ mode: center
3
5
  ---
4
6
 
5
7
  ## Extract links from a webpage
6
8
 
7
9
  Bun's [HTMLRewriter](https://bun.com/docs/api/html-rewriter) API can be used to efficiently extract links from HTML content. It works by chaining together CSS selectors to match the elements, text, and attributes you want to process. This is a simple example of how to extract links from a webpage. You can pass `.transform` a `Response`, `Blob`, or `string`.
8
10
 
9
- ```ts
11
+ ```ts extract-links.ts icon="/icons/typescript.svg"
10
12
  async function extractLinks(url: string) {
11
13
  const links = new Set<string>();
12
14
  const response = await fetch(url);
@@ -35,7 +37,7 @@ await extractLinks("https://bun.com");
35
37
 
36
38
  When scraping websites, you often want to convert relative URLs (like `/docs`) to absolute URLs. Here's how to handle URL resolution:
37
39
 
38
- ```ts
40
+ ```ts extract-links.ts icon="/icons/typescript.svg"
39
41
  async function extractLinksFromURL(url: string) {
40
42
  const response = await fetch(url);
41
43
  const links = new Set<string>();
@@ -44,13 +46,15 @@ async function extractLinksFromURL(url: string) {
44
46
  element(el) {
45
47
  const href = el.getAttribute("href");
46
48
  if (href) {
47
- // Convert relative URLs to absolute
49
+ // Convert relative URLs to absolute // [!code ++]
48
50
  try {
49
- const absoluteURL = new URL(href, url).href;
50
- links.add(absoluteURL);
51
+ // [!code ++]
52
+ const absoluteURL = new URL(href, url).href; // [!code ++]
53
+ links.add(absoluteURL); // [!code ++]
51
54
  } catch {
55
+ // [!code ++]
52
56
  links.add(href);
53
- }
57
+ } // [!code ++]
54
58
  }
55
59
  },
56
60
  });
@@ -1,12 +1,14 @@
1
1
  ---
2
- name: Extract social share images and Open Graph tags
2
+ title: Extract social share images and Open Graph tags
3
+ sidebarTitle: OpenGraph tags
4
+ mode: center
3
5
  ---
4
6
 
5
7
  ## Extract social share images and Open Graph tags
6
8
 
7
9
  Bun's [HTMLRewriter](https://bun.com/docs/api/html-rewriter) API can be used to efficiently extract social share images and Open Graph metadata from HTML content. This is particularly useful for building link preview features, social media cards, or web scrapers. We can use HTMLRewriter to match CSS selectors to HTML elements, text, and attributes we want to process.
8
10
 
9
- ```ts
11
+ ```ts extract-social-meta.ts icon="/icons/typescript.svg"
10
12
  interface SocialMetadata {
11
13
  title?: string;
12
14
  description?: string;
@@ -79,7 +81,9 @@ async function extractSocialMetadata(url: string): Promise<SocialMetadata> {
79
81
 
80
82
  return metadata;
81
83
  }
84
+ ```
82
85
 
86
+ ```ts Example Usage icon="/icons/typescript.svg"
83
87
  // Example usage
84
88
  const metadata = await extractSocialMetadata("https://bun.com");
85
89
  console.log(metadata);
@@ -1,13 +1,15 @@
1
1
  ---
2
- name: Start a cluster of HTTP servers
2
+ title: Start a cluster of HTTP servers
3
3
  description: Run multiple HTTP servers concurrently via the "reusePort" option to share the same port across multiple processes
4
+ sidebarTitle: Start a cluster of HTTP servers
5
+ mode: center
4
6
  ---
5
7
 
6
8
  To run multiple HTTP servers concurrently, use the `reusePort` option in `Bun.serve()` which shares the same port across multiple processes.
7
9
 
8
10
  This automatically load balances incoming requests across multiple instances of Bun.
9
11
 
10
- ```ts#server.ts
12
+ ```ts server.ts icon="/icons/typescript.svg"
11
13
  import { serve } from "bun";
12
14
 
13
15
  const id = Math.random().toString(36).slice(2);
@@ -22,21 +24,22 @@ serve({
22
24
 
23
25
  async fetch(request) {
24
26
  return new Response("Hello from Bun #" + id + "!\n");
25
- }
27
+ },
26
28
  });
27
29
  ```
28
30
 
29
31
  ---
30
32
 
31
- {% callout %}
32
- **Linux only** &mdash; Windows and macOS ignore the `reusePort` option. This is an operating system limitation with `SO_REUSEPORT`, unfortunately.
33
- {% /callout %}
33
+ <Note>
34
+ **Linux only** &mdash; Windows and macOS ignore the `reusePort` option. This is an operating system limitation with
35
+ `SO_REUSEPORT`, unfortunately.
36
+ </Note>
34
37
 
35
38
  After saving the file, start your servers on the same port.
36
39
 
37
40
  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
41
 
39
- ```ts#cluster.ts
42
+ ```ts cluster.ts icon="/icons/typescript.svg"
40
43
  import { spawn } from "bun";
41
44
 
42
45
  const cpus = navigator.hardwareConcurrency; // Number of CPU cores
@@ -1,10 +1,12 @@
1
1
  ---
2
- name: fetch with unix domain sockets in Bun
2
+ title: fetch with unix domain sockets in Bun
3
+ sidebarTitle: Fetch with unix domain sockets
4
+ mode: center
3
5
  ---
4
6
 
5
7
  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
8
 
7
- ```ts
9
+ ```ts fetch-unix.ts icon="/icons/typescript.svg"
8
10
  const unix = "/var/run/docker.sock";
9
11
 
10
12
  const response = await fetch("http://localhost/info", { unix });
@@ -19,7 +21,7 @@ The `unix` option is a string that specifies the local file path to a unix domai
19
21
 
20
22
  To send a `POST` request to an API endpoint over a unix domain socket:
21
23
 
22
- ```ts
24
+ ```ts fetch-unix.ts icon="/icons/typescript.svg"
23
25
  const response = await fetch("https://hostname/a/path", {
24
26
  unix: "/var/run/path/to/unix.sock",
25
27
  method: "POST",
@@ -1,10 +1,12 @@
1
1
  ---
2
- name: Send an HTTP request using fetch
2
+ title: Send an HTTP request using fetch
3
+ sidebarTitle: Fetch with Bun
4
+ mode: center
3
5
  ---
4
6
 
5
7
  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
8
 
7
- ```ts
9
+ ```ts fetch.ts icon="/icons/typescript.svg"
8
10
  const response = await fetch("https://bun.com");
9
11
  const html = await response.text(); // HTML string
10
12
  ```
@@ -13,7 +15,7 @@ const html = await response.text(); // HTML string
13
15
 
14
16
  To send a `POST` request to an API endpoint.
15
17
 
16
- ```ts
18
+ ```ts fetch.ts icon="/icons/typescript.svg"
17
19
  const response = await fetch("https://bun.com/api", {
18
20
  method: "POST",
19
21
  body: JSON.stringify({ message: "Hello from Bun!" }),
@@ -1,10 +1,12 @@
1
1
  ---
2
- name: Upload files via HTTP using FormData
2
+ title: Upload files via HTTP using FormData
3
+ sidebarTitle: Upload files via HTTP using FormData
4
+ mode: center
3
5
  ---
4
6
 
5
7
  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
8
 
7
- ```ts#index.ts
9
+ ```ts index.ts icon="/icons/typescript.svg"
8
10
  const server = Bun.serve({
9
11
  port: 4000,
10
12
  async fetch(req) {
@@ -29,7 +31,7 @@ console.log(`Listening on http://localhost:${server.port}`);
29
31
 
30
32
  We can define our HTML form in another file, `index.html`.
31
33
 
32
- ```html#index.html
34
+ ```html index.html icon="file-code"
33
35
  <!DOCTYPE html>
34
36
  <html>
35
37
  <head>
@@ -51,7 +53,7 @@ We can define our HTML form in another file, `index.html`.
51
53
  At this point, we can run the server and visit [`localhost:4000`](http://localhost:4000) to see our form.
52
54
 
53
55
  ```bash
54
- $ bun run index.ts
56
+ bun run index.ts
55
57
  Listening on http://localhost:4000
56
58
  ```
57
59
 
@@ -63,7 +65,7 @@ First we use the [`.formData()`](https://developer.mozilla.org/en-US/docs/Web/AP
63
65
 
64
66
  Finally, we write the `Blob` to disk using [`Bun.write()`](https://bun.com/docs/api/file-io#writing-files-bun-write).
65
67
 
66
- ```ts-diff#index.ts
68
+ ```ts index.ts icon="/icons/typescript.svg"
67
69
  const server = Bun.serve({
68
70
  port: 4000,
69
71
  async fetch(req) {
@@ -77,16 +79,17 @@ const server = Bun.serve({
77
79
  },
78
80
  });
79
81
 
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
- + }
82
+ // parse formdata at /action // [!code ++]
83
+ if (url.pathname === "/action") {
84
+ // [!code ++]
85
+ const formdata = await req.formData(); // [!code ++]
86
+ const name = formdata.get("name"); // [!code ++]
87
+ const profilePicture = formdata.get("profilePicture"); // [!code ++]
88
+ if (!profilePicture) throw new Error("Must upload a profile picture."); // [!code ++]
89
+ // write profilePicture to disk // [!code ++]
90
+ await Bun.write("profilePicture.png", profilePicture); // [!code ++]
91
+ return new Response("Success"); // [!code ++]
92
+ } // [!code ++]
90
93
 
91
94
  return new Response("Not Found", { status: 404 });
92
95
  },
@@ -1,22 +1,24 @@
1
1
  ---
2
- name: Hot reload an HTTP server
2
+ title: Hot reload an HTTP server
3
+ sidebarTitle: Hot reload an HTTP server
4
+ mode: center
3
5
  ---
4
6
 
5
7
  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
8
 
7
- ```sh
8
- $ bun --hot run index.ts
9
+ ```sh terminal icon="terminal"
10
+ bun --hot run index.ts
9
11
  ```
10
12
 
11
13
  ---
12
14
 
13
15
  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
16
 
15
- {% callout %}
17
+ <Note>
16
18
  Note that this doesn't reload the page on your browser.
17
- {% /callout %}
18
-
19
- ```ts
19
+ </Note>
20
+
21
+ ```ts index.ts icon="/icons/typescript.svg"
20
22
  Bun.serve({
21
23
  port: 3000,
22
24
  fetch(req) {