Changelog

denoland/deno · · 43 commits

Deno tightened watchers, HTTP, telemetry

Major fixes landed across watch mode, HTTP serving, telemetry sampling, node compat, and LSP perf.

Watch mode no longer dies on Deno.exit() (bartlomieju0be857f)

deno run --watch now keeps the watcher process alive when the script calls Deno.exit(), instead of terminating the whole watcher. The change routes exit handling through isolate termination under watch mode, which also fixes deno serve --watch behavior.

HTTP/1.1 serve path fixed for proxy headers and streaming responses (nathanwhitb212315)

The raw HTTP serve path now correctly strips x-deno-client-address when trusted proxy headers are enabled, keeps Request.signal alive until streaming response bodies finish, and normalizes absolute-form URLs for the node:http override path. These regressions affected proxy-aware serving, stream lifetimes, and Node compatibility.

OpenTelemetry now honors trace sampler settings (crowlbotd1c044c)

Deno now respects OTEL_TRACES_SAMPLER and OTEL_TRACES_SAMPLER_ARG, including parent-based and ratio samplers. That makes span recording/export behavior configurable instead of always-on, matching the SDK spec.

OpenTelemetry span attribute/event limits are enforced (crowlbot1121ddf, crowlbot0e27f2d)

The telemetry runtime now applies the SDK’s span attribute-count limit and span event-count limit, dropping overflow data and tracking it in the corresponding dropped*Count fields. This prevents unbounded span growth and brings Deno in line with OpenTelemetry configuration semantics.

Node child_process.spawnSync now enforces maxBuffer (lunadogbotc2ad0d4)

spawnSync() now kills children when stdout/stderr exceed maxBuffer, mirroring Node’s timeout semantics by surfacing the configured kill signal and nulling status on overflow. This closes a compatibility gap that previously let oversized outputs slip through or fail inconsistently.

LSP workspace refreshes got faster and more correct (CertainLach42f1771, haltandcatchwater0593056)

Workspace configuration data is now cached across members instead of being rebuilt repeatedly, cutting unnecessary file reads and resolver construction in large monorepos. Separately, workspace-folder changes now refresh the cache before resolver rebuilds, fixing stale vendor/resolver state after folder updates.

Glob matching was optimized for hot-path file walking (bartlomiejufc7bcc2)

Config glob patterns now precompute their literal base path and a relative glob, avoiding repeated prefix parsing and absolute-pattern re-matching during fmt/lint/test discovery. This is a direct performance win on the file-walking hot path.

Web streams and decoding picked up compatibility/perf fixes (divybot82350c8, crowlbot0ad6c51, bartlomieju55a8b88, crowlbotd5a81a5)

Resource-backed writable streams now accept any ArrayBufferView/ArrayBuffer, and streaming TextDecoder got an ASCII fast path for better throughput. A benchmark compile break after the blob store refactor was also fixed, and FileReader progress events now fire as tasks per spec.

Node, REPL, and source-map behavior became more robust (crowlbota16910e, divybotc6b5d08, divybot74caf3c, divybota2d8596, fibibot0ce171f, bartlomieju58cb798, crowlbot4c91e7e)

This batch tightened several user-facing edges: unknown node: builtins now throw the right Node error, REPL completions include navigator.gpu, malformed syntax reports are less misleading, maybe-CJS source maps resolve correctly, type-only doc-test imports handle verbatimModuleSyntax, and Deno.lint.runPlugin now fails with a helpful availability message. LSP and conversion refactors also advanced the internal ToV8/FromV8 work.

Other misc changes

  • WebGPU crate/runtime update and related sync changes (2 commits)
  • Deno graph and V8 dependency bumps (2 commits)
  • Docs/comment/test-only updates, schema/env var docs, and minor cleanup (multiple commits)
  • Reverted a flaky node_compat test enablement
  • Various small resolver/core/runtime refactors and regression-test additions