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,3 +1,8 @@
1
+ ---
2
+ title: "Module Resolution"
3
+ description: "How Bun resolves modules and handles imports in JavaScript and TypeScript"
4
+ ---
5
+
1
6
  Module resolution in JavaScript is a complex topic.
2
7
 
3
8
  The ecosystem is currently in the midst of a years-long transition from CommonJS modules to native ES modules. TypeScript enforces its own set of rules around import extensions that aren't compatible with ESM. Different build tools support path re-mapping via disparate non-compatible mechanisms.
@@ -8,26 +13,26 @@ Bun aims to provide a consistent and predictable module resolution system that j
8
13
 
9
14
  Consider the following files.
10
15
 
11
- {% codetabs %}
16
+ <CodeGroup>
12
17
 
13
- ```ts#index.ts
18
+ ```ts index.ts icon="/icons/typescript.svg"
14
19
  import { hello } from "./hello";
15
20
 
16
21
  hello();
17
22
  ```
18
23
 
19
- ```ts#hello.ts
24
+ ```ts hello.ts icon="/icons/typescript.svg"
20
25
  export function hello() {
21
26
  console.log("Hello world!");
22
27
  }
23
28
  ```
24
29
 
25
- {% /codetabs %}
30
+ </CodeGroup>
26
31
 
27
32
  When we run `index.ts`, it prints "Hello world!".
28
33
 
29
- ```bash
30
- $ bun index.ts
34
+ ```bash icon="terminal" terminal
35
+ bun index.ts
31
36
  Hello world!
32
37
  ```
33
38
 
@@ -50,14 +55,14 @@ In this case, we are importing from `./hello`, a relative path with no extension
50
55
 
51
56
  Import paths can optionally include extensions. If an extension is present, Bun will only check for a file with that exact extension.
52
57
 
53
- ```ts#index.ts
58
+ ```ts index.ts icon="/icons/typescript.svg"
54
59
  import { hello } from "./hello";
55
60
  import { hello } from "./hello.ts"; // this works
56
61
  ```
57
62
 
58
63
  If you import `from "*.js{x}"`, Bun will additionally check for a matching `*.ts{x}` file, to be compatible with TypeScript's [ES module support](https://www.typescriptlang.org/docs/handbook/release-notes/typescript-4-7.html#new-file-extensions).
59
64
 
60
- ```ts#index.ts
65
+ ```ts index.ts icon="/icons/typescript.svg"
61
66
  import { hello } from "./hello";
62
67
  import { hello } from "./hello.ts"; // this works
63
68
  import { hello } from "./hello.js"; // this also works
@@ -65,15 +70,15 @@ import { hello } from "./hello.js"; // this also works
65
70
 
66
71
  Bun supports both ES modules (`import`/`export` syntax) and CommonJS modules (`require()`/`module.exports`). The following CommonJS version would also work in Bun.
67
72
 
68
- {% codetabs %}
73
+ <CodeGroup>
69
74
 
70
- ```ts#index.js
75
+ ```ts index.js icon="/icons/typescript.svg"
71
76
  const { hello } = require("./hello");
72
77
 
73
78
  hello();
74
79
  ```
75
80
 
76
- ```ts#hello.js
81
+ ```ts hello.js icon="/icons/typescript.svg"
77
82
  function hello() {
78
83
  console.log("Hello world!");
79
84
  }
@@ -81,10 +86,12 @@ function hello() {
81
86
  exports.hello = hello;
82
87
  ```
83
88
 
84
- {% /codetabs %}
89
+ </CodeGroup>
85
90
 
86
91
  That said, using CommonJS is discouraged in new projects.
87
92
 
93
+ ---
94
+
88
95
  ## Module systems
89
96
 
90
97
  Bun has native support for CommonJS and ES modules. ES Modules are the recommended module format for new projects, but CommonJS modules are still widely used in the Node.js ecosystem.
