Bun

Bun v0.2.1

Jarred Sumner · October 19, 2022

To upgrade:

bun upgrade

To install:

curl https://bun.sh/install | bash
If you have any problems upgrading

Run the install script (you can run it multiple times):

curl https://bun.sh/install | bash

WebSocket server

Bun.serve() now has builtin support for websockets on the server

Bun.serve({
  websocket: {
    message(ws, message) {
      ws.send(message);
    },
  },

  fetch(req, server) {
    // Upgrade to a ServerWebSocket if we can
    // This automatically checks for the `Sec-WebSocket-Key` header
    // meaning you don't have to check headers, you can just call `upgrade()`
    if (server.upgrade(req))
      // When upgrading, we return undefined since we don't want to send a Response
      return;

    return new Response("Regular HTTP response");
  },
});

For more information about using websockets with Bun.serve(), see the readme

For a chat room on Linux:

chat room benchmark linux

To reproduce this benchmark on your own computer, go here

Bun's server-side websockets are powered by uWebSockets.

RegExp lookbehinds assertions fix

To address #314, Bun now includes a fallback RegExp implementation that uses the Oniguruma regex engine. Thanks to @dylan-conway!

RegExp lookbehind assertions are used by popular npm packages like Discord.js

When a RegExp literal with a lookbehind is used inside Bun's runtime, Bun's transpiler now automatically replaces it with a Bun.OnigurumaRegExp. This API isn't intended to be used outside of the transpiler and will be removed once JavaScriptCore lands native support.

When run inside Bun's JavaScript runtime, this input:

export default /\d+(?=%)/;

Transpiles to:

export default new globalThis.Bun.OnigurumaRegExp("\\d+(?=%)");

The RegExp polyfill is largely based on JavaScriptCore's own JSC::RegExp bindings.

More stuff

  • Send a Date header in HTTP responses
  • performance.timeOrigin has been implemented
  • process.argv was returning an empty array when bun started without arguments other than the script, like bun foo.js (thanks to @dylan-conway for the fix)
  • Fix a crash when BodyMixin functions throw
  • Fix a memory leak in HTTP server related to promises
  • Fix a regression from v0.2.0 where small buffered (non-streaming) HTTP response bodies would sometimes include invalid data due to a memory aliasing bug
  • Fix a bug where a pong control frame in bun's WebSocket client would sometimes put the WebSocket in an error state c6fe820
  • Fix a bug where a WebSocket client would not keep the process open - #1335
  • More test coverage for bun's client-side WebSocket implementation due to adding server-side WebSockets
  • Added DOMJIT function call support to Bun's JavaScriptCore bindings generator (used by the new ServerWebSocket object for publishText, publishBinary, sendText and sendBinary functions)

Full Changelog