Skip to main content
Bun 每天都在向实现 100% 的 Node.js API 兼容性迈进。Next.js、Express 等热门框架,以及数百万个面向 Node.js 的 npm 包,都可以在 Bun 中运行。为确保兼容性,我们会在每次发布 Bun 之前,运行 Node.js 测试套件中的数千项测试。 如果某个包在 Node.js 中可以运行,但在 Bun 中无法运行,我们会将其视为 Bun 的 bug。 提交问题,我们会修复它。 此页面会定期更新,反映 Bun 与 Node.js v23 兼容性的最新状态。

内置 Node.js 模块

node:assert

🟢 完全实现。

node:buffer

🟢 完全实现。

node:console

🟢 完全实现。

node:dgram

🟢 完全实现。> 90% 的 Node.js 测试套件通过。

node:diagnostics_channel

🟢 完全实现。

node:dns

🟢 完全实现。> 90% 的 Node.js 测试套件通过。

node:events

🟢 完全实现。Node.js 测试套件 100% 通过。EventEmitterAsyncResource 底层使用 AsyncResource

node:fs

🟢 完全实现。Node.js 测试套件通过率为 92%。

node:http

🟢 完全实现。传出的客户端请求正文会被缓冲,而不是进行流式传输。

node:https

🟢 API 已实现,但并不总是使用 Agent

node:os

🟢 完全实现。Node.js 测试套件 100% 通过。

node:path

🟢 完全实现。Node.js 测试套件 100% 通过。

node:punycode

🟢 完全实现。Node.js 测试套件 100% 通过,Node.js 已弃用

node:querystring

🟢 完全实现。Node.js 测试套件 100% 通过。

node:readline

🟢 完全实现。

node:stream

🟢 完全实现。

node:string_decoder

🟢 完全实现。Node.js 测试套件 100% 通过。

node:timers

🟢 请改用全局的 setTimeout 及相关函数。

node:tty

🟢 完全实现。

node:url

🟢 完全实现。

node:zlib

🟢 完全实现。Node.js 测试套件通过率为 98%。

node:async_hooks

🟡 AsyncLocalStorageAsyncResource 已实现。不会调用 V8 promise 钩子,强烈不建议使用它(详见此处)。

node:child_process

🟡 缺少 proc.gidproc.uidStream 类未导出。IPC 不能发送 socket 句柄。Node.js ↔ Bun 的 IPC 可通过 JSON 序列化使用。

node:cluster

🟡 句柄和文件描述符无法在工作进程之间传递,因此仅在 Linux 上支持跨进程对 HTTP 请求进行负载均衡(通过 SO_REUSEPORT)。除此之外已实现,但尚未经过充分测试。

node:crypto

🟡 缺少 secureHeapUsedsetEnginesetFips

node:domain

🟡 缺少 Domainactive

node:http2

🟡 客户端和服务器均已实现(gRPC 测试套件通过率为 95.25%)。

node:module

🟡 缺少 syncBuiltinESMExportsModule#load()。支持为 ESM 和 CJS 模块覆盖 require.cachemodule._extensionsmodule._pathCachemodule._cache 均为空操作。module.register 尚未实现;我们建议改用 Bun.plugin

node:net

🟢 完全实现。

node:perf_hooks

🟡 API 已实现,但该模块的 Node.js 测试套件无法通过。

node:process

🟡 见 process 全局变量部分。

node:sys

🟡 见 node:util

node:tls

🟡 缺少 tls.createSecurePair

node:util

🟡 缺少 getCallSitegetCallSitesgetSystemErrorMapgetSystemErrorMessagetransferableAbortSignaltransferableAbortController

node:v8

🟡 已实现 writeHeapSnapshotgetHeapSnapshotserializedeserialize 使用的是 JavaScriptCore 的线格式(wire format)而非 V8 的。其他方法未实现。做性能分析时建议使用 bun:jsc

node:vm

🟡 核心功能和 ES 模块均已实现,包括 vm.Scriptvm.createContextvm.runInContextvm.runInNewContextvm.runInThisContextvm.compileFunctionvm.isContextvm.Modulevm.SourceTextModulevm.SyntheticModule 以及对 importModuleDynamically 的支持。timeoutbreakOnSigint 等选项均获完整支持。

node:wasi

🟡 部分实现。

node:worker_threads

🟡 Worker 不支持以下选项:stdinstdoutstderrtrackedUnmanagedFdsresourceLimits。缺少 markAsUntransferablemoveMessagePortToContext

node:inspector

🟡 部分实现。支持 Profiler API(Profiler.enableProfiler.disableProfiler.startProfiler.stopProfiler.setSamplingInterval)。其他 inspector API 尚未实现。

node:repl

🟡 大部分已实现。bun --interactive 会启动兼容 Node.js 的 REPL。结果预览(需要基于 V8 inspector 的无副作用求值)、useGlobal: true 模式下对 let/const/class 绑定的制表符补全,以及部分 V8 特有的错误消息措辞存在差异。

node:sqlite

