Changelog

denoland/deno · · 20 commits

Deno gets faster, safer, and more Node-compatible

Major Node-compat fixes, performance wins in eval/LSP/fs, and crash/security hardening across core and web APIs.

Node Buffer, tty, crypto, and process compatibility level up

Several high-impact Node compatibility fixes landed: Buffer.concat now avoids spoofed length-based memory issues, markAsUntransferable() is implemented, and internal/buffer is requireable again (bartlomieju6aa3354). The node:tty stack was largely rewritten atop uv compat for broader terminal support on Windows and elsewhere (nathanwhite4ae311), while process.unref() now behaves like Node and lets child processes survive parent exit (bartlomieju21a8152).

eval now auto-detects CJS vs ESM

deno eval can now infer whether code should run as CommonJS or ESM based on whether it contains import/export syntax (9f327bb). That removes a common compatibility footgun when reproducing Node issues and makes quick snippets more flexible.

Performance wins for large projects and hot paths

Linux now trims glibc arenas after module loading to reclaim RSS that would otherwise stay inflated on large TypeScript workloads (bartlomieju922a9ca). The day also includes a faster LSP diff backend, TextEncoder/TextDecoder hot-path optimizations, buffered FsFile.writable writes, and moving fs.cpSync to Rust for a large copy-speed boost (bartlomieju832fbcf, bartlomieju44301a6, bartlomieju4ba47aa, Tango9925e966f1).

Signals, errors, and Web APIs become more correct

Windows signal support expanded to include more standard signals and better Deno.kill() behavior (bartlomieju40c1da6), signal listener cleanup now handles process.once() wrappers correctly (bartlomieju3998494), and QuotaExceededError is now a proper DOMException-derived class (veeceey66db846). Core error handling also became more robust, avoiding a panic when JS error construction fails and improving crypto/OpenSSL error reporting and API coverage (bartlomieju974c6da, bartlomieju4b0474c, bartlomiejuc665693).

Other misc changes

  • REPL Tab-completion panic fix at line start (bartlomieju457de64)
  • FileHandle can now be passed as fd to ReadStream/WriteStream (Tango9929be5e36)
  • process signal listener cleanup and JUnit location override fixes (bartlomieju3998494, shivamtiwari314bb3e7)
  • child_process.send() validation fix (fraidev2309415)
  • cp/module-loading and lazy ESM panic fixes in core (Hajime-sanb8c4441)
  • Dependency/build/test updates tied to the above changes