bun-types 1.3.2-canary.20251106T140813 → 1.3.2-canary.20251108T140624

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 (316) hide show
  1. package/bun.d.ts +102 -6
  2. package/docs/bundler/bytecode.mdx +465 -0
  3. package/docs/bundler/css.mdx +1024 -0
  4. package/docs/bundler/esbuild.mdx +253 -0
  5. package/docs/bundler/executables.mdx +535 -0
  6. package/docs/bundler/fullstack.mdx +1064 -0
  7. package/docs/bundler/hot-reloading.mdx +229 -0
  8. package/docs/bundler/html-static.mdx +386 -0
  9. package/docs/bundler/index.mdx +1499 -0
  10. package/docs/bundler/loaders.mdx +356 -0
  11. package/docs/bundler/macros.mdx +328 -0
  12. package/docs/bundler/minifier.mdx +1306 -0
  13. package/docs/bundler/plugins.mdx +411 -0
  14. package/docs/feedback.mdx +85 -0
  15. package/docs/guides/binary/arraybuffer-to-array.mdx +29 -0
  16. package/docs/guides/binary/arraybuffer-to-blob.mdx +26 -0
  17. package/docs/guides/binary/arraybuffer-to-buffer.mdx +27 -0
  18. package/docs/guides/binary/arraybuffer-to-string.mdx +17 -0
  19. package/docs/guides/binary/arraybuffer-to-typedarray.mdx +41 -0
  20. package/docs/guides/binary/blob-to-arraybuffer.mdx +16 -0
  21. package/docs/guides/binary/blob-to-dataview.mdx +16 -0
  22. package/docs/guides/binary/blob-to-stream.mdx +16 -0
  23. package/docs/guides/binary/blob-to-string.mdx +17 -0
  24. package/docs/guides/binary/blob-to-typedarray.mdx +16 -0
  25. package/docs/guides/binary/buffer-to-arraybuffer.mdx +16 -0
  26. package/docs/guides/binary/buffer-to-blob.mdx +16 -0
  27. package/docs/guides/binary/buffer-to-readablestream.mdx +43 -0
  28. package/docs/guides/binary/buffer-to-string.mdx +27 -0
  29. package/docs/guides/binary/buffer-to-typedarray.mdx +16 -0
  30. package/docs/guides/binary/dataview-to-string.mdx +17 -0
  31. package/docs/guides/binary/typedarray-to-arraybuffer.mdx +27 -0
  32. package/docs/guides/binary/typedarray-to-blob.mdx +18 -0
  33. package/docs/guides/binary/typedarray-to-buffer.mdx +16 -0
  34. package/docs/guides/binary/typedarray-to-dataview.mdx +16 -0
  35. package/docs/guides/binary/typedarray-to-readablestream.mdx +43 -0
  36. package/docs/guides/binary/typedarray-to-string.mdx +18 -0
  37. package/docs/guides/deployment/aws-lambda.mdx +204 -0
  38. package/docs/guides/deployment/digital-ocean.mdx +161 -0
  39. package/docs/guides/deployment/google-cloud-run.mdx +197 -0
  40. package/docs/guides/deployment/railway.mdx +145 -0
  41. package/docs/guides/deployment/render.mdx +82 -0
  42. package/docs/guides/deployment/vercel.mdx +99 -0
  43. package/docs/guides/ecosystem/astro.mdx +82 -0
  44. package/docs/guides/ecosystem/discordjs.mdx +80 -0
  45. package/docs/guides/ecosystem/docker.mdx +151 -0
  46. package/docs/guides/ecosystem/drizzle.mdx +195 -0
  47. package/docs/guides/ecosystem/edgedb.mdx +257 -0
  48. package/docs/guides/ecosystem/elysia.mdx +31 -0
  49. package/docs/guides/ecosystem/express.mdx +43 -0
  50. package/docs/guides/ecosystem/hono.mdx +47 -0
  51. package/docs/guides/ecosystem/mongoose.mdx +92 -0
  52. package/docs/guides/ecosystem/neon-drizzle.mdx +234 -0
  53. package/docs/guides/ecosystem/neon-serverless-postgres.mdx +60 -0
  54. package/docs/guides/ecosystem/nextjs.mdx +57 -0
  55. package/docs/guides/ecosystem/nuxt.mdx +90 -0
  56. package/docs/guides/ecosystem/pm2.mdx +55 -0
  57. package/docs/guides/ecosystem/prisma-postgres.mdx +169 -0
  58. package/docs/guides/ecosystem/prisma.mdx +164 -0
  59. package/docs/guides/ecosystem/qwik.mdx +114 -0
  60. package/docs/guides/ecosystem/react.mdx +52 -0
  61. package/docs/guides/ecosystem/remix.mdx +97 -0
  62. package/docs/guides/ecosystem/sentry.mdx +54 -0
  63. package/docs/guides/ecosystem/solidstart.mdx +66 -0
  64. package/docs/guides/ecosystem/ssr-react.mdx +49 -0
  65. package/docs/guides/ecosystem/stric.mdx +54 -0
  66. package/docs/guides/ecosystem/sveltekit.mdx +138 -0
  67. package/docs/guides/ecosystem/systemd.mdx +114 -0
  68. package/docs/guides/ecosystem/upstash.mdx +87 -0
  69. package/docs/guides/ecosystem/vite.mdx +77 -0
  70. package/docs/guides/html-rewriter/extract-links.mdx +72 -0
  71. package/docs/guides/html-rewriter/extract-social-meta.mdx +97 -0
  72. package/docs/guides/http/cluster.mdx +69 -0
  73. package/docs/guides/http/fetch-unix.mdx +35 -0
  74. package/docs/guides/http/fetch.mdx +26 -0
  75. package/docs/guides/http/file-uploads.mdx +97 -0
  76. package/docs/guides/http/hot.mdx +28 -0
  77. package/docs/guides/http/proxy.mdx +26 -0
  78. package/docs/guides/http/server.mdx +48 -0
  79. package/docs/guides/http/simple.mdx +20 -0
  80. package/docs/guides/http/stream-file.mdx +50 -0
  81. package/docs/guides/http/stream-iterator.mdx +49 -0
  82. package/docs/guides/http/stream-node-streams-in-bun.mdx +22 -0
  83. package/docs/guides/http/tls.mdx +32 -0
  84. package/docs/guides/index.mdx +10 -0
  85. package/docs/guides/install/add-dev.mdx +28 -0
  86. package/docs/guides/install/add-git.mdx +38 -0
  87. package/docs/guides/install/add-optional.mdx +27 -0
  88. package/docs/guides/install/add-peer.mdx +45 -0
  89. package/docs/guides/install/add-tarball.mdx +35 -0
  90. package/docs/guides/install/add.mdx +44 -0
  91. package/docs/guides/install/azure-artifacts.mdx +76 -0
  92. package/docs/guides/install/cicd.mdx +43 -0
  93. package/docs/guides/install/custom-registry.mdx +32 -0
  94. package/docs/guides/install/from-npm-install-to-bun-install.mdx +230 -0
  95. package/docs/guides/install/git-diff-bun-lockfile.mdx +47 -0
  96. package/docs/guides/install/jfrog-artifactory.mdx +28 -0
  97. package/docs/guides/install/npm-alias.mdx +25 -0
  98. package/docs/guides/install/registry-scope.mdx +40 -0
  99. package/docs/guides/install/trusted.mdx +50 -0
  100. package/docs/guides/install/workspaces.mdx +70 -0
  101. package/docs/guides/install/yarnlock.mdx +50 -0
  102. package/docs/guides/process/argv.mdx +66 -0
  103. package/docs/guides/process/ctrl-c.mdx +18 -0
  104. package/docs/guides/process/ipc.mdx +69 -0
  105. package/docs/guides/process/nanoseconds.mdx +15 -0
  106. package/docs/guides/process/os-signals.mdx +41 -0
  107. package/docs/guides/process/spawn-stderr.mdx +34 -0
  108. package/docs/guides/process/spawn-stdout.mdx +28 -0
  109. package/docs/guides/process/spawn.mdx +43 -0
  110. package/docs/guides/process/stdin.mdx +62 -0
  111. package/docs/guides/read-file/arraybuffer.mdx +30 -0
  112. package/docs/guides/read-file/buffer.mdx +21 -0
  113. package/docs/guides/read-file/exists.mdx +18 -0
  114. package/docs/guides/read-file/json.mdx +19 -0
  115. package/docs/guides/read-file/mime.mdx +22 -0
  116. package/docs/guides/read-file/stream.mdx +28 -0
  117. package/docs/guides/read-file/string.mdx +24 -0
  118. package/docs/guides/read-file/uint8array.mdx +23 -0
  119. package/docs/guides/read-file/watch.mdx +66 -0
  120. package/docs/guides/runtime/build-time-constants.mdx +295 -0
  121. package/docs/guides/runtime/cicd.mdx +45 -0
  122. package/docs/guides/runtime/codesign-macos-executable.mdx +61 -0
  123. package/docs/guides/runtime/define-constant.mdx +149 -0
  124. package/docs/guides/runtime/delete-directory.mdx +39 -0
  125. package/docs/guides/runtime/delete-file.mdx +21 -0
  126. package/docs/guides/runtime/heap-snapshot.mdx +28 -0
  127. package/docs/guides/runtime/import-html.mdx +17 -0
  128. package/docs/guides/runtime/import-json.mdx +46 -0
  129. package/docs/guides/runtime/import-toml.mdx +32 -0
  130. package/docs/guides/runtime/import-yaml.mdx +104 -0
  131. package/docs/guides/runtime/read-env.mdx +37 -0
  132. package/docs/guides/runtime/set-env.mdx +51 -0
  133. package/docs/guides/runtime/shell.mdx +42 -0
  134. package/docs/guides/runtime/timezone.mdx +38 -0
  135. package/docs/guides/runtime/tsconfig-paths.mdx +31 -0
  136. package/docs/guides/runtime/typescript.mdx +51 -0
  137. package/docs/guides/runtime/vscode-debugger.mdx +48 -0
  138. package/docs/guides/runtime/web-debugger.mdx +103 -0
  139. package/docs/guides/streams/node-readable-to-arraybuffer.mdx +13 -0
  140. package/docs/guides/streams/node-readable-to-blob.mdx +13 -0
  141. package/docs/guides/streams/node-readable-to-json.mdx +14 -0
  142. package/docs/guides/streams/node-readable-to-string.mdx +14 -0
  143. package/docs/guides/streams/node-readable-to-uint8array.mdx +13 -0
  144. package/docs/guides/streams/to-array.mdx +16 -0
  145. package/docs/guides/streams/to-arraybuffer.mdx +16 -0
  146. package/docs/guides/streams/to-blob.mdx +16 -0
  147. package/docs/guides/streams/to-buffer.mdx +17 -0
  148. package/docs/guides/streams/to-json.mdx +16 -0
  149. package/docs/guides/streams/to-string.mdx +16 -0
  150. package/docs/guides/streams/to-typedarray.mdx +24 -0
  151. package/docs/guides/test/bail.mdx +24 -0
  152. package/docs/guides/test/coverage-threshold.mdx +67 -0
  153. package/docs/guides/test/coverage.mdx +49 -0
  154. package/docs/guides/test/happy-dom.mdx +73 -0
  155. package/docs/guides/test/migrate-from-jest.mdx +125 -0
  156. package/docs/guides/test/mock-clock.mdx +50 -0
  157. package/docs/guides/test/mock-functions.mdx +70 -0
  158. package/docs/guides/test/rerun-each.mdx +16 -0
  159. package/docs/guides/test/run-tests.mdx +116 -0
  160. package/docs/guides/test/skip-tests.mdx +43 -0
  161. package/docs/guides/test/snapshot.mdx +102 -0
  162. package/docs/guides/test/spy-on.mdx +49 -0
  163. package/docs/guides/test/svelte-test.mdx +113 -0
  164. package/docs/guides/test/testing-library.mdx +93 -0
  165. package/docs/guides/test/timeout.mdx +17 -0
  166. package/docs/guides/test/todo-tests.mdx +74 -0
  167. package/docs/guides/test/update-snapshots.mdx +49 -0
  168. package/docs/guides/test/watch-mode.mdx +24 -0
  169. package/docs/guides/util/base64.mdx +17 -0
  170. package/docs/guides/util/deep-equals.mdx +41 -0
  171. package/docs/guides/util/deflate.mdx +20 -0
  172. package/docs/guides/util/detect-bun.mdx +25 -0
  173. package/docs/guides/util/entrypoint.mdx +19 -0
  174. package/docs/guides/util/escape-html.mdx +24 -0
  175. package/docs/guides/util/file-url-to-path.mdx +16 -0
  176. package/docs/guides/util/gzip.mdx +20 -0
  177. package/docs/guides/util/hash-a-password.mdx +56 -0
  178. package/docs/guides/util/import-meta-dir.mdx +15 -0
  179. package/docs/guides/util/import-meta-file.mdx +15 -0
  180. package/docs/guides/util/import-meta-path.mdx +15 -0
  181. package/docs/guides/util/javascript-uuid.mdx +25 -0
  182. package/docs/guides/util/main.mdx +43 -0
  183. package/docs/guides/util/path-to-file-url.mdx +16 -0
  184. package/docs/guides/util/sleep.mdx +24 -0
  185. package/docs/guides/util/version.mdx +23 -0
  186. package/docs/guides/util/which-path-to-executable-bin.mdx +17 -0
  187. package/docs/guides/websocket/compression.mdx +33 -0
  188. package/docs/guides/websocket/context.mdx +74 -0
  189. package/docs/guides/websocket/pubsub.mdx +40 -0
  190. package/docs/guides/websocket/simple.mdx +35 -0
  191. package/docs/guides/write-file/append.mdx +54 -0
  192. package/docs/guides/write-file/basic.mdx +46 -0
  193. package/docs/guides/write-file/blob.mdx +30 -0
  194. package/docs/guides/write-file/cat.mdx +19 -0
  195. package/docs/guides/write-file/file-cp.mdx +18 -0
  196. package/docs/guides/write-file/filesink.mdx +54 -0
  197. package/docs/guides/write-file/response.mdx +19 -0
  198. package/docs/guides/write-file/stdout.mdx +23 -0
  199. package/docs/guides/write-file/stream.mdx +19 -0
  200. package/docs/guides/write-file/unlink.mdx +18 -0
  201. package/docs/index.mdx +133 -0
  202. package/docs/installation.mdx +365 -0
  203. package/docs/pm/bunx.mdx +83 -0
  204. package/docs/pm/catalogs.mdx +292 -0
  205. package/docs/pm/cli/add.mdx +179 -0
  206. package/docs/pm/cli/audit.mdx +60 -0
  207. package/docs/pm/cli/install.mdx +471 -0
  208. package/docs/pm/cli/link.mdx +48 -0
  209. package/docs/pm/cli/outdated.mdx +197 -0
  210. package/docs/pm/cli/patch.mdx +69 -0
  211. package/docs/pm/cli/pm.mdx +319 -0
  212. package/docs/pm/cli/publish.mdx +123 -0
  213. package/docs/pm/cli/remove.mdx +16 -0
  214. package/docs/pm/cli/update.mdx +140 -0
  215. package/docs/pm/cli/why.mdx +84 -0
  216. package/docs/pm/filter.mdx +102 -0
  217. package/docs/pm/global-cache.mdx +72 -0
  218. package/docs/pm/isolated-installs.mdx +205 -0
  219. package/docs/pm/lifecycle.mdx +57 -0
  220. package/docs/pm/lockfile.mdx +64 -0
  221. package/docs/pm/npmrc.mdx +111 -0
  222. package/docs/pm/overrides.mdx +83 -0
  223. package/docs/pm/scopes-registries.mdx +35 -0
  224. package/docs/pm/security-scanner-api.mdx +95 -0
  225. package/docs/pm/workspaces.mdx +109 -0
  226. package/docs/project/benchmarking.mdx +218 -0
  227. package/docs/project/bindgen.mdx +223 -0
  228. package/docs/project/building-windows.mdx +133 -0
  229. package/docs/project/contributing.mdx +343 -0
  230. package/docs/project/feedback.mdx +20 -0
  231. package/docs/project/license.mdx +78 -0
  232. package/docs/project/roadmap.mdx +8 -0
  233. package/docs/quickstart.mdx +240 -0
  234. package/docs/runtime/auto-install.mdx +97 -0
  235. package/docs/runtime/binary-data.mdx +846 -0
  236. package/docs/runtime/bun-apis.mdx +59 -0
  237. package/docs/runtime/bunfig.mdx +642 -0
  238. package/docs/runtime/c-compiler.mdx +204 -0
  239. package/docs/runtime/child-process.mdx +532 -0
  240. package/docs/runtime/color.mdx +267 -0
  241. package/docs/runtime/console.mdx +67 -0
  242. package/docs/runtime/cookies.mdx +454 -0
  243. package/docs/runtime/debugger.mdx +335 -0
  244. package/docs/runtime/environment-variables.mdx +214 -0
  245. package/docs/runtime/ffi.mdx +565 -0
  246. package/docs/runtime/file-io.mdx +306 -0
  247. package/docs/runtime/file-system-router.mdx +118 -0
  248. package/docs/runtime/file-types.mdx +354 -0
  249. package/docs/runtime/glob.mdx +181 -0
  250. package/docs/runtime/globals.mdx +72 -0
  251. package/docs/runtime/hashing.mdx +315 -0
  252. package/docs/runtime/html-rewriter.mdx +340 -0
  253. package/docs/runtime/http/cookies.mdx +79 -0
  254. package/docs/runtime/http/error-handling.mdx +40 -0
  255. package/docs/runtime/http/metrics.mdx +36 -0
  256. package/docs/runtime/http/routing.mdx +289 -0
  257. package/docs/runtime/http/server.mdx +647 -0
  258. package/docs/runtime/http/tls.mdx +101 -0
  259. package/docs/runtime/http/websockets.mdx +404 -0
  260. package/docs/runtime/index.mdx +223 -0
  261. package/docs/runtime/jsx.mdx +115 -0
  262. package/docs/runtime/module-resolution.mdx +342 -0
  263. package/docs/runtime/networking/dns.mdx +111 -0
  264. package/docs/runtime/networking/fetch.mdx +468 -0
  265. package/docs/runtime/networking/tcp.mdx +239 -0
  266. package/docs/runtime/networking/udp.mdx +129 -0
  267. package/docs/runtime/node-api.mdx +19 -0
  268. package/docs/runtime/nodejs-compat.mdx +468 -0
  269. package/docs/runtime/plugins.mdx +405 -0
  270. package/docs/runtime/redis.mdx +582 -0
  271. package/docs/runtime/s3.mdx +863 -0
  272. package/docs/runtime/secrets.mdx +336 -0
  273. package/docs/runtime/semver.mdx +57 -0
  274. package/docs/runtime/shell.mdx +637 -0
  275. package/docs/runtime/sql.mdx +1404 -0
  276. package/docs/runtime/sqlite.mdx +699 -0
  277. package/docs/runtime/streams.mdx +232 -0
  278. package/docs/runtime/templating/create.mdx +269 -0
  279. package/docs/runtime/templating/init.mdx +58 -0
  280. package/docs/runtime/transpiler.mdx +288 -0
  281. package/docs/runtime/typescript.mdx +58 -0
  282. package/docs/runtime/utils.mdx +922 -0
  283. package/docs/runtime/watch-mode.mdx +161 -0
  284. package/docs/runtime/web-apis.mdx +29 -0
  285. package/docs/runtime/workers.mdx +328 -0
  286. package/docs/runtime/yaml.mdx +469 -0
  287. package/docs/snippets/cli/add.mdx +166 -0
  288. package/docs/snippets/cli/build.mdx +196 -0
  289. package/docs/snippets/cli/feedback.mdx +17 -0
  290. package/docs/snippets/cli/init.mdx +84 -0
  291. package/docs/snippets/cli/install.mdx +173 -0
  292. package/docs/snippets/cli/link.mdx +163 -0
  293. package/docs/snippets/cli/outdated.mdx +140 -0
  294. package/docs/snippets/cli/patch.mdx +171 -0
  295. package/docs/snippets/cli/publish.mdx +198 -0
  296. package/docs/snippets/cli/remove.mdx +146 -0
  297. package/docs/snippets/cli/run.mdx +293 -0
  298. package/docs/snippets/cli/test.mdx +100 -0
  299. package/docs/snippets/cli/update.mdx +144 -0
  300. package/docs/snippets/product-card.mdx +32 -0
  301. package/docs/snippets/product-tiles.mdx +94 -0
  302. package/docs/test/code-coverage.mdx +409 -0
  303. package/docs/test/configuration.mdx +467 -0
  304. package/docs/test/dates-times.mdx +129 -0
  305. package/docs/test/discovery.mdx +90 -0
  306. package/docs/test/dom.mdx +226 -0
  307. package/docs/test/index.mdx +380 -0
  308. package/docs/test/lifecycle.mdx +348 -0
  309. package/docs/test/mocks.mdx +637 -0
  310. package/docs/test/reporters.mdx +117 -0
  311. package/docs/test/runtime-behavior.mdx +342 -0
  312. package/docs/test/snapshots.mdx +434 -0
  313. package/docs/test/writing-tests.mdx +635 -0
  314. package/docs/typescript.mdx +54 -0
  315. package/package.json +8 -6
  316. package/test.d.ts +2 -2
