Bun

Node.js compatibility

Bun aims for complete Node.js API compatibility. Most npm packages intended for Node.js environments will work with Bun out of the box; the best way to know for certain is to try it.

This page is updated regularly to reflect compatibility status of the latest version of Bun. The information below reflects Bun's compatibility with Node.js v20. If you run into any bugs with a particular package, please open an issue. Opening issues for compatibility bugs helps us prioritize what to work on next.

Built-in modules

node:assert

🟢 Fully implemented.

node:async_hooks

🟡 Only AsyncLocalStorage, and AsyncResource are implemented. AsyncResource is missing bind.

node:buffer

🟢 Fully implemented.

node:child_process

🟡 Missing Stream stdio, proc.gid proc.uid. IPC has partial support and only current only works with other bun processes.

node:cluster

🔴 Not implemented.

node:console

🟢 Fully implemented.

node:crypto

🟡 Missing Certificate ECDH X509Certificate checkPrime checkPrimeSync diffieHellman generatePrime generatePrimeSync getCipherInfo getFips hkdf hkdfSync secureHeapUsed setEngine setFips

Some methods are not optimized yet.

node:dgram

🔴 Not implemented.

node:diagnostics_channel

🟢 Fully implemented.

node:dns

🟡 Missing cancel setServers getDefaultResultOrder

node:domain

🟡 Missing Domain active

node:events

🟡 Missing addAbortListener events.getMaxListeners

node:fs

🟡 Missing statfs statfsSync, opendirSync. Dir is partially implemented.

node:http

🟢 Fully implemented.

node:http2

🟡 Client is supported, but server isn't yet.

node:https

🟢 Fully implemented.

node:inspector

🔴 Not implemented.

node:module

🟡 Missing runMain syncBuiltinESMExports, Module#load(). Attempts to override or patch the module cache will fail.

node:net

🟡 Missing BlockList SocketAddress Stream getDefaultAutoSelectFamily getDefaultAutoSelectFamilyAttemptTimeout setDefaultAutoSelectFamily setDefaultAutoSelectFamilyAttemptTimeout

node:os

🟢 Fully implemented.

node:path

🟢 Fully implemented.

node:perf_hooks

🟡 Missing createHistogram monitorEventLoopDelay. It's recommended to use performance global instead of perf_hooks.performance.

node:process

🟡 See process Global.

node:punycode

🟢 Fully implemented. Deprecated by Node.js.

node:querystring

🟢 Fully implemented.

node:readline

🟢 Fully implemented.

node:repl

🔴 Not implemented.

node:stream

🟡 Missing getDefaultHighWaterMark setDefaultHighWaterMark toWeb

node:string_decoder

🟢 Fully implemented.

node:sys

🟡 See node:util.

node:test

🔴 Not implemented. Use bun:test instead.

node:timers

🟢 Recommended to use global setTimeout, et. al. instead.

node:tls

🟡 Missing tls.createSecurePair.

node:trace_events

🔴 Not implemented.

node:tty

🟢 Fully implemented.

node:url

🟢 Fully implemented.

node:util

🟡 Missing MIMEParams MIMEType aborted debug getSystemErrorMap getSystemErrorName transferableAbortController transferableAbortSignal stripVTControlCharacters

node:v8

🔴 serialize and deserialize use JavaScriptCore's wire format instead of V8's. Otherwise, not implemented. For profiling, use bun:jsc instead.

node:vm

🟡 Core functionality works, but experimental VM ES modules are not implemented, including vm.Module, vm.SourceTextModule, vm.SyntheticModule,importModuleDynamically, and vm.measureMemory. Options like timeout, breakOnSigint, cachedData are not implemented yet. There is a bug with this value for contextified options not having the correct prototype.

node:wasi

🟡 Partially implemented.

node:worker_threads

🟡 Worker doesn't support the following options: eval stdin stdout stderr trackedUnmanagedFds resourceLimits. Missing markAsUntransferable moveMessagePortToContext getHeapSnapshot.

node:zlib