@@ -100,20 +107,19 @@ In Bun's JavaScript runtime, `require` can be used by both ES Modules and Common
100
107
 
101
108
  You can `require()` any file or package, even `.ts` or `.mjs` files.
102
109
 
103
- ```ts
110
+ ```ts title="index.ts" icon="/icons/typescript.svg"
104
111
  const { foo } = require("./foo"); // extensions are optional
105
112
  const { bar } = require("./bar.mjs");
106
113
  const { baz } = require("./baz.tsx");
107
114
  ```
108
115
 
109
- {% details summary="What is a CommonJS module?" %}
116
+ <Accordion title="What is a CommonJS module?">
110
117
 
111
118
  In 2016, ECMAScript added support for [ES Modules](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Modules). ES Modules are the standard for JavaScript modules. However, millions of npm packages still use CommonJS modules.
112
119
 
113
120
  CommonJS modules are modules that use `module.exports` to export values. Typically, `require` is used to import CommonJS modules.
114
121
 
115
- ```ts
116
- // my-commonjs.cjs
122
+ ```ts my-commonjs.cjs icon="/icons/javascript.svg"
117
123
  const stuff = require("./stuff");
118
124
  module.exports = { stuff };
119
125
  ```
@@ -136,13 +142,13 @@ The biggest difference between CommonJS and ES Modules is that CommonJS modules
136
142
  - CommonJS modules and static ES Modules (`import` statements) work in a similar synchronous way, like reading a book from start to finish.
137
143
  - ES Modules also offer the option to import modules asynchronously using the `import()` function. This is like looking up additional information in the middle of reading the book without stopping.
138
144
 
139
- {% /details %}
145
+ </Accordion>
140
146
 
141
147
  ### Using `import`
142
148
 
143
149
  You can `import` any file or package, even `.cjs` files.
144
150
 
145
- ```ts
151
+ ```ts title="index.ts" icon="/icons/typescript.svg"
146
152
  import { foo } from "./foo"; // extensions are optional
147
153
  import bar from "./bar.ts";
148
154
  import { stuff } from "./my-commonjs.cjs";
@@ -152,9 +158,10 @@ import { stuff } from "./my-commonjs.cjs";
152
158
 
153
159
  In Bun, you can use `import` or `require` in the same file—they both work, all the time.
154
160
 
155
- ```ts
161
+ ```ts title="index.ts" icon="/icons/typescript.svg"
156
162
  import { stuff } from "./my-commonjs.cjs";
157
163
  import Stuff from "./my-commonjs.cjs";
164
+
158
165
  const myStuff = require("./my-commonjs.cjs");
159
166
  ```
160
167
 
@@ -164,42 +171,21 @@ The only exception to this rule is top-level await. You can't `require()` a file
164
171
 
165
172
  Fortunately, very few libraries use top-level await, so this is rarely a problem. But if you're using top-level await in your application code, make sure that file isn't being `require()` from elsewhere in your application. Instead, you should use `import` or [dynamic `import()`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/import).
166
173
 
174
+ ---
175
+
167
176
  ## Importing packages
168
177
 
169
178
  Bun implements the Node.js module resolution algorithm, so you can import packages from `node_modules` with a bare specifier.
170
179
 
171
- ```ts
180
+ ```ts title="index.ts" icon="/icons/typescript.svg"
172
181
  import { stuff } from "foo";
173
182
  ```
174
183
 