@@ -0,0 +1,295 @@
1
+ ---
2
+ title: Build-time constants with --define
3
+ sidebarTitle: Build-time constants
4
+ mode: center
5
+ ---
6
+
7
+ The `--define` flag can be used with `bun build` and `bun build --compile` to inject build-time constants into your application. This is especially useful for embedding metadata like build versions, timestamps, or configuration flags directly into your compiled executables.
8
+
9
+ ```sh terminal icon="terminal"
10
+ bun build --compile --define BUILD_VERSION='"1.2.3"' --define BUILD_TIME='"2024-01-15T10:30:00Z"' src/index.ts --outfile myapp
11
+ ```
12
+
13
+ ---
14
+
15
+ ## Why use build-time constants?
16
+
17
+ Build-time constants are embedded directly into your compiled code, making them:
18
+
19
+ - **Zero runtime overhead** - No environment variable lookups or file reads
20
+ - **Immutable** - Values are baked into the binary at compile time
21
+ - **Optimizable** - Dead code elimination can remove unused branches
22
+ - **Secure** - No external dependencies or configuration files to manage
23
+
24
+ This is similar to `gcc -D` or `#define` in C/C++, but for JavaScript/TypeScript.
25
+
26
+ ---
27
+
28
+ ## Basic usage
29
+
30
+ ### With `bun build`
31
+
32
+ ```sh terminal icon="terminal"
33
+ # Bundle with build-time constants
34
+ bun build --define BUILD_VERSION='"1.0.0"' --define NODE_ENV='"production"' src/index.ts --outdir ./dist
35
+ ```
36
+
37
+ ### With `bun build --compile`
38
+
39
+ ```sh terminal icon="terminal"
40
+ # Compile to executable with build-time constants
41
+ bun build --compile --define BUILD_VERSION='"1.0.0"' --define BUILD_TIME='"2024-01-15T10:30:00Z"' src/cli.ts --outfile mycli
42
+ ```
43
+
44
+ ### JavaScript API
45
+
46
+ ```ts build.ts icon="/icons/typescript.svg"
47
+ await Bun.build({
48
+ entrypoints: ["./src/index.ts"],
49
+ outdir: "./dist",
50
+ define: {
51
+ BUILD_VERSION: '"1.0.0"',
52
+ BUILD_TIME: '"2024-01-15T10:30:00Z"',
53
+ DEBUG: "false",
54
+ },
55
+ });
56
+ ```
57
+
58
+ ---
59
+
60
+ ## Common use cases
61
+
62
+ ### Version information
63
+
64
+ Embed version and build metadata directly into your executable:
65
+
66
+ <CodeGroup>
67
+
68
+ ```ts src/version.ts icon="/icons/typescript.svg"
69
+ // These constants are replaced at build time
70
+ declare const BUILD_VERSION: string;
71
+ declare const BUILD_TIME: string;
72
+ declare const GIT_COMMIT: string;
73
+
74
+ export function getVersion() {
75
+ return {
76
+ version: BUILD_VERSION,
77
+ buildTime: BUILD_TIME,
78
+ commit: GIT_COMMIT,
79
+ };
80
+ }
81
+ ```
82
+
83
+ ```sh Build command
84
+ bun build --compile \
85
+ --define BUILD_VERSION='"1.2.3"' \
86
+ --define BUILD_TIME='"2024-01-15T10:30:00Z"' \
87
+ --define GIT_COMMIT='"abc123"' \
88
+ src/cli.ts --outfile mycli
89
+ ```
90
+
91
+ </CodeGroup>
92
+
93
+ ### Feature flags
94
+
95
+ Use build-time constants to enable/disable features:
96
+
97
+ ```ts src/version.ts icon="/icons/typescript.svg"
98
+ // Replaced at build time
99
+ declare const ENABLE_ANALYTICS: boolean;
100
+ declare const ENABLE_DEBUG: boolean;
101
+
102
+ function trackEvent(event: string) {
103
+ if (ENABLE_ANALYTICS) {
104
+ // This entire block is removed if ENABLE_ANALYTICS is false
105
+ console.log("Tracking:", event);
106
+ }
107
+ }
108
+
109
+ if (ENABLE_DEBUG) {
110
+ console.log("Debug mode enabled");
111
+ }
112
+ ```
113
+
114
+ ```sh
115
+ # Production build - analytics enabled, debug disabled
116
+ bun build --compile --define ENABLE_ANALYTICS=true --define ENABLE_DEBUG=false src/app.ts --outfile app-prod
117
+
118
+ # Development build - both enabled
119
+ bun build --compile --define ENABLE_ANALYTICS=false --define ENABLE_DEBUG=true src/app.ts --outfile app-dev
120
+ ```
121
+
122
+ ### Configuration
123
+
124
+ Replace configuration objects at build time:
125
+
126
+ ```ts src/version.ts icon="/icons/typescript.svg"
127
+ declare const CONFIG: {
128
+ apiUrl: string;
129
+ timeout: number;
130
+ retries: number;
131
+ };
132
+
133
+ // CONFIG is replaced with the actual object at build time
134
+ const response = await fetch(CONFIG.apiUrl, {
135
+ timeout: CONFIG.timeout,
136
+ });
137
+ ```
138
+
139
+ ```sh
140
+ bun build --compile --define 'CONFIG={"apiUrl":"https://api.example.com","timeout":5000,"retries":3}' src/app.ts --outfile app
141
+ ```
142
+
143
+ ---
144
+
145
+ ## Advanced patterns
146
+
147
+ ### Environment-specific builds
148
+
149
+ Create different executables for different environments:
150
+
151
+ ```json
152
+ {
153
+ "scripts": {
154
+ "build:dev": "bun build --compile --define NODE_ENV='\"development\"' --define API_URL='\"http://localhost:3000\"' src/app.ts --outfile app-dev",
155
+ "build:staging": "bun build --compile --define NODE_ENV='\"staging\"' --define API_URL='\"https://staging.example.com\"' src/app.ts --outfile app-staging",
156
+ "build:prod": "bun build --compile --define NODE_ENV='\"production\"' --define API_URL='\"https://api.example.com\"' src/app.ts --outfile app-prod"
157
+ }
158
+ }
159
+ ```
160
+
161
+ ### Using shell commands for dynamic values
162
+
163
+ Generate build-time constants from shell commands:
164
+
165
+ ```sh
166
+ # Use git to get current commit and timestamp
167
+ bun build --compile \
168
+ --define BUILD_VERSION="\"$(git describe --tags --always)\"" \
169
+ --define BUILD_TIME="\"$(date -u +%Y-%m-%dT%H:%M:%SZ)\"" \
170
+ --define GIT_COMMIT="\"$(git rev-parse HEAD)\"" \
171
+ src/cli.ts --outfile mycli
172
+ ```
173
+
174
+ ### Build automation script
175
+
176
+ Create a build script that automatically injects build metadata:
177
+
178
+ ```ts
179
+ // build.ts
180
+ import { $ } from "bun";
181
+
182
+ const version = await $`git describe --tags --always`.text();
183
+ const buildTime = new Date().toISOString();
184
+ const gitCommit = await $`git rev-parse HEAD`.text();
185
+
186
+ await Bun.build({
187
+ entrypoints: ["./src/cli.ts"],
188
+ outdir: "./dist",
189
+ define: {
190
+ BUILD_VERSION: JSON.stringify(version.trim()),
191
+ BUILD_TIME: JSON.stringify(buildTime),
192
+ GIT_COMMIT: JSON.stringify(gitCommit.trim()),
193
+ },
194
+ });
195
+
196
+ console.log(`Built with version ${version.trim()}`);
197
+ ```
198
+
199
+ ---
200
+
201
+ ## Important considerations
202
+
203
+ ### Value format
204
+
205
+ Values must be valid JSON that will be parsed and inlined as JavaScript expressions:
206
+
207
+ ```sh
208
+ # ✅ Strings must be JSON-quoted
209
+ --define VERSION='"1.0.0"'
210
+
211
+ # ✅ Numbers are JSON literals
212
+ --define PORT=3000
213
+
214
+ # ✅ Booleans are JSON literals
215
+ --define DEBUG=true
216
+
217
+ # ✅ Objects and arrays (use single quotes to wrap the JSON)
218
+ --define 'CONFIG={"host":"localhost","port":3000}'
219
+
220
+ # ✅ Arrays work too
221
+ --define 'FEATURES=["auth","billing","analytics"]'
222
+
223
+ # ❌ This won't work - missing quotes around string
224
+ --define VERSION=1.0.0
225
+ ```
226
+
227
+ ### Property keys
228
+
229
+ You can use property access patterns as keys, not just simple identifiers:
230
+
231
+ ```sh
232
+ # ✅ Replace process.env.NODE_ENV with "production"
233
+ --define 'process.env.NODE_ENV="production"'
234
+
235
+ # ✅ Replace process.env.API_KEY with the actual key
236
+ --define 'process.env.API_KEY="abc123"'
237
+
238
+ # ✅ Replace nested properties
239
+ --define 'window.myApp.version="1.0.0"'
240
+
241
+ # ✅ Replace array access
242
+ --define 'process.argv[2]="--production"'
243
+ ```
244
+
245
+ This is particularly useful for environment variables:
246
+
247
+ ```ts
248
+ // Before compilation
249
+ if (process.env.NODE_ENV === "production") {
250
+ console.log("Production mode");
251
+ }
252
+
253
+ // After compilation with --define 'process.env.NODE_ENV="production"'
254
+ if ("production" === "production") {
255
+ console.log("Production mode");
256
+ }
257
+
258
+ // After optimization
259
+ console.log("Production mode");
260
+ ```
261
+
262
+ ### TypeScript declarations
263
+
264
+ For TypeScript projects, declare your constants to avoid type errors:
265
+
266
+ ```ts
267
+ // types/build-constants.d.ts
268
+ declare const BUILD_VERSION: string;
269
+ declare const BUILD_TIME: string;
270
+ declare const NODE_ENV: "development" | "staging" | "production";
271
+ declare const DEBUG: boolean;
272
+ ```
273
+
274
+ ### Cross-platform compatibility
275
+
276
+ When building for multiple platforms, constants work the same way:
277
+
278
+ ```sh
279
+ # Linux
280
+ bun build --compile --target=bun-linux-x64 --define PLATFORM='"linux"' src/app.ts --outfile app-linux
281
+
282
+ # macOS
283
+ bun build --compile --target=bun-darwin-x64 --define PLATFORM='"darwin"' src/app.ts --outfile app-macos
284
+
285
+ # Windows
286
+ bun build --compile --target=bun-windows-x64 --define PLATFORM='"windows"' src/app.ts --outfile app-windows.exe
287
+ ```
288
+
289
+ ---
290
+
291
+ ## Related
292
+
293
+ - [Define constants at runtime](/guides/runtime/define-constant) - Using `--define` with `bun run`
294
+ - [Building executables](/bundler/executables) - Complete guide to `bun build --compile`
295
+ - [Bundler API](/bundler) - Full bundler documentation including `define` option
@@ -0,0 +1,45 @@
1
+ ---
2
+ title: Install and run Bun in GitHub Actions
3
+ sidebarTitle: GitHub Actions
4
+ mode: center
5
+ ---
6
+
7
+ Use the official [`setup-bun`](https://github.com/oven-sh/setup-bun) GitHub Action to install `bun` in your GitHub Actions runner.
8
+
9
+ ```yaml workflow.yml icon="file-code"
10
+ name: my-workflow
11
+ jobs:
12
+ my-job:
13
+ name: my-job
14
+ runs-on: ubuntu-latest
15
+ steps:
16
+ # ...
17
+ - uses: actions/checkout@v4
18
+ - uses: oven-sh/setup-bun@v2 // [!code ++]
19
+
20
+ # run any `bun` or `bunx` command
21
+ - run: bun install // [!code ++]
22
+ - run: bun index.ts // [!code ++]
23
+ - run: bun run build // [!code ++]
24
+ ```
25
+
26
+ ---
27
+
28
+ To specify a version of Bun to install:
29
+
30
+ ```yaml workflow.yml icon="file-code"
31
+ name: my-workflow
32
+ jobs:
33
+ my-job:
34
+ name: my-job
35
+ runs-on: ubuntu-latest
36
+ steps:
37
+ # ...
38
+ - uses: oven-sh/setup-bun@v2
39
+ with: // [!code ++]
40
+ bun-version: 1.2.0 # or "latest", "canary", <sha> // [!code ++]
41
+ ```
42
+
43
+ ---
44
+
45
+ Refer to the [README.md](https://github.com/oven-sh/setup-bun) for complete documentation of the `setup-bun` GitHub Action.
@@ -0,0 +1,61 @@
1
+ ---
2
+ title: Codesign a single-file JavaScript executable on macOS
3
+ description: Fix the "can't be opened because it is from an unidentified developer" Gatekeeper warning when running your JavaScript executable.
4
+ sidebarTitle: Codesign on macOS
5
+ mode: center
6
+ ---
7
+
8
+ Compile your executable using the `--compile` flag.
9
+
10
+ ```sh
11
+ bun build --compile ./path/to/entry.ts --outfile myapp
12
+ ```
13
+
14
+ ---
15
+
16
+ List your available signing identities. One of these will be your signing identity that you pass to the `codesign` command. This command requires macOS.
17
+
18
+ ```sh terminal icon="terminal"
19
+ security find-identity -v -p codesigning
20
+ ```
21
+
22
+ ```txt
23
+ 1. XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX "Developer ID Application: Your Name (ZZZZZZZZZZ)"
24
+ 1 valid identities found
25
+ ```
26
+
27
+ ---
28
+
29
+ Optional, but recommended: create an `entitlements.plist` file with the necessary permissions for the JavaScript engine to work correctly.
30
+
31
+ ```xml entitlements.plist icon="file-code"
32
+ <?xml version="1.0" encoding="UTF-8"?>
33
+ <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
34
+ <plist version="1.0">
35
+ <dict>
36
+ <key>com.apple.security.cs.allow-jit</key>
37
+ <true/>
38
+ <key>com.apple.security.cs.allow-unsigned-executable-memory</key>
39
+ <true/>
40
+ <key>com.apple.security.cs.disable-executable-page-protection</key>
41
+ <true/>
42
+ <key>com.apple.security.cs.allow-dyld-environment-variables</key>
43
+ <true/>
44
+ <key>com.apple.security.cs.disable-library-validation</key>
45
+ <true/>
46
+ </dict>
47
+ </plist>
48
+ ```
49
+
50
+ ---
51
+
52
+ Sign your executable using the `codesign` command and verify it works.
53
+
54
+ ```bash terminal icon="terminal"
55
+ codesign --entitlements entitlements.plist -vvvv --deep --sign "XXXXXXXXXX" ./myapp --force
56
+ codesign -vvv --verify ./myapp
57
+ ```
58
+
59
+ ---
60
+
61
+ For more information on macOS codesigning, refer to [Apple's Code Signing documentation](https://developer.apple.com/documentation/security/code_signing_services). For details about creating single-file executables with Bun, see [Standalone Executables](/bundler/executables). This guide requires Bun v1.2.4 or newer.
@@ -0,0 +1,149 @@
1
+ ---
2
+ title: Define and replace static globals & constants
3
+ sidebarTitle: Define constants
4
+ mode: center
5
+ ---
6
+
7
+ The `--define` flag lets you declare statically-analyzable constants and globals. It replace all usages of an identifier or property in a JavaScript or TypeScript file with a constant value. This feature is supported at runtime and also in `bun build`. This is sort of similar to `#define` in C/C++, except for JavaScript.
8
+
9
+ ```sh terminal icon="terminal"
10
+ bun --define process.env.NODE_ENV="'production'" src/index.ts # Runtime
11
+ bun build --define process.env.NODE_ENV="'production'" src/index.ts # Build
12
+ ```
13
+
14
+ ---
15
+
16
+ These statically-known values are used by Bun for dead code elimination and other optimizations.
17
+
18
+ ```ts
19
+ if (process.env.NODE_ENV === "production") {
20
+ console.log("Production mode");
21
+ } else {
22
+ console.log("Development mode");
23
+ }
24
+ ```
25
+
26
+ ---
27
+
28
+ Before the code reaches the JavaScript engine, Bun replaces `process.env.NODE_ENV` with `"production"`.
29
+
30
+ ```ts
31
+ if ("production" === "production") {
32
+ // [!code ++]
33
+ console.log("Production mode");
34
+ } else {
35
+ console.log("Development mode");
36
+ }
37
+ ```
38
+
39
+ ---
40
+
41
+ It doesn't stop there. Bun's optimizing transpiler is smart enough to do some basic constant folding.
42
+
43
+ Since `"production" === "production"` is always `true`, Bun replaces the entire expression with the `true` value.
44
+
45
+ ```ts
46
+ if (true) {
47
+ // [!code ++]
48
+ console.log("Production mode");
49
+ } else {
50
+ console.log("Development mode");
51
+ }
52
+ ```
53
+
54
+ ---
55
+
56
+ And finally, Bun detects the `else` branch is not reachable, and eliminates it.
57
+
58
+ ```ts
59
+ console.log("Production mode");
60
+ ```
61
+
62
+ ---
63
+
64
+ ## What types of values are supported?
65
+
66
+ Values can be strings, identifiers, properties, or JSON.
67
+
68
+ ### Replace global identifiers
69
+
70
+ To make all usages of `window` be `undefined`, you can use the following command.
71
+
72
+ ```sh
73
+ bun --define window="undefined" src/index.ts
74
+ ```
75
+
76
+ This can be useful when Server-Side Rendering (SSR) or when you want to make sure that the code doesn't depend on the `window` object.
77
+
78
+ ```js
79
+ if (typeof window !== "undefined") {
80
+ console.log("Client-side code");
81
+ } else {
82
+ console.log("Server-side code");
83
+ }
84
+ ```
85
+
86
+ You can also set the value to be another identifier. For example, to make all usages of `global` be `globalThis`, you can use the following command.
87
+
88
+ ```sh
89
+ bun --define global="globalThis" src/index.ts
90
+ ```
91
+
92
+ `global` is a global object in Node.js, but not in web browsers. So, you can use this to fix some cases where the code assumes that `global` is available.
93
+
94
+ ### Replace values with JSON
95
+
96
+ `--define` can also be used to replace values with JSON objects and arrays.
97
+
98
+ To replace all usages of `AWS` with the JSON object `{"ACCESS_KEY":"abc","SECRET_KEY":"def"}`, you can use the following command.
99
+
100
+ ```sh
101
+ # JSON
102
+ bun --define AWS='{"ACCESS_KEY":"abc","SECRET_KEY":"def"}' src/index.ts
103
+ ```
104
+
105
+ Those will be transformed into the equivalent JavaScript code.
106
+
107
+ From:
108
+
109
+ ```ts
110
+ console.log(AWS.ACCESS_KEY); // => "abc"
111
+ ```
112
+
113
+ To:
114
+
115
+ ```ts
116
+ console.log("abc");
117
+ ```
118
+
119
+ ### Replace values with other properties
120
+
121
+ You can also pass properties to the `--define` flag.
122
+
123
+ For example, to replace all usages of `console.write` with `console.log`, you can use the following command (requires Bun v1.1.5 or later)
124
+
125
+ ```sh
126
+ bun --define console.write=console.log src/index.ts
127
+ ```
128
+
129
+ That transforms the following input:
130
+
131
+ ```ts
132
+ console.write("Hello, world!");
133
+ ```
134
+
135
+ Into the following output:
136
+
137
+ ```ts
138
+ console.log("Hello, world!");
139
+ ```
140
+
141
+ ## How is this different than setting a variable?
142
+
143
+ You can also set `process.env.NODE_ENV` to `"production"` in your code, but that won't help with dead code elimination. In JavaScript, property accesses can have side effects. Getters & setters can be functions, and even dynamically defined (due to prototype chains and Proxy). Even if you set `process.env.NODE_ENV` to `"production"`, on the next line, it is not safe for static analysis tools to assume that `process.env.NODE_ENV`is`"production"`.
144
+
145
+ ## How is this different than find-and-replace or string replacement?
146
+
147
+ The `--define` flag operates on the AST (Abstract Syntax Tree) level, not on the text level. It happens during the transpilation process, which means it can be used in optimizations like dead code elimination.
148
+
149
+ String replacement tools tend to have escaping issues and replace unintended parts of the code.
@@ -0,0 +1,39 @@
1
+ ---
2
+ title: Delete directories
3
+ sidebarTitle: Delete directories
4
+ mode: center
5
+ ---
6
+
7
+ To recursively delete a directory and all its contents, use `rm` from `node:fs/promises`. This is like running `rm -rf` in JavaScript.
8
+
9
+ ```ts delete-directory.ts icon="/icons/typescript.svg"
10
+ import { rm } from "node:fs/promises";
11
+
12
+ // Delete a directory and all its contents
13
+ await rm("path/to/directory", { recursive: true, force: true });
14
+ ```
15
+
16
+ ---
17
+
18
+ These options configure the deletion behavior:
19
+
20
+ - `recursive: true` - Delete subdirectories and their contents
21
+ - `force: true` - Don't throw errors if the directory doesn't exist
22
+
23
+ You can also use it without `force` to ensure the directory exists:
24
+
25
+ ```ts delete-directory.ts icon="/icons/typescript.svg"
26
+ try {
27
+ await rm("path/to/directory", { recursive: true });
28
+ } catch (error) {
29
+ if (error.code === "ENOENT") {
30
+ console.log("Directory doesn't exist");
31
+ } else {
32
+ throw error;
33
+ }
34
+ }
35
+ ```
36
+
37
+ ---
38
+
39
+ See [Docs > API > FileSystem](https://bun.com/docs/api/file-io) for more filesystem operations.
@@ -0,0 +1,21 @@
1
+ ---
2
+ title: Delete files
3
+ sidebarTitle: Delete files
4
+ mode: center
5
+ ---
6
+
7
+ To delete a file, use `Bun.file(path).delete()`.
8
+
9
+ ```ts delete-file.ts icon="/icons/typescript.svg"
10
+ // Delete a file
11
+ const file = Bun.file("path/to/file.txt");
12
+ await file.delete();
13
+
14
+ // Now the file doesn't exist
15
+ const exists = await file.exists();
16
+ // => false
17
+ ```
18
+
19
+ ---
20
+
21
+ See [Docs > API > FileSystem](https://bun.com/docs/api/file-io) for more filesystem operations.
@@ -0,0 +1,28 @@
1
+ ---
2
+ title: Inspect memory usage using V8 heap snapshots
3
+ sidebarTitle: Heap snapshots
4
+ mode: center
5
+ ---
6
+
7
+ Bun implements V8's heap snapshot API, which allows you to create snapshots of the heap at runtime. This helps debug memory leaks in your JavaScript/TypeScript application.
8
+
9
+ ```ts snapshot.ts icon="/icons/typescript.svg"
10
+ import v8 from "node:v8";
11
+
12
+ // Creates a heap snapshot file with an auto-generated name
13
+ const snapshotPath = v8.writeHeapSnapshot();
14
+ console.log(`Heap snapshot written to: ${snapshotPath}`);
15
+ ```
16
+
17
+ ---
18
+
19
+ ## Inspect memory in Chrome DevTools
20
+
21
+ To view V8 heap snapshots in Chrome DevTools:
22
+
23
+ 1. Open Chrome DevTools (F12 or right-click and select "Inspect")
24
+ 2. Go to the "Memory" tab
25
+ 3. Click the "Load" button (folder icon)
26
+ 4. Select your `.heapsnapshot` file
27
+
28
+ <Frame>![Chrome DevTools Memory Tab](/images/chrome-devtools-memory.png)</Frame>
@@ -0,0 +1,17 @@
1
+ ---
2
+ title: Import a HTML file as text
3
+ sidebarTitle: Import HTML
4
+ mode: center
5
+ ---
6
+
7
+ To import a `.html` file in Bun as a text file, use the `type: "text"` attribute in the import statement.
8
+
9
+ ```ts file.ts icon="/icons/typescript.svg"
10
+ import html from "./file.html" with { type: "text" };
11
+
12
+ console.log(html); // <!DOCTYPE html><html><head>...
13
+ ```
14
+
15
+ This can also be used with hot module reloading and/or watch mode to force Bun to reload whenever the `./file.html` file changes.
16
+
17
+ This feature was added in Bun v1.1.5.