To upgrade:
bun upgrade
Bun.js gets Node-API support
Node-API is 1.75x - 3x faster in Bun compared to Node.js 18 (in call overhead)
Just like in Node.js, to load a Node-API module, use require('my-npm-package')
or use process.dlopen
.
90% of the API is implemented, though it is certainly buggy right now.
Polyfills & new APIs in Bun.js v0.0.81
The following functions have been added:
import.meta.resolveSync
synchronously run the module resolver for the currently-referenced fileimport.meta.require
synchronously loads.node
or.json
modules and works with dynamic paths. This doesn't use ESM and doesn't run the transpiler, which is why regular js files are not supported. This is mostly an implementation detail for howrequire
works for Node-API modules, but it could also be used outside of that if you wantBun.gzipSync
,Bun.gunzipSync
,Bun.inflateSync
, andBun.deflateSync
which expose native bindings tozlib-cloudflare
. On macOS aarch64,gzipSync
is ~3x faster than in Node. This isn't wired up to the"zlib"
polyfill in bun yet
Additionally:
__dirname
is now supported for all targets (including browsers)__filename
is now supported for all targets (including browsers)Buffer.byteLength
is now implemented
Several packages using Node-API also use detect-libc
. Bun polyfills detect-libc
because bun doesn't support child_process
yet and this improves performance a little.