@depup/bun-types 1.3.11-depup.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (361) hide show
  1. package/CLAUDE.md +105 -0
  2. package/README.md +25 -0
  3. package/bun.d.ts +8712 -0
  4. package/bun.ns.d.ts +5 -0
  5. package/bundle.d.ts +74 -0
  6. package/changes.json +5 -0
  7. package/deprecated.d.ts +184 -0
  8. package/devserver.d.ts +187 -0
  9. package/docs/README.md +28 -0
  10. package/docs/bundler/bytecode.mdx +447 -0
  11. package/docs/bundler/css.mdx +1024 -0
  12. package/docs/bundler/esbuild.mdx +304 -0
  13. package/docs/bundler/executables.mdx +1318 -0
  14. package/docs/bundler/fullstack.mdx +1086 -0
  15. package/docs/bundler/hot-reloading.mdx +229 -0
  16. package/docs/bundler/html-static.mdx +498 -0
  17. package/docs/bundler/index.mdx +1840 -0
  18. package/docs/bundler/loaders.mdx +451 -0
  19. package/docs/bundler/macros.mdx +328 -0
  20. package/docs/bundler/minifier.mdx +1286 -0
  21. package/docs/bundler/plugins.mdx +477 -0
  22. package/docs/bundler/standalone-html.mdx +314 -0
  23. package/docs/feedback.mdx +75 -0
  24. package/docs/guides/binary/arraybuffer-to-array.mdx +29 -0
  25. package/docs/guides/binary/arraybuffer-to-blob.mdx +26 -0
  26. package/docs/guides/binary/arraybuffer-to-buffer.mdx +27 -0
  27. package/docs/guides/binary/arraybuffer-to-string.mdx +17 -0
  28. package/docs/guides/binary/arraybuffer-to-typedarray.mdx +41 -0
  29. package/docs/guides/binary/blob-to-arraybuffer.mdx +16 -0
  30. package/docs/guides/binary/blob-to-dataview.mdx +16 -0
  31. package/docs/guides/binary/blob-to-stream.mdx +16 -0
  32. package/docs/guides/binary/blob-to-string.mdx +17 -0
  33. package/docs/guides/binary/blob-to-typedarray.mdx +16 -0
  34. package/docs/guides/binary/buffer-to-arraybuffer.mdx +16 -0
  35. package/docs/guides/binary/buffer-to-blob.mdx +16 -0
  36. package/docs/guides/binary/buffer-to-readablestream.mdx +43 -0
  37. package/docs/guides/binary/buffer-to-string.mdx +27 -0
  38. package/docs/guides/binary/buffer-to-typedarray.mdx +16 -0
  39. package/docs/guides/binary/dataview-to-string.mdx +17 -0
  40. package/docs/guides/binary/typedarray-to-arraybuffer.mdx +27 -0
  41. package/docs/guides/binary/typedarray-to-blob.mdx +18 -0
  42. package/docs/guides/binary/typedarray-to-buffer.mdx +16 -0
  43. package/docs/guides/binary/typedarray-to-dataview.mdx +16 -0
  44. package/docs/guides/binary/typedarray-to-readablestream.mdx +43 -0
  45. package/docs/guides/binary/typedarray-to-string.mdx +18 -0
  46. package/docs/guides/deployment/aws-lambda.mdx +204 -0
  47. package/docs/guides/deployment/digital-ocean.mdx +161 -0
  48. package/docs/guides/deployment/google-cloud-run.mdx +194 -0
  49. package/docs/guides/deployment/railway.mdx +145 -0
  50. package/docs/guides/deployment/render.mdx +82 -0
  51. package/docs/guides/deployment/vercel.mdx +97 -0
  52. package/docs/guides/ecosystem/astro.mdx +82 -0
  53. package/docs/guides/ecosystem/discordjs.mdx +80 -0
  54. package/docs/guides/ecosystem/docker.mdx +151 -0
  55. package/docs/guides/ecosystem/drizzle.mdx +195 -0
  56. package/docs/guides/ecosystem/elysia.mdx +31 -0
  57. package/docs/guides/ecosystem/express.mdx +43 -0
  58. package/docs/guides/ecosystem/gel.mdx +261 -0
  59. package/docs/guides/ecosystem/hono.mdx +47 -0
  60. package/docs/guides/ecosystem/mongoose.mdx +92 -0
  61. package/docs/guides/ecosystem/neon-drizzle.mdx +234 -0
  62. package/docs/guides/ecosystem/neon-serverless-postgres.mdx +60 -0
  63. package/docs/guides/ecosystem/nextjs.mdx +103 -0
  64. package/docs/guides/ecosystem/nuxt.mdx +96 -0
  65. package/docs/guides/ecosystem/pm2.mdx +55 -0
  66. package/docs/guides/ecosystem/prisma-postgres.mdx +169 -0
  67. package/docs/guides/ecosystem/prisma.mdx +164 -0
  68. package/docs/guides/ecosystem/qwik.mdx +114 -0
  69. package/docs/guides/ecosystem/react.mdx +52 -0
  70. package/docs/guides/ecosystem/remix.mdx +97 -0
  71. package/docs/guides/ecosystem/sentry.mdx +54 -0
  72. package/docs/guides/ecosystem/solidstart.mdx +62 -0
  73. package/docs/guides/ecosystem/ssr-react.mdx +49 -0
  74. package/docs/guides/ecosystem/stric.mdx +54 -0
  75. package/docs/guides/ecosystem/sveltekit.mdx +138 -0
  76. package/docs/guides/ecosystem/systemd.mdx +114 -0
  77. package/docs/guides/ecosystem/tanstack-start.mdx +791 -0
  78. package/docs/guides/ecosystem/upstash.mdx +87 -0
  79. package/docs/guides/ecosystem/vite.mdx +77 -0
  80. package/docs/guides/html-rewriter/extract-links.mdx +71 -0
  81. package/docs/guides/html-rewriter/extract-social-meta.mdx +97 -0
  82. package/docs/guides/http/cluster.mdx +69 -0
  83. package/docs/guides/http/fetch-unix.mdx +35 -0
  84. package/docs/guides/http/fetch.mdx +26 -0
  85. package/docs/guides/http/file-uploads.mdx +97 -0
  86. package/docs/guides/http/hot.mdx +28 -0
  87. package/docs/guides/http/proxy.mdx +50 -0
  88. package/docs/guides/http/server.mdx +48 -0
  89. package/docs/guides/http/simple.mdx +20 -0
  90. package/docs/guides/http/sse.mdx +91 -0
  91. package/docs/guides/http/stream-file.mdx +50 -0
  92. package/docs/guides/http/stream-iterator.mdx +49 -0
  93. package/docs/guides/http/stream-node-streams-in-bun.mdx +22 -0
  94. package/docs/guides/http/tls.mdx +32 -0
  95. package/docs/guides/index.mdx +10 -0
  96. package/docs/guides/install/add-dev.mdx +28 -0
  97. package/docs/guides/install/add-git.mdx +40 -0
  98. package/docs/guides/install/add-optional.mdx +27 -0
  99. package/docs/guides/install/add-peer.mdx +45 -0
  100. package/docs/guides/install/add-tarball.mdx +35 -0
  101. package/docs/guides/install/add.mdx +44 -0
  102. package/docs/guides/install/azure-artifacts.mdx +76 -0
  103. package/docs/guides/install/cicd.mdx +43 -0
  104. package/docs/guides/install/custom-registry.mdx +32 -0
  105. package/docs/guides/install/from-npm-install-to-bun-install.mdx +230 -0
  106. package/docs/guides/install/git-diff-bun-lockfile.mdx +48 -0
  107. package/docs/guides/install/jfrog-artifactory.mdx +28 -0
  108. package/docs/guides/install/npm-alias.mdx +25 -0
  109. package/docs/guides/install/registry-scope.mdx +40 -0
  110. package/docs/guides/install/trusted.mdx +52 -0
  111. package/docs/guides/install/workspaces.mdx +70 -0
  112. package/docs/guides/install/yarnlock.mdx +51 -0
  113. package/docs/guides/process/argv.mdx +66 -0
  114. package/docs/guides/process/ctrl-c.mdx +18 -0
  115. package/docs/guides/process/ipc.mdx +69 -0
  116. package/docs/guides/process/nanoseconds.mdx +15 -0
  117. package/docs/guides/process/os-signals.mdx +31 -0
  118. package/docs/guides/process/spawn-stderr.mdx +34 -0
  119. package/docs/guides/process/spawn-stdout.mdx +28 -0
  120. package/docs/guides/process/spawn.mdx +43 -0
  121. package/docs/guides/process/stdin.mdx +62 -0
  122. package/docs/guides/read-file/arraybuffer.mdx +30 -0
  123. package/docs/guides/read-file/buffer.mdx +21 -0
  124. package/docs/guides/read-file/exists.mdx +18 -0
  125. package/docs/guides/read-file/json.mdx +19 -0
  126. package/docs/guides/read-file/mime.mdx +22 -0
  127. package/docs/guides/read-file/stream.mdx +28 -0
  128. package/docs/guides/read-file/string.mdx +24 -0
  129. package/docs/guides/read-file/uint8array.mdx +23 -0
  130. package/docs/guides/read-file/watch.mdx +66 -0
  131. package/docs/guides/runtime/build-time-constants.mdx +295 -0
  132. package/docs/guides/runtime/cicd.mdx +45 -0
  133. package/docs/guides/runtime/codesign-macos-executable.mdx +61 -0
  134. package/docs/guides/runtime/define-constant.mdx +149 -0
  135. package/docs/guides/runtime/delete-directory.mdx +39 -0
  136. package/docs/guides/runtime/delete-file.mdx +21 -0
  137. package/docs/guides/runtime/heap-snapshot.mdx +28 -0
  138. package/docs/guides/runtime/import-html.mdx +15 -0
  139. package/docs/guides/runtime/import-json.mdx +46 -0
  140. package/docs/guides/runtime/import-json5.mdx +74 -0
  141. package/docs/guides/runtime/import-toml.mdx +32 -0
  142. package/docs/guides/runtime/import-yaml.mdx +104 -0
  143. package/docs/guides/runtime/read-env.mdx +37 -0
  144. package/docs/guides/runtime/set-env.mdx +51 -0
  145. package/docs/guides/runtime/shell.mdx +42 -0
  146. package/docs/guides/runtime/timezone.mdx +38 -0
  147. package/docs/guides/runtime/tsconfig-paths.mdx +31 -0
  148. package/docs/guides/runtime/typescript.mdx +51 -0
  149. package/docs/guides/runtime/vscode-debugger.mdx +47 -0
  150. package/docs/guides/runtime/web-debugger.mdx +103 -0
  151. package/docs/guides/streams/node-readable-to-arraybuffer.mdx +13 -0
  152. package/docs/guides/streams/node-readable-to-blob.mdx +13 -0
  153. package/docs/guides/streams/node-readable-to-json.mdx +14 -0
  154. package/docs/guides/streams/node-readable-to-string.mdx +14 -0
  155. package/docs/guides/streams/node-readable-to-uint8array.mdx +13 -0
  156. package/docs/guides/streams/to-array.mdx +16 -0
  157. package/docs/guides/streams/to-arraybuffer.mdx +16 -0
  158. package/docs/guides/streams/to-blob.mdx +16 -0
  159. package/docs/guides/streams/to-buffer.mdx +17 -0
  160. package/docs/guides/streams/to-json.mdx +16 -0
  161. package/docs/guides/streams/to-string.mdx +16 -0
  162. package/docs/guides/streams/to-typedarray.mdx +24 -0
  163. package/docs/guides/test/bail.mdx +24 -0
  164. package/docs/guides/test/concurrent-test-glob.mdx +146 -0
  165. package/docs/guides/test/coverage-threshold.mdx +67 -0
  166. package/docs/guides/test/coverage.mdx +49 -0
  167. package/docs/guides/test/happy-dom.mdx +73 -0
  168. package/docs/guides/test/migrate-from-jest.mdx +125 -0
  169. package/docs/guides/test/mock-clock.mdx +50 -0
  170. package/docs/guides/test/mock-functions.mdx +70 -0
  171. package/docs/guides/test/rerun-each.mdx +16 -0
  172. package/docs/guides/test/run-tests.mdx +116 -0
  173. package/docs/guides/test/skip-tests.mdx +43 -0
  174. package/docs/guides/test/snapshot.mdx +102 -0
  175. package/docs/guides/test/spy-on.mdx +49 -0
  176. package/docs/guides/test/svelte-test.mdx +113 -0
  177. package/docs/guides/test/testing-library.mdx +93 -0
  178. package/docs/guides/test/timeout.mdx +17 -0
  179. package/docs/guides/test/todo-tests.mdx +74 -0
  180. package/docs/guides/test/update-snapshots.mdx +49 -0
  181. package/docs/guides/test/watch-mode.mdx +24 -0
  182. package/docs/guides/util/base64.mdx +17 -0
  183. package/docs/guides/util/deep-equals.mdx +41 -0
  184. package/docs/guides/util/deflate.mdx +20 -0
  185. package/docs/guides/util/detect-bun.mdx +28 -0
  186. package/docs/guides/util/entrypoint.mdx +19 -0
  187. package/docs/guides/util/escape-html.mdx +24 -0
  188. package/docs/guides/util/file-url-to-path.mdx +16 -0
  189. package/docs/guides/util/gzip.mdx +20 -0
  190. package/docs/guides/util/hash-a-password.mdx +56 -0
  191. package/docs/guides/util/import-meta-dir.mdx +15 -0
  192. package/docs/guides/util/import-meta-file.mdx +15 -0
  193. package/docs/guides/util/import-meta-path.mdx +15 -0
  194. package/docs/guides/util/javascript-uuid.mdx +25 -0
  195. package/docs/guides/util/main.mdx +43 -0
  196. package/docs/guides/util/path-to-file-url.mdx +16 -0
  197. package/docs/guides/util/sleep.mdx +24 -0
  198. package/docs/guides/util/upgrade.mdx +93 -0
  199. package/docs/guides/util/version.mdx +23 -0
  200. package/docs/guides/util/which-path-to-executable-bin.mdx +17 -0
  201. package/docs/guides/websocket/compression.mdx +33 -0
  202. package/docs/guides/websocket/context.mdx +79 -0
  203. package/docs/guides/websocket/pubsub.mdx +43 -0
  204. package/docs/guides/websocket/simple.mdx +38 -0
  205. package/docs/guides/write-file/append.mdx +54 -0
  206. package/docs/guides/write-file/basic.mdx +46 -0
  207. package/docs/guides/write-file/blob.mdx +30 -0
  208. package/docs/guides/write-file/cat.mdx +19 -0
  209. package/docs/guides/write-file/file-cp.mdx +18 -0
  210. package/docs/guides/write-file/filesink.mdx +54 -0
  211. package/docs/guides/write-file/response.mdx +19 -0
  212. package/docs/guides/write-file/stdout.mdx +23 -0
  213. package/docs/guides/write-file/stream.mdx +19 -0
  214. package/docs/guides/write-file/unlink.mdx +18 -0
  215. package/docs/index.mdx +133 -0
  216. package/docs/installation.mdx +372 -0
  217. package/docs/pm/bunx.mdx +91 -0
  218. package/docs/pm/catalogs.mdx +292 -0
  219. package/docs/pm/cli/add.mdx +179 -0
  220. package/docs/pm/cli/audit.mdx +60 -0
  221. package/docs/pm/cli/info.mdx +70 -0
  222. package/docs/pm/cli/install.mdx +591 -0
  223. package/docs/pm/cli/link.mdx +61 -0
  224. package/docs/pm/cli/outdated.mdx +197 -0
  225. package/docs/pm/cli/patch.mdx +69 -0
  226. package/docs/pm/cli/pm.mdx +323 -0
  227. package/docs/pm/cli/publish.mdx +131 -0
  228. package/docs/pm/cli/remove.mdx +16 -0
  229. package/docs/pm/cli/update.mdx +140 -0
  230. package/docs/pm/cli/why.mdx +84 -0
  231. package/docs/pm/filter.mdx +127 -0
  232. package/docs/pm/global-cache.mdx +72 -0
  233. package/docs/pm/isolated-installs.mdx +220 -0
  234. package/docs/pm/lifecycle.mdx +64 -0
  235. package/docs/pm/lockfile.mdx +64 -0
  236. package/docs/pm/npmrc.mdx +245 -0
  237. package/docs/pm/overrides.mdx +83 -0
  238. package/docs/pm/scopes-registries.mdx +35 -0
  239. package/docs/pm/security-scanner-api.mdx +95 -0
  240. package/docs/pm/workspaces.mdx +115 -0
  241. package/docs/project/benchmarking.mdx +296 -0
  242. package/docs/project/bindgen.mdx +223 -0
  243. package/docs/project/building-windows.mdx +143 -0
  244. package/docs/project/contributing.mdx +366 -0
  245. package/docs/project/feedback.mdx +20 -0
  246. package/docs/project/license.mdx +78 -0
  247. package/docs/project/roadmap.mdx +8 -0
  248. package/docs/quickstart.mdx +251 -0
  249. package/docs/runtime/archive.mdx +452 -0
  250. package/docs/runtime/auto-install.mdx +97 -0
  251. package/docs/runtime/binary-data.mdx +846 -0
  252. package/docs/runtime/bun-apis.mdx +60 -0
  253. package/docs/runtime/bunfig.mdx +765 -0
  254. package/docs/runtime/c-compiler.mdx +204 -0
  255. package/docs/runtime/child-process.mdx +659 -0
  256. package/docs/runtime/color.mdx +267 -0
  257. package/docs/runtime/console.mdx +67 -0
  258. package/docs/runtime/cookies.mdx +454 -0
  259. package/docs/runtime/cron.mdx +358 -0
  260. package/docs/runtime/csrf.mdx +171 -0
  261. package/docs/runtime/debugger.mdx +335 -0
  262. package/docs/runtime/environment-variables.mdx +231 -0
  263. package/docs/runtime/ffi.mdx +567 -0
  264. package/docs/runtime/file-io.mdx +306 -0
  265. package/docs/runtime/file-system-router.mdx +118 -0
  266. package/docs/runtime/file-types.mdx +482 -0
  267. package/docs/runtime/glob.mdx +181 -0
  268. package/docs/runtime/globals.mdx +72 -0
  269. package/docs/runtime/hashing.mdx +315 -0
  270. package/docs/runtime/html-rewriter.mdx +333 -0
  271. package/docs/runtime/http/cookies.mdx +79 -0
  272. package/docs/runtime/http/error-handling.mdx +40 -0
  273. package/docs/runtime/http/metrics.mdx +36 -0
  274. package/docs/runtime/http/routing.mdx +289 -0
  275. package/docs/runtime/http/server.mdx +672 -0
  276. package/docs/runtime/http/tls.mdx +101 -0
  277. package/docs/runtime/http/websockets.mdx +414 -0
  278. package/docs/runtime/index.mdx +223 -0
  279. package/docs/runtime/json5.mdx +271 -0
  280. package/docs/runtime/jsonl.mdx +188 -0
  281. package/docs/runtime/jsx.mdx +115 -0
  282. package/docs/runtime/markdown.mdx +381 -0
  283. package/docs/runtime/module-resolution.mdx +374 -0
  284. package/docs/runtime/networking/dns.mdx +111 -0
  285. package/docs/runtime/networking/fetch.mdx +484 -0
  286. package/docs/runtime/networking/tcp.mdx +239 -0
  287. package/docs/runtime/networking/udp.mdx +180 -0
  288. package/docs/runtime/node-api.mdx +19 -0
  289. package/docs/runtime/nodejs-compat.mdx +468 -0
  290. package/docs/runtime/plugins.mdx +419 -0
  291. package/docs/runtime/redis.mdx +583 -0
  292. package/docs/runtime/repl.mdx +176 -0
  293. package/docs/runtime/s3.mdx +881 -0
  294. package/docs/runtime/secrets.mdx +340 -0
  295. package/docs/runtime/semver.mdx +57 -0
  296. package/docs/runtime/shell.mdx +637 -0
  297. package/docs/runtime/sql.mdx +1404 -0
  298. package/docs/runtime/sqlite.mdx +721 -0
  299. package/docs/runtime/streams.mdx +232 -0
  300. package/docs/runtime/templating/create.mdx +269 -0
  301. package/docs/runtime/templating/init.mdx +58 -0
  302. package/docs/runtime/toml.mdx +238 -0
  303. package/docs/runtime/transpiler.mdx +288 -0
  304. package/docs/runtime/typescript.mdx +58 -0
  305. package/docs/runtime/utils.mdx +1010 -0
  306. package/docs/runtime/watch-mode.mdx +161 -0
  307. package/docs/runtime/web-apis.mdx +29 -0
  308. package/docs/runtime/workers.mdx +314 -0
  309. package/docs/runtime/yaml.mdx +470 -0
  310. package/docs/snippets/cli/add.mdx +166 -0
  311. package/docs/snippets/cli/build.mdx +197 -0
  312. package/docs/snippets/cli/bunx.mdx +49 -0
  313. package/docs/snippets/cli/feedback.mdx +17 -0
  314. package/docs/snippets/cli/init.mdx +84 -0
  315. package/docs/snippets/cli/install.mdx +173 -0
  316. package/docs/snippets/cli/link.mdx +163 -0
  317. package/docs/snippets/cli/outdated.mdx +140 -0
  318. package/docs/snippets/cli/patch.mdx +171 -0
  319. package/docs/snippets/cli/publish.mdx +198 -0
  320. package/docs/snippets/cli/remove.mdx +146 -0
  321. package/docs/snippets/cli/run.mdx +305 -0
  322. package/docs/snippets/cli/test.mdx +105 -0
  323. package/docs/snippets/cli/update.mdx +144 -0
  324. package/docs/test/code-coverage.mdx +409 -0
  325. package/docs/test/configuration.mdx +574 -0
  326. package/docs/test/dates-times.mdx +129 -0
  327. package/docs/test/discovery.mdx +90 -0
  328. package/docs/test/dom.mdx +226 -0
  329. package/docs/test/index.mdx +409 -0
  330. package/docs/test/lifecycle.mdx +366 -0
  331. package/docs/test/mocks.mdx +637 -0
  332. package/docs/test/reporters.mdx +126 -0
  333. package/docs/test/runtime-behavior.mdx +342 -0
  334. package/docs/test/snapshots.mdx +434 -0
  335. package/docs/test/writing-tests.mdx +672 -0
  336. package/docs/typescript.mdx +54 -0
  337. package/extensions.d.ts +40 -0
  338. package/fetch.d.ts +79 -0
  339. package/ffi.d.ts +1154 -0
  340. package/globals.d.ts +2067 -0
  341. package/html-rewriter.d.ts +186 -0
  342. package/index.d.ts +32 -0
  343. package/jsc.d.ts +233 -0
  344. package/jsx.d.ts +11 -0
  345. package/overrides.d.ts +376 -0
  346. package/package.json +53 -0
  347. package/redis.d.ts +3352 -0
  348. package/s3.d.ts +1354 -0
  349. package/security.d.ts +101 -0
  350. package/serve.d.ts +1296 -0
  351. package/shell.d.ts +380 -0
  352. package/sql.d.ts +887 -0
  353. package/sqlite.d.ts +1322 -0
  354. package/test-globals.d.ts +22 -0
  355. package/test.d.ts +2392 -0
  356. package/vendor/expect-type/branding.d.ts +283 -0
  357. package/vendor/expect-type/index.d.ts +1207 -0
  358. package/vendor/expect-type/messages.d.ts +395 -0
  359. package/vendor/expect-type/overloads.d.ts +669 -0
  360. package/vendor/expect-type/utils.d.ts +431 -0
  361. package/wasm.d.ts +193 -0
