To upgrade:
bun upgrade
What's new
This release adds source maps for JS output, several web APIs to bun.js (and HTMLRewriter
), parser support for ES2022 syntax, improves parsing speed for long strings, makes bun dev
10% faster on macOS and fixes a lot of crashes.
Note: the WASM build is not quite ready yet, but I'm working on it! The main thing I'm uncertain of is whether to release it with Bun.Transpiler
as the API, or with a partially-implemented esbuild
-compatible API. So if you would like to use it and have opinions there, do say
bun.js
Thanks to source maps, errors in bun.js show the source code instead of the transpiled code now:
New APIs:
HTMLRewriter
– fast jQuery-like streaming HTML parser API in Cloudflare Workers, powered by LOLHTML (the same parser in cloudflare workers)setTimeout
,setInterval
,clearTimeout
, andclearInterval
Response.clone
,Request.clone
,Request.bodyUsed
,Response.bodyUsed
,Response.headers
atob
,btoa
Blob
, includingBlob.text()
,Blob.slice()
,Blob.arrayBuffer()
andRequest.blob()
,Response.blob()
console.trace()
is now implementedBun.inspect
lets you format likeconsole.log
but get back a stringBun.unsafe.arrayBufferToString(buffer)
lets you quickly & unsafely cast an ArrayBuffer-like object to a string. Useful when you've already encoded the string.
Misc:
console.log
support for JSX!ResolveError.prototype.toString()
andBuildError.prototype.toString()
work as expectedconsole.log
support forRequest
,Response
,Headers
- async node fs functions now have a compatibility wrapper that runs the sync version in the next tick. non-blocking support will come eventually
- Unlike the Web API,
FetchEvent.respondWith
will automatically await any promises now - Fixed UTF-8 bug with console.
{time, count, timeEnd, profile, profileEnd, count, countReset}
- Fix Program terminates with pending promises #122
- Fix a memory leak with microtasks - d0a9b40
- Fix bug causing async wasm compilation to never run - 7b8113c
bun dev
- Source Maps for non-bundled code
- 10% faster http requests on macOS
- Reduce HMR latency by using better syscalls (send multiple messages in one syscall with sendmsg)
- Improve HMR performance when multiple tabs are open (pooling websocket threads)
- Send “Date” header
- Fix crash on macOS that sometimes occurred when closing the tab
- Fixed several memory leaks and cases where bun would sometimes segfault
bun install
bun pm cache
prints the cache dir path- Fix bug when parsing package.json that has non-ascii characters
bun run
- Set $npm_config_user_agent
- Set $npm_package_json
- Set $NODE and $npm_node_exec path based on what’s available in $PATH
bun create
- Fix a crash due to allocation failure - 2d1538e
JavaScript Transpiler
- Source Maps support for unbundled code (app code)
- 69% faster at parsing long strings
- [microbenchmark] 10% faster at parsing HTML entity codes in JSX
- Support for static initialization blocks (ES2022)
- Support for private static class fields and methods (ES2022)
- Support for private static class brand checks (ES2022)
- Support for private identifiers (ES2019)
- Fix printing bug in strings that have certain escape sequences and non-ascii characters
- Always print escaped Unicode codepoints instead of the original. This more closely matches what Babel & esbuild do
- For TypeScript classes, match the semantics of useDefineForClassFields for fields and constructor arguments
Bun.Transpiler
:
autoImportJSX
flag lets you enable or disable importing auto-importing thejsxImportSource
.allowBunRuntime
flag lets you disable importing bun's runtime code. This is useful if you want to use bun as just a transpiler. It is disabled by default, as I would expect people to useBun.Transpiler
mostly for other environments than bun itself
Infrastructural changes
I started using the debug build of mimalloc, bun's memory allocator for the debug builds of bun and that uncovered a few otherwise difficult-to-reproduce crashes