Deno 2.8 shipped on May 22, 2026, and for once the “biggest minor release to date” claim earns its keep. Node.js API compatibility jumped from 42% in Deno 2.7 to 76.4% in a single release — 3,405 of 4,457 of Node’s own tests now pass. For context, Bun 1.3.14 sits at 40.6% on the same benchmark. Five hundred commits landed across nearly every node: built-in module, and cold npm installs are 3.66x faster. The JavaScript runtime narrative just shifted.
The Node.js Compatibility Leap That Changes the Story
Bun’s primary selling point over Deno has long been better Node.js compatibility. Deno 2.8 complicates that pitch. The team touched nearly every node: module — http, crypto, fs, cluster, vm, wasi — closing gaps that made real-world Node.js project migrations painful. The numbers come from Node’s own test suite, not a custom benchmark, which makes the 76.4% vs 40.6% comparison hard to dismiss.
This doesn’t mean Deno is a drop-in Node.js replacement today. At 76.4%, there’s still a 23.6% gap. Projects relying on native addons, obscure npm packages, or Node internals will hit issues. However, if you’ve been evaluating Deno for a greenfield TypeScript project or considering a migration from a standard Node.js/Express backend, the compatibility picture is meaningfully better than it was two weeks ago.
Related: Bun v1.3.14: HTTP/3, Built-in Images, Faster Installs
Speed Numbers Worth Actually Caring About
Cold npm install dropped from 3,319ms to 906ms — a 3.66x improvement driven by parallel npm resolution, abbreviated packuments, and async decompression. That’s not a micro-benchmark; that’s the difference between a slow CI step and a fast one. HTTP throughput on node:http went from 8,339 to 18,431 requests per second (2.21x), and p99 latency improved from 20.86ms to 11.89ms. According to the official v2.8.0 release notes, 500+ commits hit nearly every node: module in this cycle.
Other notable speedups: node:buffer base64 operations are 3.07x faster via SIMD base64 conversion, and node:crypto scrypt improved 2.12x. The gains target hot paths developers actually hit in production, not synthetic benchmarks built to flatter. Delta upgrades also reduce `deno upgrade` download size by 87-93%, shrinking a typical patch from ~48MB to 3-6MB.
Six New Deno 2.8 CLI Commands Worth Adding to Your Workflow
Deno 2.8 ships six new CLI subcommands. The most immediately useful: deno audit fix automatically upgrades vulnerable npm packages to the nearest patched version within your version constraints — building on the audit reporting from Deno 2.6. For teams tracking npm supply chain issues, this belongs in your CI pipeline alongside existing scanning tools.
# Auto-fix vulnerable npm packages (respects version constraints)
deno audit fix
# Reproducible CI installs — errors loudly on lockfile mismatch
deno ci
# Build an npm-publishable tarball from a Deno/JSR project
deno pack
# Trace why a package ended up in your dependency tree
deno why express
# Bump version across deno.json or package.json
deno bump-version patch
deno ci gives teams a dedicated reproducible install command that fails fast on lockfile mismatches — exactly what CI pipelines need. deno pack converts Deno or JSR projects into npm-publishable tarballs with auto-transpiled JavaScript and rewritten specifiers, bridging the gap for library authors who want npm distribution without abandoning Deno. Meanwhile, deno why traces dependency chains, useful for auditing how a transitive dependency ended up in your project.
Breaking Changes: Check These Before Upgrading
setTimeout and setInterval now return a Node-style Timeout object instead of a plain number. Code that checks typeof timerId === "number" will break. Grep your codebase for timer ID comparisons before upgrading. Test sanitizers (sanitizeOps and sanitizeResources) also default to false now, meaning existing test suites may silently skip resource leak detection unless re-enabled explicitly per test or at module level.
TypeScript 6.0.3 ships bundled with 2.8. It’s a transition release carrying breaking changes ahead of TypeScript 7.0’s native Go port. Most projects won’t notice, but type-level edge cases may surface. The upgrade is worth doing — lib.node is now included by default, enabling ambient Node types without manual @types/node configuration. Full details in the Deno 2.8 coverage from AlternativeTo.
Key Takeaways
- Deno 2.8’s Node.js compatibility jumped from 42% to 76.4% in one release — now ahead of Bun’s 40.6% on Node’s own test suite
- Cold npm installs are 3.66x faster (906ms vs 3,319ms); node:http throughput is 2.21x faster
- Six new CLI subcommands ship, with
deno audit fix,deno ci, anddeno packbeing most immediately useful for teams - Two breaking changes to check before upgrading:
setTimeoutnow returns a Timeout object (not a number), and test sanitizers default to false