@@ -0,0 +1,115 @@
1
+ ---
2
+ title: "JSX"
3
+ description: "Built-in JSX and TSX support in Bun with configurable transpilation options"
4
+ ---
5
+
6
+ Bun supports `.jsx` and `.tsx` files out of the box. Bun's internal transpiler converts JSX syntax into vanilla JavaScript before execution.
7
+
8
+ ```ts react.tsx icon="/icons/typescript.svg"
9
+ function Component(props: {message: string}) {
10
+ return (
11
+ <body>
12
+ <h1 style={{color: 'red'}}>{props.message}</h1>
13
+ </body>
14
+ );
15
+ }
16
+
17
+ console.log(<Component message="Hello world!" />);
18
+ ```
19
+
20
+ ## Configuration
21
+
22
+ Bun reads your `tsconfig.json` or `jsconfig.json` configuration files to determines how to perform the JSX transform internally. To avoid using either of these, the following options can also be defined in [`bunfig.toml`](/docs/runtime/bunfig).
23
+
24
+ The following compiler options are respected.
25
+
26
+ ### [`jsx`](https://www.typescriptlang.org/tsconfig#jsx)
27
+
28
+ How JSX constructs are transformed into vanilla JavaScript internally. The table below lists the possible values of `jsx`, along with their transpilation of the following simple JSX component:
29
+
30
+ ```tsx
31
+ <Box width={5}>Hello</Box>
32
+ ```
33
+
34
+ | Compiler options | Transpiled output |
35
+ | --------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
36
+ | `json<br/>{<br/> "jsx": "react"<br/>}<br/>` | `tsx<br/>import { createElement } from "react";<br/>createElement("Box", { width: 5 }, "Hello");<br/>` |
37
+ | `json<br/>{<br/> "jsx": "react-jsx"<br/>}<br/>` | `tsx<br/>import { jsx } from "react/jsx-runtime";<br/>jsx("Box", { width: 5 }, "Hello");<br/>` |
38
+ | `json<br/>{<br/> "jsx": "react-jsxdev"<br/>}<br/>` | `tsx<br/>import { jsxDEV } from "react/jsx-dev-runtime";<br/>jsxDEV(<br/> "Box",<br/> { width: 5, children: "Hello" },<br/> undefined,<br/> false,<br/> undefined,<br/> this,<br/>);<br/>`<br/><br/>The `jsxDEV` variable name is a convention used by React. The `DEV` suffix is a visible way to indicate that the code is intended for use in development. The development version of React is slower and includes additional validity checks & debugging tools. |
39
+ | `json<br/>{<br/> "jsx": "preserve"<br/>}<br/>` | `tsx<br/>// JSX is not transpiled<br/>// "preserve" is not supported by Bun currently<br/><Box width={5}>Hello</Box><br/>` |
40
+
41
+ ### [`jsxFactory`](https://www.typescriptlang.org/tsconfig#jsxFactory)
42
+
43
+ <Note>**Note** — Only applicable when `jsx` is `react`.</Note>
44
+
45
+ The function name used to represent JSX constructs. Default value is `"createElement"`. This is useful for libraries like [Preact](https://preactjs.com/) that use a different function name (`"h"`).
46
+
47
+ | Compiler options | Transpiled output |
48
+ | --------------------------------------------------------------------- | ------------------------------------------------------------------------------ |
49
+ | `json<br/>{<br/> "jsx": "react",<br/> "jsxFactory": "h"<br/>}<br/>` | `tsx<br/>import { h } from "react";<br/>h("Box", { width: 5 }, "Hello");<br/>` |
50
+
51
+ ### [`jsxFragmentFactory`](https://www.typescriptlang.org/tsconfig#jsxFragmentFactory)
52
+
53
+ <Note>**Note** — Only applicable when `jsx` is `react`.</Note>
54
+
55
+ The function name used to represent [JSX fragments](https://react.dev/reference/react/Fragment) such as `<>Hello</>`; only applicable when `jsx` is `react`. Default value is `"Fragment"`.
56
+
57
+ | Compiler options | Transpiled output |
58
+ | ------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------- |
59
+ | `json<br/>{<br/> "jsx": "react",<br/> "jsxFactory": "myjsx",<br/> "jsxFragmentFactory": "MyFragment"<br/>}<br/>` | `tsx<br/>// input<br/><>Hello</>;<br/><br/>// output<br/>import { myjsx, MyFragment } from "react";<br/>myjsx(MyFragment, null, "Hello");<br/>` |
60
+
61
+ ### [`jsxImportSource`](https://www.typescriptlang.org/tsconfig#jsxImportSource)
62
+
63
+ <Note>**Note** — Only applicable when `jsx` is `react-jsx` or `react-jsxdev`.</Note>
64
+
65
+ The module from which the component factory function (`createElement`, `jsx`, `jsxDEV`, etc) will be imported. Default value is `"react"`. This will typically be necessary when using a component library like Preact.
66
+
67
+ | Compiler options | Transpiled output |
68
+ | ------------------------------------------------------------------------------------------------------------------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
69
+ | `jsonc<br/>{<br/> "jsx": "react",<br/> // jsxImportSource is not defined<br/> // default to "react"<br/>}<br/>` | `tsx<br/>import { jsx } from "react/jsx-runtime";<br/>jsx("Box", { width: 5, children: "Hello" });<br/>` |
70
+ | `jsonc<br/>{<br/> "jsx": "react-jsx",<br/> "jsxImportSource": "preact",<br/>}<br/>` | `tsx<br/>import { jsx } from "preact/jsx-runtime";<br/>jsx("Box", { width: 5, children: "Hello" });<br/>` |
71
+ | `jsonc<br/>{<br/> "jsx": "react-jsxdev",<br/> "jsxImportSource": "preact",<br/>}<br/>` | `tsx<br/>// /jsx-runtime is automatically appended<br/>import { jsxDEV } from "preact/jsx-dev-runtime";<br/>jsxDEV(<br/> "Box",<br/> { width: 5, children: "Hello" },<br/> undefined,<br/> false,<br/> undefined,<br/> this,<br/>);<br/>` |
72
+
73
+ ### JSX pragma
74
+
75
+ All of these values can be set on a per-file basis using _pragmas_. A pragma is a special comment that sets a compiler option in a particular file.
76
+
77
+ | Pragma | Equivalent config |
78
+ | ---------------------------------------- | ------------------------------------------------------------------ |
79
+ | `ts<br/>// @jsx h<br/>` | `jsonc<br/>{<br/> "jsxFactory": "h",<br/>}<br/>` |
80
+ | `ts<br/>// @jsxFrag MyFragment<br/>` | `jsonc<br/>{<br/> "jsxFragmentFactory": "MyFragment",<br/>}<br/>` |
81
+ | `ts<br/>// @jsxImportSource preact<br/>` | `jsonc<br/>{<br/> "jsxImportSource": "preact",<br/>}<br/>` |
82
+
83
+ ## Logging
84
+
85
+ Bun implements special logging for JSX to make debugging easier. Given the following file:
86
+
87
+ ```tsx index.tsx icon="/icons/typescript.svg"
88
+ import { Stack, UserCard } from "./components";
89
+
90
+ console.log(
91
+ <Stack>
92
+ <UserCard name="Dom" bio="Street racer and Corona lover" />
93
+ <UserCard name="Jakob" bio="Super spy and Dom's secret brother" />
94
+ </Stack>,
95
+ );
96
+ ```
97
+
98
+ Bun will pretty-print the component tree when logged:
99
+
100
+ <Frame>![JSX logging output](https://github.com/oven-sh/bun/assets/3084745/d29db51d-6837-44e2-b8be-84fc1b9e9d97)</Frame>
101
+
102
+ ## Prop punning
103
+
104
+ The Bun runtime also supports "prop punning" for JSX. This is a shorthand syntax useful for assigning a variable to a prop with the same name.
105
+
106
+ ```tsx react.tsx icon="/icons/typescript.svg"
107
+ function Div(props: {className: string;}) {
108
+ const {className} = props;
109
+
110
+ // without punning
111
+ return <div className={className} />;
112
+ // with punning
113
+ return <div {className} />;
114
+ }
115
+ ```
@@ -0,0 +1,381 @@
1
+ ---
2
+ title: Markdown
3
+ description: Parse and render Markdown with Bun's built-in Markdown API, supporting GFM extensions and custom rendering callbacks
4
+ ---
5
+
6
+ <Callout type="note">
7
+ **Unstable API** — This API is under active development and may change in future versions of Bun.
8
+ </Callout>
9
+
10
+ Bun includes a fast, built-in Markdown parser written in Zig. It supports GitHub Flavored Markdown (GFM) extensions and provides three APIs:
11
+
12
+ - `Bun.markdown.html()` — render Markdown to an HTML string
13
+ - `Bun.markdown.render()` — render Markdown with custom callbacks for each element
14
+ - `Bun.markdown.react()` — render Markdown to React JSX elements
15
+
16
+ ---
17
+
18
+ ## `Bun.markdown.html()`
19
+
20
+ Convert a Markdown string to HTML.
21
+
22
+ ```ts
23
+ const html = Bun.markdown.html("# Hello **world**");
24
+ // "<h1>Hello <strong>world</strong></h1>\n"
25
+ ```
26
+
27
+ GFM extensions like tables, strikethrough, and task lists are enabled by default:
28
+
29
+ ```ts
30
+ const html = Bun.markdown.html(`
31
+ | Feature | Status |
32
+ |-------------|--------|
33
+ | Tables | ~~done~~ |
34
+ | Strikethrough| ~~done~~ |
35
+ | Task lists | done |
36
+ `);
37
+ ```
38
+
39
+ ### Options
40
+
41
+ Pass an options object as the second argument to configure the parser:
42
+
43
+ ```ts
44
+ const html = Bun.markdown.html("some markdown", {
45
+ tables: true, // GFM tables (default: true)
46
+ strikethrough: true, // GFM strikethrough (default: true)
47
+ tasklists: true, // GFM task lists (default: true)
48
+ tagFilter: true, // GFM tag filter for disallowed HTML tags
49
+ autolinks: true, // Autolink URLs, emails, and www. links
50
+ });
51
+ ```
52
+
53
+ All available options:
54
+
55
+ | Option | Default | Description |
56
+ | ---------------------- | ------- | ----------------------------------------------------------- |
57
+ | `tables` | `false` | GFM tables |
58
+ | `strikethrough` | `false` | GFM strikethrough (`~~text~~`) |
59
+ | `tasklists` | `false` | GFM task lists (`- [x] item`) |
60
+ | `autolinks` | `false` | Enable autolinks — see [Autolinks](#autolinks) |
61
+ | `headings` | `false` | Heading IDs and autolinks — see [Heading IDs](#heading-ids) |
62
+ | `hardSoftBreaks` | `false` | Treat soft line breaks as hard breaks |
63
+ | `wikiLinks` | `false` | Enable `[[wiki links]]` |
64
+ | `underline` | `false` | `__text__` renders as `<u>` instead of `<strong>` |
65
+ | `latexMath` | `false` | Enable `$inline$` and `$$display$$` math |
66
+ | `collapseWhitespace` | `false` | Collapse whitespace in text |
67
+ | `permissiveAtxHeaders` | `false` | ATX headers without space after `#` |
68
+ | `noIndentedCodeBlocks` | `false` | Disable indented code blocks |
69
+ | `noHtmlBlocks` | `false` | Disable HTML blocks |
70
+ | `noHtmlSpans` | `false` | Disable inline HTML |
71
+ | `tagFilter` | `false` | GFM tag filter for disallowed HTML tags |
72
+
73
+ #### Autolinks
74
+
75
+ Pass `true` to enable all autolink types, or an object for granular control:
76
+
77
+ ```ts
78
+ // Enable all autolinks (URL, WWW, email)
79
+ Bun.markdown.html("Visit www.example.com", { autolinks: true });
80
+
81
+ // Enable only specific types
82
+ Bun.markdown.html("Visit www.example.com", {
83
+ autolinks: { url: true, www: true },
84
+ });
85
+ ```
86
+
87
+ #### Heading IDs
88
+
89
+ Pass `true` to enable both heading IDs and autolink headings, or an object for granular control:
90
+
91
+ ```ts
92
+ // Enable heading IDs and autolink headings
93
+ Bun.markdown.html("## Hello World", { headings: true });
94
+ // '<h2 id="hello-world"><a href="#hello-world">Hello World</a></h2>\n'
95
+
96
+ // Enable only heading IDs (no autolink)
97
+ Bun.markdown.html("## Hello World", { headings: { ids: true } });
98
+ // '<h2 id="hello-world">Hello World</h2>\n'
99
+ ```
100
+
101
+ ---
102
+
103
+ ## `Bun.markdown.render()`
104
+
105
+ Parse Markdown and render it using custom JavaScript callbacks. This gives you full control over the output format — you can generate HTML with custom classes, React elements, ANSI terminal output, or any other string format.
106
+
107
+ ```ts
108
+ const result = Bun.markdown.render("# Hello **world**", {
109
+ heading: (children, { level }) => `<h${level} class="title">${children}</h${level}>`,
110
+ strong: children => `<b>${children}</b>`,
111
+ paragraph: children => `<p>${children}</p>`,
112
+ });
113
+ // '<h1 class="title">Hello <b>world</b></h1>'
114
+ ```
115
+
116
+ ### Callback signature
117
+
118
+ Each callback receives:
119
+
120
+ 1. **`children`** — the accumulated content of the element as a string
121
+ 2. **`meta`** (optional) — an object with element-specific metadata
122
+
123
+ Return a string to replace the element's rendering. Return `null` or `undefined` to omit the element from the output entirely. If no callback is registered for an element, its children pass through unchanged.
124
+
125
+ ### Block callbacks
126
+
127
+ | Callback | Meta | Description |
128
+ | ------------ | --------------------------------------------- | ---------------------------------------------------------------------------------------- |
129
+ | `heading` | `{ level, id? }` | Heading level 1–6. `id` is set when `headings: { ids: true }` is enabled |
130
+ | `paragraph` | — | Paragraph block |
131
+ | `blockquote` | — | Blockquote block |
132
+ | `code` | `{ language? }` | Fenced or indented code block. `language` is the info-string when specified on the fence |
133
+ | `list` | `{ ordered, start?, depth }` | `depth` is nesting level (0 = top-level). `start` is set for ordered lists |
134
+ | `listItem` | `{ index, depth, ordered, start?, checked? }` | See [List item meta](#list-item-meta) below |
135
+ | `hr` | — | Horizontal rule |
136
+ | `table` | — | Table block |
137
+ | `thead` | — | Table head |
138
+ | `tbody` | — | Table body |
139
+ | `tr` | — | Table row |
140
+ | `th` | `{ align? }` | Table header cell. `align` is `"left"`, `"center"`, `"right"`, or absent |
141
+ | `td` | `{ align? }` | Table data cell |
142
+ | `html` | — | Raw HTML content |
143
+
144
+ #### List item meta
145
+
146
+ The `listItem` callback receives everything needed to render markers directly:
147
+
148
+ - `index` — 0-based position within the parent list
149
+ - `depth` — the parent list's nesting level (0 = top-level)
150
+ - `ordered` — whether the parent list is ordered
151
+ - `start` — the parent list's start number (only when `ordered` is true)
152
+ - `checked` — task list state (only for `- [x]` / `- [ ]` items)
153
+
154
+ ### Inline callbacks
155
+
156
+ | Callback | Meta | Description |
157
+ | --------------- | ---------------------------------- | ---------------------------- |
158
+ | `strong` | — | Strong emphasis (`**text**`) |
159
+ | `emphasis` | — | Emphasis (`*text*`) |
160
+ | `link` | `{ href: string, title?: string }` | Link |
161
+ | `image` | `{ src: string, title?: string }` | Image |
162
+ | `codespan` | — | Inline code (`` `code` ``) |
163
+ | `strikethrough` | — | Strikethrough (`~~text~~`) |
164
+ | `text` | — | Plain text content |
165
+
166
+ ### Examples
167
+
168
+ #### Custom HTML with classes
169
+
170
+ ```ts
171
+ const html = Bun.markdown.render("# Title\n\nHello **world**", {
172
+ heading: (children, { level }) => `<h${level} class="heading heading-${level}">${children}</h${level}>`,
173
+ paragraph: children => `<p class="body">${children}</p>`,
174
+ strong: children => `<strong class="bold">${children}</strong>`,
175
+ });
176
+ ```
177
+
178
+ #### Stripping all formatting
179
+
180
+ ```ts
181
+ const plaintext = Bun.markdown.render("# Hello **world**", {
182
+ heading: children => children,
183
+ paragraph: children => children,
184
+ strong: children => children,
185
+ emphasis: children => children,
186
+ link: children => children,
187
+ image: () => "",
188
+ code: children => children,
189
+ codespan: children => children,
190
+ });
191
+ // "Hello world"
192
+ ```
193
+
194
+ #### Omitting elements
195
+
196
+ Return `null` or `undefined` to remove an element from the output:
197
+
198
+ ```ts
199
+ const result = Bun.markdown.render("# Title\n\n![logo](img.png)\n\nHello", {
200
+ image: () => null, // Remove all images
201
+ heading: children => children,
202
+ paragraph: children => children + "\n",
203
+ });
204
+ // "Title\nHello\n"
205
+ ```
206
+
207
+ #### ANSI terminal output
208
+
209
+ ```ts
210
+ const ansi = Bun.markdown.render("# Hello\n\nThis is **bold** and *italic*", {
211
+ heading: (children, { level }) => `\x1b[1;4m${children}\x1b[0m\n`,
212
+ paragraph: children => children + "\n",
213
+ strong: children => `\x1b[1m${children}\x1b[22m`,
214
+ emphasis: children => `\x1b[3m${children}\x1b[23m`,
215
+ });
216
+ ```
217
+
218
+ #### Nested list numbering
219
+
220
+ The `listItem` callback receives everything needed to render markers directly — no post-processing:
221
+
222
+ ```ts
223
+ const result = Bun.markdown.render("1. first\n 1. sub-a\n 2. sub-b\n2. second", {
224
+ listItem: (children, { index, depth, ordered, start }) => {
225
+ const n = (start ?? 1) + index;
226
+ // 1. 2. 3. at depth 0, a. b. c. at depth 1, i. ii. iii. at depth 2
227
+ const marker = !ordered
228
+ ? "-"
229
+ : depth === 0
230
+ ? `${n}.`
231
+ : depth === 1
232
+ ? `${String.fromCharCode(96 + n)}.`
233
+ : `${toRoman(n)}.`;
234
+ return " ".repeat(depth) + marker + " " + children.trimEnd() + "\n";
235
+ },
236
+ // Prepend a newline so nested lists are separated from their parent item's text
237
+ list: children => "\n" + children,
238
+ });
239
+ // 1. first
240
+ // a. sub-a
241
+ // b. sub-b
242
+ // 2. second
243
+ ```
244
+
245
+ #### Code block syntax highlighting
246
+
247
+ ````ts
248
+ const result = Bun.markdown.render("```js\nconsole.log('hi')\n```", {
249
+ code: (children, meta) => {
250
+ const lang = meta?.language ?? "";
251
+ return `<pre><code class="language-${lang}">${children}</code></pre>`;
252
+ },
253
+ });
254
+ ````
255
+
256
+ ### Parser options
257
+
258
+ Parser options are passed as a separate third argument:
259
+
260
+ ```ts
261
+ const result = Bun.markdown.render(
262
+ "Visit www.example.com",
263
+ {
264
+ link: (children, { href }) => `[${children}](${href})`,
265
+ paragraph: children => children,
266
+ },
267
+ { autolinks: true },
268
+ );
269
+ ```
270
+
271
+ ---
272
+
273
+ ## `Bun.markdown.react()`
274
+
275
+ Render Markdown directly to React elements. Returns a `<Fragment>` that you can use as a component return value.
276
+
277
+ ```tsx
278
+ function Markdown({ text }: { text: string }) {
279
+ return Bun.markdown.react(text);
280
+ }
281
+ ```
282
+
283
+ ### Server-side rendering
284
+
285
+ Works with `renderToString()` and React Server Components:
286
+
287
+ ```tsx
288
+ import { renderToString } from "react-dom/server";
289
+
290
+ const html = renderToString(Bun.markdown.react("# Hello **world**"));
291
+ // "<h1>Hello <strong>world</strong></h1>"
292
+ ```
293
+
294
+ ### Component overrides
295
+
296
+ Replace any HTML element with a custom React component by passing it in the second argument, keyed by tag name:
297
+
298
+ ```tsx
299
+ function Code({ language, children }) {
300
+ return (
301
+ <pre data-language={language}>
302
+ <code>{children}</code>
303
+ </pre>
304
+ );
305
+ }
306
+
307
+ function Link({ href, title, children }) {
308
+ return (
309
+ <a href={href} title={title} target="_blank" rel="noopener noreferrer">
310
+ {children}
311
+ </a>
312
+ );
313
+ }
314
+
315
+ function Heading({ id, children }) {
316
+ return (
317
+ <h2 id={id}>
318
+ <a href={`#${id}`}>{children}</a>
319
+ </h2>
320
+ );
321
+ }
322
+
323
+ const el = Bun.markdown.react(
324
+ content,
325
+ {
326
+ pre: Code,
327
+ a: Link,
328
+ h2: Heading,
329
+ },
330
+ { headings: { ids: true } },
331
+ );
332
+ ```
333
+
334
+ #### Available overrides
335
+
336
+ Every HTML tag produced by the parser can be overridden:
337
+
338
+ | Option | Props | Description |
339
+ | ------------ | ---------------------------- | --------------------------------------------------------------- |
340
+ | `h1`–`h6` | `{ id?, children }` | Headings. `id` is set when `headings: { ids: true }` is enabled |
341
+ | `p` | `{ children }` | Paragraph |
342
+ | `blockquote` | `{ children }` | Blockquote |
343
+ | `pre` | `{ language?, children }` | Code block. `language` is the info string (e.g. `"js"`) |
344
+ | `hr` | `{}` | Horizontal rule (no children) |
345
+ | `ul` | `{ children }` | Unordered list |
346
+ | `ol` | `{ start, children }` | Ordered list. `start` is the first item number |
347
+ | `li` | `{ checked?, children }` | List item. `checked` is set for task list items |
348
+ | `table` | `{ children }` | Table |
349
+ | `thead` | `{ children }` | Table head |
350
+ | `tbody` | `{ children }` | Table body |
351
+ | `tr` | `{ children }` | Table row |
352
+ | `th` | `{ align?, children }` | Table header cell |
353
+ | `td` | `{ align?, children }` | Table data cell |
354
+ | `em` | `{ children }` | Emphasis (`*text*`) |
355
+ | `strong` | `{ children }` | Strong (`**text**`) |
356
+ | `a` | `{ href, title?, children }` | Link |
357
+ | `img` | `{ src, alt?, title? }` | Image (no children) |
358
+ | `code` | `{ children }` | Inline code |
359
+ | `del` | `{ children }` | Strikethrough (`~~text~~`) |
360
+ | `br` | `{}` | Hard line break (no children) |
361
+
362
+ ### React 18 and older
363
+
364
+ By default, elements use `Symbol.for('react.transitional.element')` as the `$$typeof` symbol. For React 18 and older, pass `reactVersion: 18` in the options (third argument):
365
+
366
+ ```tsx
367
+ function Markdown({ text }: { text: string }) {
368
+ return Bun.markdown.react(text, undefined, { reactVersion: 18 });
369
+ }
370
+ ```
371
+
372
+ ### Parser options
373
+
374
+ All [parser options](#options) are passed as the third argument:
375
+
376
+ ```tsx
377
+ const el = Bun.markdown.react("## Hello World", undefined, {
378
+ headings: { ids: true },
379
+ autolinks: true,
380
+ });
381
+ ```