---
title: Bun v0.3.0
description: Massive reduction in memory usage, faster text encoding, improved Jest compatibility, file-system routing, automatic package installs, and a lot more
date: "2022-12-07T06:00:00Z"
author: ashcon
thumbText: v0.3.0
shareImage: "/v0.3.0.png"
bannerImage: "/v0.3.0.png"
---

Today, Bun has two main priorities: **stability** and **compatibility** with Node.js and Web APIs. In v0.3.0, we've made significant progress toward both of these goals. There are a lot of changes to cover, so we'll start with the highlights.

{% callout %}
**Note** — We're a small team working to make building with JavaScript faster and simpler. If you're interested in joining us, check out our [careers](/careers) page, we're hiring JavaScript, C/C++, and Zig engineers!
{% /callout %}

To install:

```bash
curl -fsSL https://bun.sh/install | bash
```

To upgrade:

```bash
bun upgrade
```

## Stability improvements

- Bun now uses [3-5x less memory](https://twitter.com/jarredsumner/status/1598360859650113536/photo/1) under load. Previously, Bun wasn't scheduling garbage collection in coordination with the event loop. (See the benchmark [here](https://github.com/oven-sh/bun/commit/31f025fa02c1c206944effe4395c841fc9e6b2fb))

- Bun now has better formatting for [`console.log()`](https://developer.mozilla.org/en-US/docs/Web/API/Console/log) (important for debugging!)

  ![Better formatting for console.log()](https://user-images.githubusercontent.com/709451/206131955-1678c2ba-b3ca-4294-ae81-ad39e05e73c5.png)

- Bun has fixed several bugs with text encoding and now uses [simdutf](https://github.com/simdutf/simdutf) for [3x faster](https://twitter.com/jarredsumner/status/1598510404686450688) [`TextEncoder.encodeInto()`](https://developer.mozilla.org/en-US/docs/Web/API/TextEncoder/encodeInto)

  ![Bun now has 3x faster text encoding](https://user-images.githubusercontent.com/3238291/205817178-bf25dcea-6b6f-487b-bdf1-6728f0e4aec1.png)

- Bun now works in more Linux environments, including Amazon Linux 2 and builds for Vercel and Cloudflare Pages. (Previously, you might have seen errors like: "version 'GLIBC_2.29' not found")

There were also many other changes that:

- Increased test coverage for [`fetch()`](https://developer.mozilla.org/en-US/docs/Web/API/fetch), [`Bun.spawn()`](https://github.com/oven-sh/bun#bunspawn--spawn-a-process) and [`Bun.spawnSync()`](https://github.com/oven-sh/bun#bunspawn--spawn-a-process), streaming files, and much more
- Improved the bindings between JavaScriptCore and Zig, which has led to [many](https://github.com/oven-sh/bun/commit/d6d04cab2415b662e1a1a9ce937fa42bfb33d823) [garbage-collector](https://github.com/oven-sh/bun/commit/ee939f7a6dbe3571cf17b4b8135edff5f2497b48) [related](https://github.com/oven-sh/bun/commit/17e8181b4ec760bea8acdd2f25c3dec3c693be50) [crashes](https://github.com/oven-sh/bun/commit/7c7769a7c7db3b7932a2726adb9d64e011c1bed6) [being](https://github.com/oven-sh/bun/commit/38b5a85d8ae030acdead6d169735317a66d23d94) [fixed](https://github.com/oven-sh/bun/commit/88ca7fd73854758f9019722d3d491e599af354e8)
- Fixed various issues when using [`WebCrypto`](https://developer.mozilla.org/en-US/docs/Web/API/Web_Crypto_API)
- Fixed encoding and compression issues with [`fetch()`](https://developer.mozilla.org/en-US/docs/Web/API/fetch)
- Fixed a data corruption bug in [`fetch()`](https://developer.mozilla.org/en-US/docs/Web/API/fetch)
- Fixed a crash when async code was run within [`setTimeout()`](https://developer.mozilla.org/en-US/docs/Web/API/setTimeout)

## Node.js compatibility

Bun now supports the following Node.js APIs:

- [`node:child_process`](https://nodejs.org/api/child_process.html#child-process)
- [`process.stdout`](https://nodejs.org/api/process.html#processstdout), [`process.stderr`](https://nodejs.org/api/process.html#processstderr), and [`process.stdin`](https://nodejs.org/api/process.html#processstdin)
- [`Error.captureStackTrace()`](https://v8.dev/docs/stack-trace-api#stack-trace-collection-for-custom-exceptions) (ported from V8 to WebKit)
- [`fs.createWriteStream()`](https://nodejs.org/api/fs.html#fscreatewritestreampath-options) and [`fs.createReadStream()`](https://nodejs.org/api/fs.html#fscreatereadstreampath-options)
- [`process.release`](https://nodejs.org/api/process.html#processrelease)

## New and improved APIs

At a glance, here's what changed:

- [`console`](https://developer.mozilla.org/en-US/docs/Web/API/Console_API) is now an [`AsyncIterable`](#console-is-iterable)
- [`FileSystemRouter`](#file-system-router) is a Next.js-like file-system router for resolving files
- [`bun:ffi`](https://github.com/oven-sh/bun#bunffi-foreign-functions-interface) now supports [threadsafe callbacks](https://github.com/oven-sh/bun/commit/006a2f37ddb133f61c6fa672652663204c2d2e54) from native code into JavaScript
- `bun:test` gets 10 [new matchers](#expect-matchers) like [`expect().toEqual()`](https://jestjs.io/docs/expect#toequalvalue)
- `bun:test` supports a `done` callback for async tests
- `Content-Range` header support for [`Bun.serve()`](https://github.com/oven-sh/bun#bunserve---fast-http-server) when streaming files
- Bun's transpiler works with the TypeScript `satisfies` keyword
- [`WebSocketServer`](https://github.com/oven-sh/bun#websockets-with-bunserve) gets a [`publish()`](https://github.com/oven-sh/bun#publishsubscribe) method to publish messages to all clients
- [`Array.fromAsync()`](#array-from-async) and [`ArrayBuffer.resize()`](#resizable-array-buffer) with thanks to WebKit
- `Bun.file().size` now always reports a [number](https://github.com/oven-sh/bun/commit/7a193ed243732f2bb606dc8f0c87d77058f9fff3)
- [`Headers`](#header-apis) gets support for `.toJSON()` and `.getAll("Set-Cookie")`
- `Bun.deepEquals()` which is used by `expect().toEqual()`

### `console` is now an `AsyncIterable`

Bun is making it easier to read input from your console with APIs that make sense for non-browsers. [`console`](https://developer.mozilla.org/en-US/docs/Web/API/console) is now an [`AsyncIterable`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol/asyncIterator) which allows you to stream lines of text from stdin by `for await`-looping over `console`.

```ts
for await (const line of console) {
  console.log("Received:", line);
}
```

To write to stdout, you can also use `console.write()`, which skips the formatting of [`console.log()`](https://developer.mozilla.org/en-US/docs/Web/API/Console/log).

```ts
console.write("hello");
console.write("hello", "world", "\n");

const response = await fetch("https://example.com/");
console.write("Response: ", await response.arrayBuffer());
```

## Automatic package installs from npm

When there is no `node_modules` directory, Bun will now automatically install packages from npm on `import`. To save disk space, packages are downloaded into the shared global cache directory. For security, `postinstall` scripts are not run.

{% image height="348" alt="react-version" src="https://user-images.githubusercontent.com/709451/205746187-e657d631-40d6-4f19-845c-d0ad9c2afe92.gif" /%}

To specify a package version, you can either continue to use `package.json` or you can include a range specifier in the `import` path. These range specifiers are only supported when there is no `package.json` present.

```js
import { renderToReadableStream } from "react-dom@latest/server";
import { serve } from "bun";

serve({
  async fetch(req) {
    const stream = await renderToReadableStream(
      <html>
        <body>
          <h1>Hello, world!</h1>
        </body>
      </html>,
    );
    return new Response(stream);
  },
});
```

Bun continues to support the `node_modules` folder, which means this isn't a breaking change. If you want to disable this feature, you can run Bun using the `--no-install` flag.

### `FileSystemRouter`

Bun now exposes `FileSystemRouter`, a fast API for resolving incoming paths against a file-system router. Once initialized, it can rapidly resolve paths, or a [`Request`](https://developer.mozilla.org/en-US/docs/Web/API/Request), against the router.

Consider the following Next.js-style `pages` directory:

```
/path/to/project
├── server.ts
├── pages
  ├── index.tsx
  ├── settings.tsx
  ├── blog
  │   ├── index.tsx
  │   └── [slug].tsx
  └── [[...catchall]].tsx
```

In `server.ts`, you can initialize a `FileSystemRouter` that points to your `pages` directory.

```ts
import { FileSystemRouter } from "bun";

const router = new FileSystemRouter({
  dir: import.meta.dir + "/pages",
  style: "nextjs",
});
```

{% callout type="note" %}
**Router styles** — Currently, the only supported `style` is `nextjs`. We plan to support others in the future, including the Next.js 13-style `app` directory.
{% /callout %}

You can use the `router` instance to resolve incoming requests against your defined pages. This matching is implemented in native code and is much faster than a JavaScript-based router.

```ts
router.match("/");
// { filePath: "/pages/index.tsx" }

router.match("/blog");
// { filePath: "/pages/blog/index.tsx" }

router.match("/blog/my-first-post?foo=bar");
// {
//   filePath: "/pages/blog/[slug].tsx" }
//   params: { slug: "hello-world" },
//   query: { foo: "bar" }
// }
```

### Expect matchers in `bun:test`

More methods on [`expect()`](https://jestjs.io/docs/expect) matchers have been implemented in `bun:test`. We've also made performance improvements to `expect()` which makes `toEqual()` [100x faster](https://twitter.com/jarredsumner/status/1595681235606585346) than Jest. Longer-term, we want bun:test to be an incredibly fast drop-in replacement for companies using Jest & Vitest.

```ts
import { test, expect } from "bun:test";

test("new expect() matchers", () => {
  expect(1).not.toBe(2);
  expect({ a: 1 }).toEqual({ a: 1, b: undefined });
  expect({ a: 1 }).toStrictEqual({ a: 1 });
  expect(new Set()).toHaveProperty("size");
  expect([]).toHaveLength(0);
  expect(["bun"]).toContain("bun");
  expect(true).toBeTruthy();
  expect(Math.PI).toBeGreaterThan(3.14);
  expect(null).toBeNull();
});
```

{% callout type="note" %}
**Note** — You can try out the test runner with `bun wiptest`.
{% /callout %}

### New methods on `Headers`

The [`Headers`](https://developer.mozilla.org/en-US/docs/Web/API/Headers/Headers) class now implements the [`.getAll()`](https://github.com/whatwg/fetch/issues/973) and [`.toJSON()`](https://github.com/oven-sh/bun/commit/3b802c9a130683ff1f08858940892ed8f0a2f16c#diff-a65d88ebc29ed6f4f501937676ec79db7c7b9a3ccf9e04e04ac0fbf83d4f8549R339) methods. These are both technically non-standard methods, but we think it will make your life easier.

```ts
const headers = new Headers();
headers.append("Set-Cookie", "a=1");
headers.append("Set-Cookie", "b=1; Secure");

console.log(headers.getAll("Set-Cookie")); // ["a=1", "b=1; Secure"]
console.log(headers.toJSON()); // { "set-cookie": "a=1, b=1; Secure" }
```

### Resizable `ArrayBuffer` and growable `SharedArrayBuffer`

The ability to [`.resize()`](https://github.com/tc39/proposal-resizablearraybuffer#arraybuffer) an [`ArrayBuffer`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/ArrayBuffer) and [`.grow()`](https://github.com/tc39/proposal-resizablearraybuffer#sharedarraybuffer) a [`SharedArrayBuffer`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/SharedArrayBuffer) has been implemented in WebKit and is now available in Bun. Thanks, WebKit!

```ts
const buffer = new ArrayBuffer({
  byteLength: 1024,
  maxByteLength: 2048,
});

console.log(buffer.byteLength); // 1024
buffer.resize(2048);
console.log(buffer.byteLength); // 2048
```

### `Array.fromAsync()`

The [`Array.fromAsync()`](https://github.com/tc39/proposal-array-from-async#why-an-arrayfromasync-method) method has also been implemented in WebKit and is now available in Bun. It is similar to [`Array.from()`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/from) except it accepts async-iterable inputs. Thanks again, WebKit!

```ts
async function* listReleases() {
  for (let page = 1; ; page++) {
    const response = await fetch(
      `https://api.github.com/repos/oven-sh/bun/releases?page=${page}`,
    );
    const releases = await response.json();
    if (!releases.length) {
      break;
    }
    for (const release of releases) {
      yield release;
    }
  }
}

const releases = await Array.fromAsync(listReleases());
```

## Changelog

There were a lot of other changes! Here's the complete list:

- Fixed various memory leaks - [`a9aa3e7`](https://github.com/oven-sh/bun/commit/a9aa3e732c2ff90ae4eff9cc8e6bb9111534d959), [`1cce9da`](https://github.com/oven-sh/bun/commit/1cce9da80a51d49e423223f24f94fee6a044ab10), [`9090f06`](https://github.com/oven-sh/bun/commit/9090f06612cbff5bd389212a8d896bcd6372683f)
- Implemented [`process.release`](https://nodejs.org/api/process.html#processrelease) - [`901c4f5`](https://github.com/oven-sh/bun/commit/901c4f57aa1fd0914c5f153fe56768f23b7a6511)
- Fixed various bugs with `RegExp` - [`5398ed5`](https://github.com/oven-sh/bun/commit/5398ed52d8a0592b4511f8c0c03391dd06e770b2), [`#1537`](https://github.com/oven-sh/bun/pull/1537), [`#1528`](https://github.com/oven-sh/bun/pull/1528), [`74e87b5`](https://github.com/oven-sh/bun/commit/74e87b5a8a94a59bbfa32bba554503921c74c68c)
- Fixed an issue with [`fs.stat()`](https://nodejs.org/api/fs.html#fsstatpath-options-callback) - [`f9f169b`](https://github.com/oven-sh/bun/commit/f9f169bb9e53afb6d9d8978ffdd4939d3033a6e8)
- Prevented [`process.stdout`](https://nodejs.org/api/process.html#processstdout) and [`process.stderr`](https://nodejs.org/api/process.html#processstderr) from being closed - [`8519ff0`](https://github.com/oven-sh/bun/commit/8519ff02e6d5449484a5a4f858626303543c8a55)
- Changed behaviour of [`Blob.size`](https://developer.mozilla.org/en-US/docs/Web/API/Blob/size) to report `Infinity` for non-files - [`d5c81b7`](https://github.com/oven-sh/bun/commit/d5c81b7423d866bcf418eaacbc1ad1a14bc23c1d)
- Fixed incorrect `exitCode` from [`spawn()`](https://github.com/oven-sh/bun#bunspawn--spawn-a-process) - [`30e1fe1`](https://github.com/oven-sh/bun/commit/30e1fe1035b0e18c16401f447b446f2fc94c167b)
- Fixed incorrect transpilation of `export = value` in TypeScript - [`1cb5a73`](https://github.com/oven-sh/bun/commit/1cb5a7324343c2c7980e0d2d0aeab74ebc602689)
- Fixed [`spawn()`](https://github.com/oven-sh/bun#bunspawn--spawn-a-process) not being killed when parent process is killed - [`1f174b9`](https://github.com/oven-sh/bun/commit/1f174b9d9580ed1101c043963b17e2bd27aedf81)
- Fixed silent error when `port` was not a number - [`e5b2e3c`](https://github.com/oven-sh/bun/commit/e5b2e3c6024492a10cb2649477657a168bf9723f)
- Added a `done` callback to support async functions in `bun:test` - [`c00359a`](https://github.com/oven-sh/bun/commit/c00359a521bfcd0d1476511962cfc50763796e61)
- Fixed various issues with [`process.nextTick()`](https://nodejs.org/api/process.html#processnexttickcallback-args) - [`fd26d2e`](https://github.com/oven-sh/bun/commit/fd26d2e9fa3a98803244d2d4d7cb8c657d4efe2a), [`2eb19a9`](https://github.com/oven-sh/bun/commit/2eb19a96b11b75e65cde00d6ac1c358b30020ef6)
- Fixed `console.log(Request)` showing an empty `url` - [`cb41d77`](https://github.com/oven-sh/bun/commit/cb41d77d2aa9ae3b4d938167d86679a429bee4fe)
- Implemented [`AbortSignal.timeout()`](https://developer.mozilla.org/en-US/docs/Web/API/AbortSignal/timeout) - [`fe4f39f`](https://github.com/oven-sh/bun/commit/fe4f39fd17b8ffbb809871b9e4c6550063f15657)
- Supported wildcard `imports` in package.json - [`a3dc33c`](https://github.com/oven-sh/bun/commit/a3dc33c13350f4227c1cfb669f095d011d34ed76)
- Fixed timers keeping the process alive unnecessarily - [`f408749`](https://github.com/oven-sh/bun/commit/f408749182f49607902921c55307f2cf94eb23db)
- Fixed an issue when object spreading [`process.env`](https://nodejs.org/dist/latest/docs/api/process.html#processenv) - [`a6cadce`](https://github.com/oven-sh/bun/commit/a6cadce6f6292b685cc4160052304b5dfc8cd3ad)
- Fixed a bug where [`Response.arrayBuffer()`](https://developer.mozilla.org/en-US/docs/Web/API/Response/arrayBuffer) would return a `Uint8Array` - [`de9a2b9`](https://github.com/oven-sh/bun/commit/de9a2b9fe54cb7fd9696a3fa8edfa9c42829280d)
- Implemented `signalCode` for [`Bun.spawn()`](https://github.com/oven-sh/bun#bunspawn--spawn-a-process) - [`0617896`](https://github.com/oven-sh/bun/commit/0617896d7045e129abac8d7fd22df0e6626d92c8)
- Supported the [`Content-Range`](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Range) header when serving a file - [`0617896d`](https://github.com/oven-sh/bun/commit/0617896d7045e129abac8d7fd22df0e6626d92c8)
- Supported `bin` when using `bun link` - [`0642cf3`](https://github.com/oven-sh/bun/commit/0642cf31f34759705c92daba1016edc9e460b661)
- Improved the output of [`console.log()`](https://developer.mozilla.org/en-US/docs/Web/API/Console/log) - [`c65c320`](https://github.com/oven-sh/bun/commit/c65c320b09c795cb27523ff61eb9f9d92663c8cd)
- Fixed an issue with streams prematurely closing - [`d68f44d`](https://github.com/oven-sh/bun/commit/d68f44d604f52ad9b4b9052d42d93ffb10f83af7)
- Fixed an issue when using [`console.log()`](https://developer.mozilla.org/en-US/docs/Web/API/console/log) with an emoji - [`3cb462a`](https://github.com/oven-sh/bun/commit/3cb462a3e69811dd34200d0eaaba89471e44d82a)
- Fixed an issue when connecting to `localhost` - [`d90a638`](https://github.com/oven-sh/bun/commit/d90a638101921807d6dc8fca14fc39f843552983)
- Fixed [`Request.url`](https://developer.mozilla.org/en-US/docs/Web/API/Request/url) not showing the value from the `Host` header - [`da25733`](https://github.com/oven-sh/bun/commit/da257336b0b70df8c31da647496899cf70670000)
- Fixed memory issues in [`HTMLRewriter`](https://developers.cloudflare.com/workers/runtime-apis/html-rewriter/) where `text` was not properly cloned - [`a85826`](https://github.com/oven-sh/bun/commit/a858261832800f03c294d59365fde19d783c486d), [`904716f`](https://github.com/oven-sh/bun/commit/904716f56b95cb86aa1263e19bcfb49c2cee0b90)
- Fixed an issue when an exception is throw within a [`WebSocket`](https://developer.mozilla.org/en-US/docs/Web/API/WebSocket) open event - [`c52ebd9`](https://github.com/oven-sh/bun/commit/c52ebd96ba5d0b695a4b7a27071815a96d1f568f)
- Added support for npm packages that do not have a `-` before a pre-release identifier (e.g. `1.0.0beta`) - [`5f5ef81`](https://github.com/oven-sh/bun/commit/5f5ef81f11403c399fc57f0fd3dc6b2dd85e492e)
- Improved performance of IO polling for [`Bun.spawn()`](https://github.com/oven-sh/bun#bunspawn--spawn-a-process) and [`node:child_process`](https://nodejs.org/api/child_process.html) - [`#1496`](https://github.com/oven-sh/bun/pull/1496)
- Fixed infinite IO `write()` on Linux - [`a78b6f9`](https://github.com/oven-sh/bun/commit/a78b6f920d5042c583d8e2c8ab12132ba1a5e982)
- Added support for [`fs.rmdir()`](https://nodejs.org/api/fs.html#fsrmdirpath-options-callback) - [`92b7660`](https://github.com/oven-sh/bun/commit/92b766095de0e59fe40dfd9009e4fcc18117d93b)
- Fixed an issue with gzip decompression when the body was not gzipped - [`#1510`](https://github.com/oven-sh/bun/pull/1510)
- Fixed an issue with `@` in the URL of [`fetch()`](https://developer.mozilla.org/en-US/docs/Web/API/fetch) - [`6c01a11`](https://github.com/oven-sh/bun/commit/6c01a1191f07b3f2b8ce1ba07bf4eda25ce5e473)
- Fixed an issue with a trailing `/` in the URL of [`fetch()`](https://developer.mozilla.org/en-US/docs/Web/API/fetch) - [`4f22c39`](https://github.com/oven-sh/bun/commit/4f22c39651bf57f929876bd58e83bf0b3156a9d1)
- Fixed rare crash during [`console.log()`](https://developer.mozilla.org/en-US/docs/Web/API/console/log) - [`b0c89ba`](https://github.com/oven-sh/bun/commit/b0c89baac755195393ae182a1ee1a6e7b22f54b9)
- Improved support for [`node:http.createServer()`](https://nodejs.org/api/http.html#httpcreateserveroptions-requestlistener) - [`bf6b174`](https://github.com/oven-sh/bun/commit/bf6b1742330343c6004789f02761426aeafdb47b)
- Implemented `FileSink.ref()` and `FileSink.unref()` - [`d1a4f4f`](https://github.com/oven-sh/bun/commit/d1a4f4fd6981a06920adb632dde2562b76ddc4d0)
- Implemented [`console.timeLog()`](https://developer.mozilla.org/en-US/docs/Web/API/console/timeLog) - [`f677919`](https://github.com/oven-sh/bun/commit/f6779193c0e1c57b6d78979b7aacecda4e29081b)
- Fixed [`fs.createWriteStream()`](https://nodejs.org/api/fs.html#fscreatewritestreampath-options) - [`#1433`](https://github.com/oven-sh/bun/pull/1433)
- Supported TypeScript decorators - [`#1445`](https://github.com/oven-sh/bun/pull/1445)
- Supported JavaScript callbacks using [`bun:ffi`](https://github.com/oven-sh/bun#bunffi-foreign-functions-interface) - [`81033c5`](https://github.com/oven-sh/bun/commit/81033c52fb8c4c6b9370b960451b21ac9f876744)
- Added a property for JavaScript callbacks to be marked as `threadsafe` using [`bun:ffi`](https://github.com/oven-sh/bun#bunffi-foreign-functions-interface) - [`006a2f3`](https://github.com/oven-sh/bun/commit/006a2f37ddb133f61c6fa672652663204c2d2e54)
- Fixed various [`WebCrypto`](https://developer.mozilla.org/en-US/docs/Web/API/SubtleCrypto) issues and crashes - [`#1448`](https://github.com/oven-sh/bun/pull/1448), [`#1450`](https://github.com/oven-sh/bun/pull/1450)
- Fixed [`Bun.which()`](https://github.com/oven-sh/bun#bunwhich--find-the-path-to-a-binary) not handling absolute paths - [`d6520cd`](https://github.com/oven-sh/bun/commit/d6520cd761d79680576b516d27505865fe5376e5)
- Allowed URLs to be used as an argument to [`fetch()`](https://developer.mozilla.org/en-US/docs/Web/API/fetch) - [`#1460`](https://github.com/oven-sh/bun/pull/1460)
- Fixed rejected promises not triggering a test failure in `bun:test` - [`370d9c`](https://github.com/oven-sh/bun/commit/370d9c2931bbe778c8f897439d3a5429be933c21)
- Fixed environment variables being coerced to non-strings - [`#1256`](https://github.com/oven-sh/bun/pull/1256)
- Made [`TextDecoder`](https://developer.mozilla.org/en-US/docs/Web/API/TextDecoder/TextDecoder) 20% faster for small inputs - [`160466`](https://github.com/oven-sh/bun/commit/1604666988b5aa674104d10fbc5d2e86cc04e870)
- Fixed incorrect value for [`os.EOL`](https://nodejs.org/api/os.html#oseol) - [`8b0a3c7`](https://github.com/oven-sh/bun/commit/8b0a3c75cb98f5026de668b3a23d2e42f94e5d1a)
- Fixed [`Buffer.toString("base64")`](https://nodejs.org/api/buffer.html#buftostringencoding-start-end) sometimes being incorrect - [`af39313`](https://github.com/oven-sh/bun/commit/af3931371eb30c11623d3aaecc3fe7cf0e14ec0d)
- Fixed incorrect file permissions when using `bun install` - [`2c4777`](https://github.com/oven-sh/bun/commit/2c4777f579041d86b20e78ba6f519863ad3a6a13)
- Supported TypeScript `satisfies` - [`565996`](https://github.com/oven-sh/bun/commit/565996a087df6d06b2b5109b6825c720d4c8b168)
- Implemented [`WebSocketServer.publish()`](https://github.com/oven-sh/bun#publishsubscribe) when invoked outside an event handler - [`8753c48`](https://github.com/oven-sh/bun/commit/8753c483ff3e23929048eedeb4047b0b0aef281d)
- Improved performance of Node.js streams - [`#1502`](https://github.com/oven-sh/bun/pull/1502)
- Fixed [`bun:sqlite`](https://github.com/oven-sh/bun#bunsqlite-sqlite3-module) truncating numbers to int32 instead of int52 - [`ce6fc86`](https://github.com/oven-sh/bun/commit/ce6fc8609b26a7538dca840b2de5427a146445d4)
- Fixed HTTP status text not matching standards - [`949d715`](https://github.com/oven-sh/bun/commit/949d715a141890286d3b04ded8e209ac899ed2af)
- Fixed [`bun:sqlite`](https://github.com/oven-sh/bun#bunsqlite-sqlite3-module) not properly handing latin1 characters - [`c65c320`](https://github.com/oven-sh/bun/commit/c65c320b09c795cb27523ff61eb9f9d92663c8cd)
- Supported manual redirects in [`fetch()`](https://developer.mozilla.org/en-US/docs/Web/API/fetch) - [`5854d39`](https://github.com/oven-sh/bun/commit/5854d395259f4084b1d66e9f12b54085f277527e)
- Fixed [`fetch()`](https://developer.mozilla.org/en-US/docs/Web/API/fetch) redirects loosing the `port` - [`f8d9a8b`](https://github.com/oven-sh/bun/commit/f8d9a8be875a62eab9f3a6a8ca1a5b230d3aa0be)
- Fixed an issue with a malformed [`fetch()`](https://developer.mozilla.org/en-US/docs/Web/API/fetch) response body - [`b230e7a`](https://github.com/oven-sh/bun/commit/b230e7a73a78e67533cba0d852cefdbbd787eae9)
