Chaque jour, Bun se rapproche de 100% de compatibilité avec l'API Node.js. Aujourd'hui, des frameworks populaires comme Next.js, Express et des millions de packages npm destinés à Node.js fonctionnent simplement avec Bun. Pour assurer la compatibilité, nous exécutons des milliers de tests de la suite de tests de Node.js avant chaque version de Bun.
Si un package fonctionne avec Node.js mais ne fonctionne pas avec Bun, nous considérons cela comme un bug dans Bun. Veuillez ouvrir une issue et nous la corrigerons.
Cette page est mise à jour régulièrement pour refléter l'état de compatibilité de la dernière version de Bun. Les informations ci-dessous reflètent la compatibilité de Bun avec Node.js v23.
Modules Node.js intégrés
node:assert
🟢 Entièrement implémenté.
node:buffer
🟢 Entièrement implémenté.
node:console
🟢 Entièrement implémenté.
node:dgram
🟢 Entièrement implémenté. > 90% de la suite de tests de Node.js passe.
node:diagnostics_channel
🟢 Entièrement implémenté.
node:dns
🟢 Entièrement implémenté. > 90% de la suite de tests de Node.js passe.
node:events
🟢 Entièrement implémenté. 100% de la suite de tests de Node.js passe. EventEmitterAsyncResource utilise AsyncResource en dessous.
node:fs
🟢 Entièrement implémenté. 92% de la suite de tests de Node.js passe.
node:http
🟢 Entièrement implémenté. Le corps de la requête cliente sortante est actuellement mis en mémoire tampon au lieu d'être diffusé en flux.
node:https
🟢 Les APIs sont implémentées, mais Agent n'est pas toujours utilisé encore.
node:os
🟢 Entièrement implémenté. 100% de la suite de tests de Node.js passe.
node:path
🟢 Entièrement implémenté. 100% de la suite de tests de Node.js passe.
node:punycode
🟢 Entièrement implémenté. 100% de la suite de tests de Node.js passe, déprécié par Node.js.
node:querystring
🟢 Entièrement implémenté. 100% de la suite de tests de Node.js passe.
node:readline
🟢 Entièrement implémenté.
node:stream
🟢 Entièrement implémenté.
node:string_decoder
🟢 Entièrement implémenté. 100% de la suite de tests de Node.js passe.
node:timers
🟢 Il est recommandé d'utiliser les globaux setTimeout, etc. à la place.
node:tty
🟢 Entièrement implémenté.
node:url
🟢 Entièrement implémenté.
node:zlib
🟢 Entièrement implémenté. 98% de la suite de tests de Node.js passe.
node:async_hooks
🟡 AsyncLocalStorage et AsyncResource sont implémentés. Les hooks de promesse v8 ne sont pas appelés, et leur utilisation est fortement déconseillée.
node:child_process
🟡 Il manque proc.gid proc.uid. La classe Stream n'est pas exportée. L'IPC ne peut pas envoyer de descripteurs de socket. L'IPC Node.js ↔ Bun peut être utilisé avec la sérialisation JSON.
node:cluster
🟡 Les handles et les descripteurs de fichiers ne peuvent pas être passés entre les workers, ce qui signifie que l'équilibrage de charge des requêtes HTTP entre les processus n'est pris en charge que sur Linux pour le moment (via SO_REUSEPORT). Sinon, implémenté mais pas testé en conditions réelles.
node:crypto
🟡 Il manque secureHeapUsed setEngine setFips
node:domain
🟡 Il manque Domain active
node:http2
🟡 Le client et le serveur sont implémentés (95,25% de la suite de tests gRPC passe). Il manque options.allowHTTP1, options.enableConnectProtocol, l'extension ALTSVC et http2stream.pushStream.
node:module
🟡 Il manque syncBuiltinESMExports, Module#load(). Le remplacement de require.cache est pris en charge pour les modules ESM et CJS. module._extensions, module._pathCache, module._cache sont des opérations sans effet. module.register n'est pas implémenté et nous recommandons d'utiliser un Bun.plugin en attendant.
node:net
🟢 Entièrement implémenté.
node:perf_hooks
🟡 Les APIs sont implémentées, mais la suite de tests de Node.js ne passe pas encore pour ce module.
node:process
🟡 Voir le global process.
node:sys
🟡 Voir node:util.
node:tls
🟡 Il manque tls.createSecurePair.
node:util
🟡 Il manque getCallSite getCallSites getSystemErrorMap getSystemErrorMessage transferableAbortSignal transferableAbortController
node:v8
🟡 writeHeapSnapshot et getHeapSnapshot sont implémentés. serialize et deserialize utilisent le format de filaire de JavaScriptCore au lieu de celui de V8. D'autres méthodes ne sont pas implémentées. Pour le profilage, utilisez bun:jsc à la place.
node:vm
🟡 Les fonctionnalités de base et les modules ES sont implémentés, y compris vm.Script, vm.createContext, vm.runInContext, vm.runInNewContext, vm.runInThisContext, vm.compileFunction, vm.isContext, vm.Module, vm.SourceTextModule, vm.SyntheticModule et le support importModuleDynamically. Les options comme timeout et breakOnSigint sont entièrement prises en charge. Il manque vm.measureMemory et certaines fonctionnalités cachedData.
node:wasi
🟡 Partiellement implémenté.
node:worker_threads
🟡 Worker ne prend pas en charge les options suivantes : stdin stdout stderr trackedUnmanagedFds resourceLimits. Il manque markAsUntransferable moveMessagePortToContext.
node:inspector
🔴 Non implémenté.
node:repl
🔴 Non implémenté.
node:sqlite
🔴 Non implémenté.
node:test
🟡 Partiellement implémenté. Il manque les mocks, snapshots, timers. Utilisez bun:test à la place.
node:trace_events
🔴 Non implémenté.
Globaux Node.js
Le tableau ci-dessous liste tous les globaux implémentés par Node.js et l'état de compatibilité actuel de Bun.
AbortController
🟢 Entièrement implémenté.
AbortSignal
🟢 Entièrement implémenté.
Blob
🟢 Entièrement implémenté.
Buffer
🟢 Entièrement implémenté.
ByteLengthQueuingStrategy
🟢 Entièrement implémenté.
__dirname
🟢 Entièrement implémenté.
__filename
🟢 Entièrement implémenté.
atob()
🟢 Entièrement implémenté.
Atomics
🟢 Entièrement implémenté.
BroadcastChannel
🟢 Entièrement implémenté.
btoa()
🟢 Entièrement implémenté.
clearImmediate()
🟢 Entièrement implémenté.
clearInterval()
🟢 Entièrement implémenté.
clearTimeout()
🟢 Entièrement implémenté.
CompressionStream
🟢 Entièrement implémenté.
console
🟢 Entièrement implémenté.
CountQueuingStrategy
🟢 Entièrement implémenté.
Crypto
🟢 Entièrement implémenté.
SubtleCrypto (crypto)
🟢 Entièrement implémenté.
CryptoKey
🟢 Entièrement implémenté.
CustomEvent
🟢 Entièrement implémenté.
DecompressionStream
🟢 Entièrement implémenté.
Event
🟢 Entièrement implémenté.
EventTarget
🟢 Entièrement implémenté.
exports
🟢 Entièrement implémenté.
fetch
🟢 Entièrement implémenté.
FormData
🟢 Entièrement implémenté.
global
🟢 Implémenté. Il s'agit d'un objet contenant tous les objets dans l'espace de noms global. Il est rarement référencé directement, car son contenu est disponible sans préfixe supplémentaire, par exemple __dirname au lieu de global.__dirname.
globalThis
🟢 Alias vers global.
Headers
🟢 Entièrement implémenté.
MessageChannel
🟢 Entièrement implémenté.
MessageEvent
🟢 Entièrement implémenté.
MessagePort
🟢 Entièrement implémenté.
module
🟢 Entièrement implémenté.
PerformanceEntry
🟢 Entièrement implémenté.
PerformanceMark
🟢 Entièrement implémenté.
PerformanceMeasure
🟢 Entièrement implémenté.
PerformanceObserver
🟢 Entièrement implémenté.
PerformanceObserverEntryList
🟢 Entièrement implémenté.
PerformanceResourceTiming
🟢 Entièrement implémenté.
performance
🟢 Entièrement implémenté.
process
🟡 Principalement implémenté. process.binding (bindings internes de Node.js sur lesquels certains packages comptent) est partiellement implémenté. process.title est actuellement une opération sans effet sur macOS et Linux. getActiveResourcesInfo setActiveResourcesInfo, getActiveResources et setSourceMapsEnabled sont des stubs. Les APIs plus récentes comme process.loadEnvFile et process.getBuiltinModule ne sont pas encore implémentées.
queueMicrotask()
🟢 Entièrement implémenté.
ReadableByteStreamController
🟢 Entièrement implémenté.
ReadableStream
🟢 Entièrement implémenté.
ReadableStreamBYOBReader
🟢 Entièrement implémenté.
ReadableStreamBYOBRequest
🟢 Entièrement implémenté.
ReadableStreamDefaultController
🟢 Entièrement implémenté.
ReadableStreamDefaultReader
🟢 Entièrement implémenté.
require()
🟢 Entièrement implémenté, y compris require.main, require.cache, require.resolve.
Response
🟢 Entièrement implémenté.
Request
🟢 Entièrement implémenté.
setImmediate()
🟢 Entièrement implémenté.
setInterval()
🟢 Entièrement implémenté.
setTimeout()
🟢 Entièrement implémenté.
structuredClone()
🟢 Entièrement implémenté.
SubtleCrypto
🟢 Entièrement implémenté.
DOMException
🟢 Entièrement implémenté.
TextDecoder
🟢 Entièrement implémenté.
TextDecoderStream
🟢 Entièrement implémenté.
TextEncoder
🟢 Entièrement implémenté.
TextEncoderStream
🟢 Entièrement implémenté.
TransformStream
🟢 Entièrement implémenté.
TransformStreamDefaultController
🟢 Entièrement implémenté.
URL
🟢 Entièrement implémenté.
URLSearchParams
🟢 Entièrement implémenté.
WebAssembly
🟢 Entièrement implémenté.
WritableStream
🟢 Entièrement implémenté.
WritableStreamDefaultController
🟢 Entièrement implémenté.
WritableStreamDefaultWriter
🟢 Entièrement implémenté.