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.