Bun 1.4.2 explained: 2026 Elysia build and AsyncLocalStorage leak
Official Bun blog on 5 September: v1.4.2 patches v1.4.1 regressions that broke Elysia builds and leaked AsyncLocalStorage. CMYK JPEGs and a WebKit bump share the page.
On 5 September 2026 the official Bun blog shipped v1.4.2. The lead sentence names two regressions from v1.4.1: a bun build name clash that broke Elysia, and an AsyncLocalStorage leak. The same page also lists a hang in @discordjs/ws, CMYK JPEG decoding in Bun.Image, a rare JIT crash, and a GC crash on musl.
The search term is the patch number. Official text: upgrade with bun upgrade. This article only checks that blog. It is not an install guide, and it is not the August Zig-to-Rust 1.4.0 story.
What the public notes print
| Item | What they wrote | Limit |
|---|---|---|
| Build | bun build renamed a nested var onto a same-block let | Builds importing Elysia failed to load |
| Memory | Timers inside exit / nested run kept the outer store | getStore() stayed correct; only memory grew |
| Worker | online was not first; @discordjs/ws missed the first message | Order now matches Node.js |
| Engine | About 350 upstream WebKit commits | Not a new runtime product |
How to read this release
- 1
This is a 1.4.1 patch
The official lead puts both regressions in the first sentence. Do not treat it as a re-ship of the 1.4.0 Zig-to-Rust rewrite, or as a new framework.
- 2
The build failure has a printed error
The blog prints the broken output: var exports2 = exports2. The error is SyntaxError: Cannot declare a var variable that shadows a let/const/class variable. The same bug could also give a let the name of a parameter or catch binding and compute wrong values.
- 3
The leak does not change getStore()
A timer, immediate, or pending promise created inside store.exit() or a nested store.run() kept the outer store alive for as long as that handle existed. Official text: the return value was still right; only memory was held.
- 4
Images and the engine share the page
Bun.Image now decodes four-component CMYK and YCCK JPEGs and converts them to RGB; they used to fail with Image: decode failed. The same page says about 350 WebKit commits landed: Intl, TypedArray, a Proxy crash, cheaper Date objects.
What else the same page lists
JSON errors match JSON.parse
.json() on Response, Blob, Bun.file(), or proc.stdout no longer rejects invalid JSON with only Failed to parse JSON. It now surfaces the SyntaxError text JSON.parse would give.
Install and Alpine
bun install and bun add could panic when bun.lockb or a cached manifest stored a package-name hash that did not match the name. On musl (Alpine), splice, shift, or shrinking length on an array of objects could crash on a GC thread or hang while the GC was marking.
Linux file descriptors
If registering a Bun.file().writer() FileSink with epoll failed (for example fs.epoll.max_user_watches exhausted), the descriptor could be closed twice.
Limits
The official page does not date 1.4.3. Next step is bun.com/blog/bun-v1.4.2. If you only needed a short meeting without another account wall, wbstorm is a browser room ID — see also create or join a room and whiteboard basics.
# Sources
# bun.com/blog/bun-v1.4.2
# 2026-09-05Is this the Zig-to-Rust rewrite?
No. This post is the v1.4.2 patch. The 1.4.0 rewrite story is from August and is not this page’s date.
Did Elysia itself ship a bug?
Official text: v1.4.1 bun build renamed a nested var onto a same-block let. Builds that imported Elysia then failed to load. This is not an Elysia release note.
Is this a product how-to?
No. This article only checks the 5 September Bun blog. It is not a bun upgrade handbook.