175
184
  The full specification of this algorithm are officially documented in the [Node.js documentation](https://nodejs.org/api/modules.html); we won't rehash it here. Briefly: if you import `from "foo"`, Bun scans up the file system for a `node_modules` directory containing the package `foo`.
176
185
 
177
- ### NODE_PATH
178
-
179
- Bun supports `NODE_PATH` for additional module resolution directories:
180
-
181
- ```bash
182
- NODE_PATH=./packages bun run src/index.js
183
- ```
184
-
185
- ```ts
186
- // packages/foo/index.js
187
- export const hello = "world";
188
-
189
- // src/index.js
190
- import { hello } from "foo";
191
- ```
192
-
193
- Multiple paths use the platform's delimiter (`:` on Unix, `;` on Windows):
194
-
195
- ```bash
196
- NODE_PATH=./packages:./lib bun run src/index.js # Unix/macOS
197
- NODE_PATH=./packages;./lib bun run src/index.js # Windows
198
- ```
199
-
200
186
  Once it finds the `foo` package, Bun reads the `package.json` to determine how the package should be imported. To determine the package's entrypoint, Bun first reads the `exports` field and checks for the following conditions.
201
187
 
202
- ```jsonc#package.json
188
+ ```json package.json icon="file-json"
203
189
  {
204
190
  "name": "foo",
205
191
  "exports": {
@@ -207,7 +193,7 @@ Once it finds the `foo` package, Bun reads the `package.json` to determine how t
207
193
  "node": "./index.js",
208
194
  "require": "./index.js", // if importer is CommonJS
209
195
  "import": "./index.mjs", // if importer is ES module
210
- "default": "./index.js",
196
+ "default": "./index.js"
211
197
  }
212
198
  }
213
199
  ```
@@ -216,7 +202,7 @@ Whichever one of these conditions occurs _first_ in the `package.json` is used t
216
202
 
217
203
  Bun respects subpath [`"exports"`](https://nodejs.org/api/packages.html#subpath-exports) and [`"imports"`](https://nodejs.org/api/packages.html#imports).
218
204
 
219
- ```jsonc#package.json
205
+ ```json package.json icon="file-json"
220
206
  {
221
207
  "name": "foo",
222
208
  "exports": {
@@ -227,7 +213,7 @@ Bun respects subpath [`"exports"`](https://nodejs.org/api/packages.html#subpath-
227
213
 
228
214
  Subpath imports and conditional imports work in conjunction with each other.
229
215
 
230
- ```json
216
+ ```json package.json icon="file-json"
231
217
  {
232
218
  "name": "foo",
233
219
  "exports": {
@@ -241,18 +227,20 @@ Subpath imports and conditional imports work in conjunction with each other.
241
227
 
242
228
  As in Node.js, Specifying any subpath in the `"exports"` map will prevent other subpaths from being importable; you can only import files that are explicitly exported. Given the `package.json` above:
243
229
 
244
- ```ts
230
+ ```ts index.ts icon="/icons/typescript.svg"
245
231
  import stuff from "foo"; // this works
246
232
  import stuff from "foo/index.mjs"; // this doesn't
247
233
  ```
248
234
 
249
- {% callout %}
250
- **Shipping TypeScript** — Note that Bun supports the special `"bun"` export condition. If your library is written in TypeScript, you can publish your (un-transpiled!) TypeScript files to `npm` directly. If you specify your package's `*.ts` entrypoint in the `"bun"` condition, Bun will directly import and execute your TypeScript source files.
251
- {% /callout %}
235
+ <Note>
236
+ **Shipping TypeScript** — Note that Bun supports the special `"bun"` export condition. If your library is written in
237
+ TypeScript, you can publish your (un-transpiled!) TypeScript files to `npm` directly. If you specify your package's
238
+ `*.ts` entrypoint in the `"bun"` condition, Bun will directly import and execute your TypeScript source files.
239
+ </Note>
252
240
 
253
241
  If `exports` is not defined, Bun falls back to `"module"` (ESM imports only) then [`"main"`](https://nodejs.org/api/packages.html#main).
254
242
 
255
- ```json#package.json
243
+ ```json package.json icon="file-json"
256
244
  {
257
245
  "name": "foo",
258
246
  "module": "./index.js",
@@ -266,17 +254,17 @@ The `--conditions` flag allows you to specify a list of conditions to use when r
266
254
 
267
255
  This flag is supported in both `bun build` and Bun's runtime.
268
256
 
269
- ```sh
257
+ ```sh terminal icon="terminal"
270
258
  # Use it with bun build:
271
- $ bun build --conditions="react-server" --target=bun ./app/foo/route.js
259
+ bun build --conditions="react-server" --target=bun ./app/foo/route.js
272
260
 
273
261
  # Use it with bun's runtime:
274
- $ bun --conditions="react-server" ./app/foo/route.js
262
+ bun --conditions="react-server" ./app/foo/route.js
275
263
  ```
276
264
 
277
265
  You can also use `conditions` programmatically with `Bun.build`:
278
266
 
279
- ```js
267
+ ```ts build.ts icon="/icons/typescript.svg"
280
268
  await Bun.build({
281
269
  conditions: ["react-server"],
282
270
  target: "bun",
@@ -284,16 +272,18 @@ await Bun.build({
284
272
  });
285
273
  ```
286
274
 
275
+ ---
276
+
287
277
  ## Path re-mapping
288
278
 
289
279
  In the spirit of treating TypeScript as a first-class citizen, the Bun runtime will re-map import paths according to the [`compilerOptions.paths`](https://www.typescriptlang.org/tsconfig#paths) field in `tsconfig.json`. This is a major divergence from Node.js, which doesn't support any form of import path re-mapping.
290
280
 
291
- ```jsonc#tsconfig.json
281
+ ```json tsconfig.json icon="file-json"
292
282
  {
293
283
  "compilerOptions": {
294
284
  "paths": {
295
- "config": ["./config.ts"], // map specifier to file
296
- "components/*": ["components/*"], // wildcard matching
285
+ "config": ["./config.ts"], // map specifier to file
286
+ "components/*": ["components/*"] // wildcard matching
297
287
  }
298
288
  }
299
289
  }
@@ -301,7 +291,7 @@ In the spirit of treating TypeScript as a first-class citizen, the Bun runtime w
301
291
 
302
292
  If you aren't a TypeScript user, you can create a [`jsconfig.json`](https://code.visualstudio.com/docs/languages/jsconfig) in your project root to achieve the same behavior.
303
293
 
304
- {% details summary="Low-level details of CommonJS interop in Bun" %}
294
+ <Accordion title="Low-level details of CommonJS interop in Bun">
305
295
 
306
296
  Bun's JavaScript runtime has native support for CommonJS. When Bun's JavaScript transpiler detects usages of `module.exports`, it treats the file as CommonJS. The module loader will then wrap the transpiled module in a function shaped like this:
307
297
 
@@ -317,4 +307,36 @@ Once the CommonJS module is successfully evaluated, a Synthetic Module Record is
317
307
 
318
308
  When using Bun's bundler, this works differently. The bundler will wrap the CommonJS module in a `require_${moduleName}` function which returns the `module.exports` object.
319
309
 
320
- {% /details %}
310
+ </Accordion>
311
+
312
+ ---
313
+
314
+ ## `import.meta`
315
+
316
+ The `import.meta` object is a way for a module to access information about itself. It's part of the JavaScript language, but its contents are not standardized. Each "host" (browser, runtime, etc) is free to implement any properties it wishes on the `import.meta` object.
317
+
318
+ Bun implements the following properties.
319
+
320
+ ```ts /path/to/project/file.ts
321
+ import.meta.dir; // => "/path/to/project"
322
+ import.meta.file; // => "file.ts"
323
+ import.meta.path; // => "/path/to/project/file.ts"
324
+ import.meta.url; // => "file:///path/to/project/file.ts"
325
+
326
+ import.meta.main; // `true` if this file is directly executed by `bun run`
327
+ // `false` otherwise
328
+
329
+ import.meta.resolve("zod"); // => "file:///path/to/project/node_modules/zod/index.js"
330
+ ```
331
+
332
+ | Property | Description |
333
+ | ---------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
334
+ | `import.meta.dir` | Absolute path to the directory containing the current file, e.g. `/path/to/project`. Equivalent to `__dirname` in CommonJS modules (and Node.js) |
335
+ | `import.meta.dirname` | An alias to `import.meta.dir`, for Node.js compatibility |
336
+ | `import.meta.env` | An alias to `process.env`. |
337
+ | `import.meta.file` | The name of the current file, e.g. `index.tsx` |
338
+ | `import.meta.path` | Absolute path to the current file, e.g. `/path/to/project/index.ts`. Equivalent to `__filename` in CommonJS modules (and Node.js) |
339
+ | `import.meta.filename` | An alias to `import.meta.path`, for Node.js compatibility |
340
+ | `import.meta.main` | Indicates whether the current file is the entrypoint to the current `bun` process. Is the file being directly executed by `bun run` or is it being imported? |
341
+ | `import.meta.resolve` | Resolve a module specifier (e.g. `"zod"` or `"./file.tsx"`) to a url. Equivalent to [`import.meta.resolve` in browsers](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/import.meta#resolve). Example: `import.meta.resolve("zod")` returns `"file:///path/to/project/node_modules/zod/index.ts"` |
342
+ | `import.meta.url` | A `string` url to the current file, e.g. `file:///path/to/project/index.ts`. Equivalent to [`import.meta.url` in browsers](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/import.meta#url) |
@@ -1,4 +1,9 @@
1
- Bun implements the `node:dns` module.
1
+ ---
2
+ title: DNS
3
+ description: Use Bun's DNS module to resolve DNS records
4
+ ---
5
+
6
+ Bun implements it's own `dns` module, and the `node:dns` module.
2
7
 
3
8
  ```ts
4
9
  import * as dns from "node:dns";
@@ -8,6 +13,14 @@ console.log(addrs);
8
13
  // => [{ address: "172.67.161.226", family: 4, ttl: 0 }, ...]
9
14
  ```
10
15
 
16
+ ```ts
17
+ import { dns } from "bun";
18
+
19
+ dns.prefetch("bun.com", 443);
20
+ ```
21
+
22
+ ---
23
+
11
24
  ## DNS caching in Bun
12
25
 
13
26
  In Bun v1.1.9, we added support for DNS caching. This cache makes repeated connections to the same hosts faster.
@@ -39,9 +52,7 @@ An example where you might want to use this is a database driver. When your appl
39
52
 
40
53
  ### `dns.prefetch`
41
54
 
42
- {% callout %}
43
- **🚧** — This API is experimental and may change in the future.
44
- {% /callout %}
55
+ <Warning>This API is experimental and may change in the future.</Warning>
45
56
 
46
57
  To prefetch a DNS entry, you can use the `dns.prefetch` API. This API is useful when you know you'll need to connect to a host soon and want to avoid the initial DNS lookup.
47
58
 
@@ -62,28 +73,18 @@ await fetch("https://bun.com");
62
73
 
63
74
  ### `dns.getCacheStats()`
64
75
 
65
- {% callout %}
66
- **🚧** — This API is experimental and may change in the future.
67
- {% /callout %}
68
-
69
- To get the current cache stats, you can use the `dns.getCacheStats` API.
76
+ <Warning>This API is experimental and may change in the future.</Warning>
70
77
 
71
- This API returns an object with the following properties:
78
+ To get the current cache stats, you can use the `dns.getCacheStats` API. This API returns an object with the following properties:
72
79
 
73
80
  ```ts
74
81
  {
75
- // Cache hits
76
- cacheHitsCompleted: number;
77
- cacheHitsInflight: number;
78
- cacheMisses: number;
79
- // Number of items in the DNS cache
80
- size: number;
81
-
82
- // Number of times a connection failed
83
- errors: number;
84
-
85
- // Number of times a connection was requested at all (including cache hits and misses)
86
- totalCount: number;
82
+ cacheHitsCompleted: number; // Cache hits completed
83
+ cacheHitsInflight: number; // Cache hits in flight
84
+ cacheMisses: number; // Cache misses
85
+ size: number; // Number of items in the DNS cache
86
+ errors: number; // Number of times a connection failed
87
+ totalCount: number; // Number of times a connection was requested at all (including cache hits and misses)
87
88
  }
88
89
  ```
89
90
 
@@ -1,3 +1,8 @@
1
+ ---
2
+ title: Fetch
3
+ description: Send HTTP requests with Bun's fetch API
4
+ ---
5
+
1
6
  Bun implements the WHATWG `fetch` standard, with some extensions to meet the needs of server-side JavaScript.
2
7
 
3
8
  Bun also implements `node:http`, but `fetch` is generally recommended instead.
@@ -268,7 +273,7 @@ const response = await fetch("s3://my-bucket/path/to/object", {
268
273
 
269
274
  Note: Only PUT and POST methods support request bodies when using S3. For uploads, Bun automatically uses multipart upload for streaming bodies.
270
275
 
271
- You can read more about Bun's S3 support in the [S3](https://bun.com/docs/api/s3) documentation.
276
+ You can read more about Bun's S3 support in the [S3](/runtime/s3) documentation.
272
277
 
273
278
  #### File URLs - `file://`
274
279
 
@@ -337,7 +342,7 @@ This will print the request and response headers to your terminal:
337
342
  ```sh
338
343
  [fetch] > HTTP/1.1 GET http://example.com/
339
344
  [fetch] > Connection: keep-alive
340
- [fetch] > User-Agent: Bun/1.3.2-canary.20251105T140650
345
+ [fetch] > User-Agent: Bun/1.3.1
341
346
  [fetch] > Accept: */*
342
347
  [fetch] > Host: example.com
343
348
  [fetch] > Accept-Encoding: gzip, deflate, br, zstd
@@ -383,7 +388,7 @@ dns.prefetch("bun.com");
383
388
 
384
389
  By default, Bun caches and deduplicates DNS queries in-memory for up to 30 seconds. You can see the cache stats by calling `dns.getCacheStats()`:
385
390
 
386
- To learn more about DNS caching in Bun, see the [DNS caching](https://bun.com/docs/api/dns) documentation.
391
+ To learn more about DNS caching in Bun, see the [DNS caching](/runtime/networking/dns) documentation.
387
392
 
388
393
  ### Preconnect to a host
389
394
 
@@ -402,7 +407,7 @@ Note: calling `fetch` immediately after `fetch.preconnect` will not make your re
402
407
  To preconnect to a host at startup, you can pass `--fetch-preconnect`:
403
408
 
404
409
  ```sh
405
- $ bun --fetch-preconnect https://bun.com ./my-script.ts
410
+ bun --fetch-preconnect https://bun.com ./my-script.ts
406
411
  ```
407
412
 
408
413
  This is sort of like `<link rel="preconnect">` in HTML.
@@ -425,7 +430,7 @@ When the limit is exceeded, the requests are queued and sent as soon as the next
425
430
  You can increase the maximum number of simultaneous connections via the `BUN_CONFIG_MAX_HTTP_REQUESTS` environment variable:
426
431
 
427
432
  ```sh
428
- $ BUN_CONFIG_MAX_HTTP_REQUESTS=512 bun ./my-script.ts
433
+ bun_CONFIG_MAX_HTTP_REQUESTS=512 bun ./my-script.ts
429
434
  ```
430
435
 
431
436
  The max value for this limit is currently set to 65,336. The maximum port number is 65,535, so it's quite difficult for any one computer to exceed this limit.
@@ -1,10 +1,15 @@
1
- Use Bun's native TCP API to implement performance sensitive systems like database clients, game servers, or anything that needs to communicate over TCP (instead of HTTP). This is a low-level API intended for library authors and for advanced use cases.
1
+ ---
2
+ title: TCP
3
+ description: Use Bun's native TCP API to implement performance sensitive systems like database clients, game servers, or anything that needs to communicate over TCP (instead of HTTP)
4
+ ---
5
+
6
+ This is a low-level API intended for library authors and for advanced use cases.
2
7
 
3
8
  ## Start a server (`Bun.listen()`)
4
9
 
5
10
  To start a TCP server with `Bun.listen`:
6
11
 
7
- ```ts
12
+ ```ts server.ts icon="/icons/typescript.svg"
8
13
  Bun.listen({
9
14
  hostname: "localhost",
10
15
  port: 8080,
@@ -18,11 +23,11 @@ Bun.listen({
18
23
  });
19
24
  ```
20
25
 
21
- {% details summary="An API designed for speed" %}
26
+ <Accordion title="An API designed for speed">
22
27
 
23
28
  In Bun, a set of handlers are declared once per server instead of assigning callbacks to each socket, as with Node.js `EventEmitters` or the web-standard `WebSocket` API.
24
29
 
25
- ```ts
30
+ ```ts server.ts icon="/icons/typescript.svg"
26
31
  Bun.listen({
27
32
  hostname: "localhost",
28
33
  port: 8080,
@@ -38,11 +43,11 @@ Bun.listen({
38
43
 
39
44
  For performance-sensitive servers, assigning listeners to each socket can cause significant garbage collector pressure and increase memory usage. By contrast, Bun only allocates one handler function for each event and shares it among all sockets. This is a small optimization, but it adds up.
40
45
 
41
- {% /details %}
46
+ </Accordion>
42
47
 
43
48
  Contextual data can be attached to a socket in the `open` handler.
44
49
 
45
- ```ts
50
+ ```ts server.ts icon="/icons/typescript.svg"
46
51
  type SocketData = { sessionId: string };
47
52
 
48
53
  Bun.listen<SocketData>({
@@ -50,10 +55,10 @@ Bun.listen<SocketData>({
50
55
  port: 8080,
51
56
  socket: {
52
57
  data(socket, data) {
53
- socket.write(`${socket.data.sessionId}: ack`);
58
+ socket.write(`${socket.data.sessionId}: ack`); // [!code ++]
54
59
  },
55
60
  open(socket) {
56
- socket.data = { sessionId: "abcd" };
61
+ socket.data = { sessionId: "abcd" }; // [!code ++]
57
62
  },
58
63
  },
59
64
  });
@@ -61,7 +66,7 @@ Bun.listen<SocketData>({
61
66
 
62
67
  To enable TLS, pass a `tls` object containing `key` and `cert` fields.
63
68
 
64
- ```ts
69
+ ```ts server.ts icon="/icons/typescript.svg"
65
70
  Bun.listen({
66
71
  hostname: "localhost",
67
72
  port: 8080,
@@ -70,33 +75,29 @@ Bun.listen({
70
75
  },
71
76
  tls: {
72
77
  // can be string, BunFile, TypedArray, Buffer, or array thereof
73
- key: Bun.file("./key.pem"),
74
- cert: Bun.file("./cert.pem"),
78
+ key: Bun.file("./key.pem"), // [!code ++]
79
+ cert: Bun.file("./cert.pem"), // [!code ++]
75
80
  },
76
81
  });
77
82
  ```
78
83
 
79
84
  The `key` and `cert` fields expect the _contents_ of your TLS key and certificate. This can be a string, `BunFile`, `TypedArray`, or `Buffer`.
80
85
 
81
- ```ts
86
+ ```ts server.ts icon="/icons/typescript.svg"
82
87
  Bun.listen({
83
88
  // ...
84
89
  tls: {
85
- // BunFile
86
- key: Bun.file("./key.pem"),
87
- // Buffer
88
- key: fs.readFileSync("./key.pem"),
89
- // string
90
- key: fs.readFileSync("./key.pem", "utf8"),
91
- // array of above
92
- key: [Bun.file("./key1.pem"), Bun.file("./key2.pem")],
90
+ key: Bun.file("./key.pem"), // BunFile
91
+ key: fs.readFileSync("./key.pem"), // Buffer
92
+ key: fs.readFileSync("./key.pem", "utf8"), // string
93
+ key: [Bun.file("./key1.pem"), Bun.file("./key2.pem")], // array of above
93
94
  },
94
95
  });
95
96
  ```
96
97
 
97
98
  The result of `Bun.listen` is a server that conforms to the `TCPSocket` interface.
98
99
 
99
- ```ts
100
+ ```ts server.ts icon="/icons/typescript.svg"
100
101
  const server = Bun.listen({
101
102
  /* config*/
102
103
  });
@@ -109,11 +110,13 @@ server.stop(true);
109
110
  server.unref();
110
111
  ```
111
112
 
113
+ ---
114
+
112
115
  ## Create a connection (`Bun.connect()`)
113
116
 
114
117
  Use `Bun.connect` to connect to a TCP server. Specify the server to connect to with `hostname` and `port`. TCP clients can define the same set of handlers as `Bun.listen`, plus a couple client-specific handlers.
115
118
 
116
- ```ts
119
+ ```ts server.ts icon="/icons/typescript.svg"
117
120
  // The client
118
121
  const socket = await Bun.connect({
119
122
  hostname: "localhost",
@@ -140,39 +143,48 @@ To require TLS, specify `tls: true`.
140
143
  // The client
141
144
  const socket = await Bun.connect({
142
145
  // ... config
143
- tls: true,
146
+ tls: true, // [!code ++]
144
147
  });
145
148
  ```
146
149
 
150
+ ---
151
+
147
152
  ## Hot reloading
148
153
 
149
154
  Both TCP servers and sockets can be hot reloaded with new handlers.
150
155
 
151
- {% codetabs %}
156
+ <CodeGroup>
152
157
 
153
- ```ts#Server
154
- const server = Bun.listen({ /* config */ })
158
+ ```ts server.ts icon="/icons/typescript.svg"
159
+ const server = Bun.listen({
160
+ /* config */
161
+ });
155
162
 
156
163
  // reloads handlers for all active server-side sockets
157
164
  server.reload({
158
165
  socket: {
159
- data(){
166
+ data() {
160
167
  // new 'data' handler
161
- }
162
- }
163
- })
168
+ },
169
+ },
170
+ });
164
171
  ```
165
172
 
166
- ```ts#Client
167
- const socket = await Bun.connect({ /* config */ })
173
+ ```ts client.ts icon="/icons/typescript.svg"
174
+ const socket = await Bun.connect({
175
+ /* config */
176
+ });
177
+
168
178
  socket.reload({
169
- data(){
179
+ data() {
170
180
  // new 'data' handler
171
- }
172
- })
181
+ },
182
+ });
173
183
  ```
174
184
 
175
- {% /codetabs %}
185
+ </CodeGroup>
186
+
187
+ ---
176
188
 
177
189
  ## Buffering
178
190
 
@@ -194,11 +206,14 @@ socket.write("hello");
194
206
 
195
207
  To simplify this for now, consider using Bun's `ArrayBufferSink` with the `{stream: true}` option:
196
208
 
197
- ```ts
209
+ ```ts server.ts icon="/icons/typescript.svg"
198
210
  import { ArrayBufferSink } from "bun";
199
211
 
200
212
  const sink = new ArrayBufferSink();
201
- sink.start({ stream: true, highWaterMark: 1024 });
213
+ sink.start({
214
+ stream: true, // [!code ++]
215
+ highWaterMark: 1024,
216
+ });
202
217
 
203
218
  sink.write("h");
204
219
  sink.write("e");
@@ -216,6 +231,9 @@ queueMicrotask(() => {
216
231
  });
217
232
  ```
218
233
 
219
- {% callout %}
220
- **Corking** — Support for corking is planned, but in the meantime backpressure must be managed manually with the `drain` handler.
221
- {% /callout %}
234
+ <Note>
235
+ **Corking**
236
+
237
+ Support for corking is planned, but in the meantime backpressure must be managed manually with the `drain` handler.
238
+
239
+ </Note>