← Back to all briefs
JavaScript55s read

Deno 2.8 Node.js Compatibility Hits 76%, npm Prefix Becomes Optional

Deno 2.8 jumps from 42% to 76% Node.js compatibility, makes the npm: prefix optional, and adds a Rust-powered dependency resolver that cuts cold installs by 3.6x.

Deno 2.8, released in late May, represents the moment Deno stopped being a curiosity and became a viable Node.js alternative for real projects. The headline number is 76.4% Node.js compatibility, with 3,405 of 4,457 tests passing, up from roughly 42% in 2.7. For comparison, Bun 1.3.14 scores 40.6% on the same suite. Excluding tests that bail early, Deno hits 72.4% versus Bun's 36.4%.

The npm: prefix is now optional. deno add express works without deno add npm:express. Unprefixed package names default to npm, which removes the biggest friction point for developers migrating from Node. Under the hood, a new Rust-powered resolver makes cold npm installs 3.66x faster than 2.7, dropping from 3,319ms to 906ms. Node.js HTTP throughput more than doubled, from 8,339 to 18,431 requests per second.

New subcommands fill out the developer workflow. deno audit fix auto-upgrades vulnerable packages. deno why traces the dependency tree to explain why a package is installed. deno pack builds a Deno project into an npm-publishable tarball with transpiled JS and .d.ts files. deno ci provides frozen-lockfile installs for CI pipelines.

Several Node.js pain points got addressed: NODE_EXTRA_CA_CERTS is honored across all TLS code paths, .npmrc supports mTLS certificate configuration, and node_modules hoisting is available via nodeModulesLinker: "hoisted". Deno is not replacing Node.js tomorrow, but it is no longer a toy runtime with a compatibility gap you cannot close.