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:
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 implementedprocess.argv
was returning an empty array when bun started without arguments other than the script, likebun 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 theWebSocket
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 forpublishText
,publishBinary
,sendText
andsendBinary
functions)
Full Changelog: bun-v0.2.0...bun-v0.2.1