🟢 完全实现。backup() 会同步运行,并在复制期间阻塞事件循环(Node 会在工作线程上运行该操作)。作为数据库路径的 Buffer/Uint8Array 必须是有效的 UTF-8(Node 会直接传递原始字节;Bun 会对非 UTF-8 内容拒绝并返回 ERR_INVALID_ARG_VALUE)。在 macOS 上,Bun 使用系统的 libsqlite3.dylibloadExtension()(以及在较旧的 macOS 版本上,createSession()/applyChangeset())需要完整的 SQLite 构建版本——请在打开数据库前调用 require("bun:sqlite").Database.setCustomSQLite(path)

node:test

🟡 部分实现。当测试文件在 bun test 下运行时,进程内 API 可用:测试、测试套件、子测试、钩子、t.plan()t.assertassert.register()t.waitFor()getTestContext() 以及 t.mock(函数/方法/获取器/设置器/属性模拟和模拟计时器)。缺少 run()node:test/reporters、快照测试、mock.module()、代码覆盖率、--test-only、测试级别的 signal/t.signal 中止功能,以及 Node 的 --test CLI 运行模式。test.only() / {only: true} 可接受,但不会进行筛选。concurrency 会经过验证,但子测试始终串行运行。请改用 bun:test

node:trace_events

🟢 完全实现。

Node.js 全局变量

以下列表涵盖 Node.js 实现的所有全局变量,以及 Bun 对每个全局变量的兼容性状态。

AbortController

🟢 完全实现。

AbortSignal

🟢 完全实现。

Blob

🟢 完全实现。

Buffer

🟢 完全实现。

ByteLengthQueuingStrategy

🟢 完全实现。

__dirname

🟢 完全实现。

__filename

🟢 完全实现。

atob()

🟢 完全实现。

Atomics

🟢 完全实现。

BroadcastChannel

🟢 完全实现。

btoa()

🟢 完全实现。

clearImmediate()

🟢 完全实现。

clearInterval()

🟢 完全实现。

clearTimeout()

🟢 完全实现。

CompressionStream

🟢 完全实现。

console

🟢 完全实现。

CountQueuingStrategy

🟢 完全实现。

Crypto

🟢 完全实现。

SubtleCrypto (crypto)

🟢 完全实现。

CryptoKey

🟢 完全实现。

CustomEvent

🟢 完全实现。

DecompressionStream

🟢 完全实现。

Event

🟢 完全实现。

EventTarget

🟢 完全实现。

exports

🟢 完全实现。

fetch

🟢 完全实现。

FormData

🟢 完全实现。

global

🟢 已实现。global 是一个包含全局命名空间中所有对象的对象。它很少被直接引用,因为其中的内容无需前缀即可使用,例如使用 __dirname,而不是 global.__dirname

globalThis

🟢 别名指向 global

Headers

🟢 完全实现。

MessageChannel

🟢 完全实现。

MessageEvent

🟢 完全实现。

MessagePort

🟢 完全实现。

module

🟢 完全实现。

PerformanceEntry

🟢 完全实现。

PerformanceMark

🟢 完全实现。

PerformanceMeasure

🟢 完全实现。

PerformanceObserver

🟢 完全实现。

PerformanceObserverEntryList

🟢 完全实现。

PerformanceResourceTiming

🟢 完全实现。

performance

🟢 完全实现。

process

🟡 大部分已实现。process.binding(某些软件包依赖的 Node.js 内部绑定)已部分实现。process.title 在 macOS 和 Linux 上不起作用。getActiveResourcesInfosetActiveResourcesInfogetActiveResourcessetSourceMapsEnabled 为空实现。较新的 API(如 process.loadEnvFile)尚未实现。

queueMicrotask()

🟢 完全实现。

ReadableByteStreamController

🟢 完全实现。

ReadableStream

🟢 完全实现。

ReadableStreamBYOBReader

🟢 完全实现。

ReadableStreamBYOBRequest

🟢 完全实现。

ReadableStreamDefaultController

🟢 完全实现。

ReadableStreamDefaultReader

🟢 完全实现。

require()

🟢 完全实现,包括 require.mainrequire.cacherequire.resolve

Response

🟢 完全实现。

Request

🟢 完全实现。

setImmediate()

🟢 完全实现。

setInterval()

🟢 完全实现。

setTimeout()

🟢 完全实现。

structuredClone()

🟢 完全实现。

SubtleCrypto

🟢 完全实现。

DOMException

🟢 完全实现。

TextDecoder

🟢 完全实现。

TextDecoderStream

🟢 完全实现。

TextEncoder

🟢 完全实现。

TextEncoderStream

🟢 完全实现。

TransformStream

🟢 完全实现。

TransformStreamDefaultController

🟢 完全实现。

URL

🟢 完全实现。

URLSearchParams

🟢 完全实现。

WebAssembly

🟢 完全实现。

WritableStream

🟢 完全实现。

WritableStreamDefaultController

🟢 完全实现。

WritableStreamDefaultWriter

🟢 完全实现。