Каждый день Bun становится ближе к 100% совместимости с API Node.js. Сегодня популярные фреймворки, такие как Next.js, Express, и миллионы пакетов npm, предназначенных для Node.js, просто работают с Bun. Для обеспечения совместимости мы запускаем тысячи тестов из набора тестов Node.js перед каждым выпуском Bun.
Если пакет работает в Node.js, но не работает в Bun, мы считаем это ошибкой в Bun. Пожалуйста, откройте issue, и мы исправим это.
Эта страница регулярно обновляется, чтобы отражать статус совместимости последней версии Bun. Информация ниже отражает совместимость 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
🟢 Полностью реализовано. 100% набора тестов Node.js проходят. EventEmitterAsyncResource использует AsyncResource внутри.
node:fs
🟢 Полностью реализовано. 92% набора тестов Node.js проходят.
node:http
🟢 Полностью реализовано. Тело исходящего клиентского запроса в настоящее время буферизуется вместо потоковой передачи.
node:https
🟢 API реализованы, но Agent не всегда используется.
node:os
🟢 Полностью реализовано. 100% набора тестов Node.js проходят.
node:path
🟢 Полностью реализовано. 100% набора тестов Node.js проходят.
node:punycode
🟢 Полностью реализовано. 100% набора тестов Node.js проходят, устарело в Node.js.
node:querystring
🟢 Полностью реализовано. 100% набора тестов Node.js проходят.
node:readline
🟢 Полностью реализовано.
node:stream
🟢 Полностью реализовано.
node:string_decoder
🟢 Полностью реализовано. 100% набора тестов Node.js проходят.
node:timers
🟢 Рекомендуется использовать глобальные setTimeout и т.д.
node:tty
🟢 Полностью реализовано.
node:url
🟢 Полностью реализовано.
node:zlib
🟢 Полностью реализовано. 98% набора тестов Node.js проходят.
node:async_hooks
🟡 AsyncLocalStorage и AsyncResource реализованы. Хуки промисов v8 не вызываются, и их использование настоятельно не рекомендуется.
node:child_process
🟡 Отсутствуют proc.gid proc.uid. Класс Stream не экспортируется. IPC не может отправлять дескрипторы сокетов. IPC между Node.js и Bun может использоваться с сериализацией JSON.
node:cluster
🟡 Дескрипторы и файловые дескрипторы не могут передаваться между воркерами, что означает, что балансировка нагрузки HTTP-запросов между процессами в настоящее время поддерживается только на Linux (через SO_REUSEPORT). В остальном реализовано, но не проверено в бою.
node:crypto
🟡 Отсутствуют secureHeapUsed setEngine setFips
node:domain
🟡 Отсутствуют Domain active
node:http2
🟡 Клиент и сервер реализованы (95,25% набора тестов gRPC проходят). Отсутствуют options.allowHTTP1, options.enableConnectProtocol, расширение ALTSVC и http2stream.pushStream.
node:module
🟡 Отсутствуют syncBuiltinESMExports, Module#load(). Переопределение require.cache поддерживается для модулей ESM и CJS. module._extensions, module._pathCache, module._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
🟡 Отсутствуют getCallSite getCallSites getSystemErrorMap getSystemErrorMessage transferableAbortSignal transferableAbortController
node:v8
🟡 writeHeapSnapshot и getHeapSnapshot реализованы. serialize и deserialize используют формат wire JavaScriptCore вместо V8. Другие методы не реализованы. Для профилирования используйте bun:jsc.
node:vm
🟡 Основная функциональность и ES-модули реализованы, включая vm.Script, vm.createContext, vm.runInContext, vm.runInNewContext, vm.runInThisContext, vm.compileFunction, vm.isContext, vm.Module, vm.SourceTextModule, vm.SyntheticModule и поддержку importModuleDynamically. Опции вроде timeout и breakOnSigint полностью поддерживаются. Отсутствуют vm.measureMemory и некоторая функциональность cachedData.
node:wasi
🟡 Частично реализовано.
node:worker_threads
🟡 Worker не поддерживает следующие опции: stdin stdout stderr trackedUnmanagedFds resourceLimits. Отсутствуют markAsUntransferable moveMessagePortToContext.
node:inspector
🔴 Не реализовано.
node:repl
🔴 Не реализовано.
node:sqlite
🔴 Не реализовано.
node:test
🟡 Частично реализовано. Отсутствуют моки, снапшоты, таймеры. Используйте 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
🟢 Реализовано. Это объект, содержащий все объекты в глобальном пространстве имён. К нему редко обращаются напрямую, так как его содержимое доступно без дополнительного префикса, например __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. getActiveResourcesInfo setActiveResourcesInfo, getActiveResources и setSourceMapsEnabled являются заглушками. Новые API, такие как process.loadEnvFile и process.getBuiltinModule, ещё не реализованы.
queueMicrotask()
🟢 Полностью реализовано.
ReadableByteStreamController
🟢 Полностью реализовано.
ReadableStream
🟢 Полностью реализовано.
ReadableStreamBYOBReader
🟢 Полностью реализовано.
ReadableStreamBYOBRequest
🟢 Полностью реализовано.
ReadableStreamDefaultController
🟢 Полностью реализовано.
ReadableStreamDefaultReader
🟢 Полностью реализовано.
require()
🟢 Полностью реализовано, включая require.main, require.cache, require.resolve.
Response
🟢 Полностью реализовано.
Request
🟢 Полностью реализовано.
setImmediate()
🟢 Полностью реализовано.
setInterval()
🟢 Полностью реализовано.
setTimeout()
🟢 Полностью реализовано.
structuredClone()
🟢 Полностью реализовано.
SubtleCrypto
🟢 Полностью реализовано.
DOMException
🟢 Полностью реализовано.
TextDecoder
🟢 Полностью реализовано.
TextDecoderStream
🟢 Полностью реализовано.
TextEncoder
🟢 Полностью реализовано.
TextEncoderStream
🟢 Полностью реализовано.
TransformStream
🟢 Полностью реализовано.
TransformStreamDefaultController
🟢 Полностью реализовано.
URL
🟢 Полностью реализовано.
URLSearchParams
🟢 Полностью реализовано.
WebAssembly
🟢 Полностью реализовано.
WritableStream
🟢 Полностью реализовано.
WritableStreamDefaultController
🟢 Полностью реализовано.
WritableStreamDefaultWriter
🟢 Полностью реализовано.