🟡 Missing BrotliCompress BrotliDecompress brotliCompressSync brotliDecompress brotliDecompressSync createBrotliCompress createBrotliDecompress. Unoptimized.

Globals

The table below lists all globals implemented by Node.js and Bun's current compatibility status.

AbortController

🟢 Fully implemented.

AbortSignal

🟢 Fully implemented.

Blob

🟢 Fully implemented.

Buffer

🟡 Incomplete implementation of base64 and base64url encodings.

ByteLengthQueuingStrategy

🟢 Fully implemented.

__dirname

🟢 Fully implemented.

__filename

🟢 Fully implemented.

atob()

🟢 Fully implemented.

BroadcastChannel

🟢 Fully implemented.

btoa()

🟢 Fully implemented.

clearImmediate()

🟢 Fully implemented.

clearInterval()

🟢 Fully implemented.

clearTimeout()

🟢 Fully implemented.

CompressionStream

🔴 Not implemented.

console

🟢 Fully implemented.

CountQueuingStrategy

🟢 Fully implemented.

Crypto

🟢 Fully implemented.

SubtleCrypto (crypto)

🟢 Fully implemented.

CryptoKey

🟢 Fully implemented.

CustomEvent

🟢 Fully implemented.

DecompressionStream

🔴 Not implemented.

Event

🟢 Fully implemented.

EventTarget

🟢 Fully implemented.

exports

🟢 Fully implemented.

fetch

🟢 Fully implemented.

FormData

🟢 Fully implemented.

global

🟢 Implemented. This is an object containing all objects in the global namespace. It's rarely referenced directly, as its contents are available without an additional prefix, e.g. __dirname instead of global.__dirname.

globalThis

🟢 Aliases to global.

Headers

🟢 Fully implemented.

MessageChannel

🟢 Fully implemented.

MessageEvent

🟢 Fully implemented.

MessagePort

🟢 Fully implemented.

module

🟢 Fully implemented.

PerformanceEntry

🟢 Fully implemented.

PerformanceMark

🟢 Fully implemented.

PerformanceMeasure

🟢 Fully implemented.

PerformanceObserver

🟢 Fully implemented.

PerformanceObserverEntryList

🟢 Fully implemented.

PerformanceResourceTiming

🔴 Not implemented.

performance

🟢 Fully implemented.

process

🟡 Missing domain hasUncaughtExceptionCaptureCallback initgroups resourceUsage setUncaughtExceptionCaptureCallback setegid seteuid setgid setgroups setuid allowedNodeEnvironmentFlags getActiveResourcesInfo setActiveResourcesInfo moduleLoadList setSourceMapsEnabled channel. process.binding is partially implemented.

queueMicrotask()

🟢 Fully implemented.

ReadableByteStreamController

🟢 Fully implemented.

ReadableStream

🟢 Fully implemented.

ReadableStreamBYOBReader

🟢 Fully implemented.

ReadableStreamBYOBRequest

🟢 Fully implemented.

ReadableStreamDefaultController

🟢 Fully implemented.

ReadableStreamDefaultReader

🟢 Fully implemented.

require()

🟢 Fully implemented, including require.main, require.cache, require.resolve

Response

🟢 Fully implemented.

Request

🟢 Fully implemented.

setImmediate()

🟢 Fully implemented.

setInterval()

🟢 Fully implemented.

setTimeout()

🟢 Fully implemented.

structuredClone()

🟢 Fully implemented.

SubtleCrypto

🟢 Fully implemented.

DOMException

🟢 Fully implemented.

TextDecoder

🟢 Fully implemented.

TextDecoderStream

🔴 Not implemented.

TextEncoder

🟢 Fully implemented.

TextEncoderStream

🔴 Not implemented.

TransformStream

🟢 Fully implemented.

TransformStreamDefaultController

🟢 Fully implemented.

URL

🟡 URL.createObjectURL is missing. See Issue #3925

URLSearchParams

🟢 Fully implemented.

WebAssembly

🟢 Fully implemented.

WritableStream

🟢 Fully implemented.

WritableStreamDefaultController

🟢 Fully implemented.

WritableStreamDefaultWriter

🟢 Fully implemented.