v2.8.3
📦 denoView on GitHub →
✨ 26 features🐛 83 fixes🔧 19 symbols
Summary
This release introduces numerous features across the CLI, LSP, and various extensions, including support for watch mode in compile, enhanced telemetry configuration, and fixes for Node.js compatibility and crypto operations.
✨ New Features
- CLI suggests DENO_TLS_CA_STORE on untrusted TLS certificate.
- CLI supports --env-file in dependency and registry subcommands.
- Compile supports watch mode.
- Config supports globs in links.
- ext/crypto implements SubtleCrypto.supports() static method.
- ext/crypto supports ML-DSA JWK import/export.
- ext/fetch supports `priority` in `RequestInit`.
- ext/node auto-instruments node:http2 with OpenTelemetry.
- ext/node notifies control socket when node:http server starts serving.
- ext/telemetry honors OTEL_SPAN_ATTRIBUTE_COUNT_LIMIT.
- ext/telemetry honors OTEL_SPAN_EVENT_COUNT_LIMIT.
- ext/telemetry supports OTEL_TRACES_SAMPLER.
- Fmt adds JSON trailing comma config.
- Info adds localPath to npm packages in `deno info --json` output.
- Info supports --minimum-dependency-age flag.
- LSP adds "Debug" code lens for test steps.
- LSP adds Deno.test ignore and only code actions.
- LSP diagnoses import map files.
- LSP provides hover info for import map resolutions.
- LSP reports `deno doc --lint` diagnostics.
- LSP shows no-slow-types diagnostics for JSR packages.
- Outdated warns about packages skipped due to registry errors.
- Test forwards shebang permissions into `deno test --doc`.
- Workspace auto-discovers external deno.json import maps.
- x command adds deno x --ignore-scripts.
- bump-version command adds -c flag to handle deno.json + package.json in same directory.
🐛 Bug Fixes
- Add command accepts npm version ranges on the command line.
- Bundle applies node-style CJS interop on all platforms.
- Bundle no longer panics when esbuild binary is busy or unavailable.
- Bundle instantiates .wasm imports instead of emitting raw bytes.
- Bundle renames sourcemap for HTML entrypoints.
- Bundle respects `--check` and runs the type checker.
- Cache retries locked cache database instead of deleting it.
- Check honors ts suppressions for unresolved imports.
- Check ignores doc comment dynamic imports.
- Check surfaces unresolved imports in .d.ts entrypoints.
- Check treats .d.ts in ESM-supporting npm packages as ESM.
- Clean keeps cleaning when cache files are locked and reports holders.
- Clean supports `deno clean --dry-run` without --except.
- CLI accepts allow-import for deno add.
- CLI checks worker's own permissions for dynamic asset imports.
- CLI collects re-exported names for `deno test --doc` injection.
- CLI prevents --env-file from setting Deno's own runtime control vars.
- CLI stops suggesting non-existent subcommand-flag combinations.
- CLI generates type-only doc-test imports under verbatimModuleSyntax.
- CLI includes the typed name in unrecognized subcommand error.
- CLI strips trailing CR from args so CRLF shebangs work.
- Compile prunes managed npm snapshot to graph-reachable packages.
- Compile resolves bare npm imports in --bundle worker sources.
- Compile runs forked child's module instead of entrypoint.
- Compile supports fs.fstatSync on vfs.
- Console fixes %c colors with same red component as previous color.
- Core stops setting ERR_MODULE_NOT_FOUND code on module linking errors.
- Core externalizes lazy loaded sources.
- Core silences too_many_arguments on Callable trait method.
- Core uses isolate_unchecked accessors for fast `&v8::Isolate` args.
- Coverage excludes linked/patched packages from coverage report.
- Coverage improves HTML report PageSpeed score.
- Dotenv includes underscore in unbraced variable names.
- ext/crypto ChaCha20-Poly1305 uses raw-secret format and iv param.
- ext/crypto fixes ML-KEM raw-seed, seed-form PKCS#8, and JWK.
- ext/crypto aligns WebCrypto modern algorithms with the spec.
- ext/crypto moves getPublicKey to SubtleCrypto and validates usages.
- ext/crypto supports raw-public format for existing asymmetric keys.
- ext/crypto uses outputLength for SHAKE/cSHAKE/TurboSHAKE digests.
- ext/fetch blocks requests to bad ports per Fetch Standard.
- ext/fetch doesn't decompress empty body advertised as gzip/br.
- ext/fetch only matches multipart delimiter lines.
- ext/fetch preserves empty multipart filenames.
- ext/ffi accepts Uint8Array<ArrayBufferLike> in FFI buffer types.
- ext/fs clarifies that Deno.symlink() needs unscoped permissions.
- ext/fs reports broken symlink read as NotFound, not FilesystemLoop.
- ext/fs streams Deno.readDir entries.
- ext/http doesn't crash server on dead streaming-body resource.
- ext/http includes buffered request bytes in size hint.
- ext/http joins split request headers consistently.
- ext/http prefers brotli for equal compression q-values.
- ext/http surfaces errors thrown while streaming a Deno.serve body.
- ext/io cancels pending readable stream reads.
- ext/kv updates access_token error message to new deno deploy console.
- ext/kv validates batchSize and expireIn inputs.
- ext/net handles missing port and path in listen and listenDatagram.
- ext/node accepts non-canonical RSA SPKI keys.
- ext/node accepts scoped IPv6 interface in dgram addMembership.
- ext/node bumps emulated Node version to v24.15.0.
- ext/node clears nonblocking fd stdio for child pipes.
- ext/node counts forked child process sockets.
- ext/node doesn't cache a pointer to the zlib result buffer.
- ext/node doesn't expose Module.register stub.
- ext/node enforces maxBuffer in child_process.spawnSync.
- ext/node exports runMain from node:module.
- ext/node fixes asciiSlice & ucs2Slice & hexSlice being too slow.
- ext/node fixes broken encoding validation in indexOfBuffer.
- ext/node guards TCPWrap.open against adopting tracked fds.
- ext/node guards sqlite authorizer reentrant replacement.
- ext/node handles EMFILE in child_process.spawn and compound shell commands.
- ext/node implements mock.property() in node:test.
- ext/node implements setKeepAlive on native TCPWrap.
- ext/node implements url.fileURLToPathBuffer.
- ext/node keeps node:vm ContextifyContext wrapper alive with its context.
- ext/node keeps sqlite iterator callbacks alive.
- ext/node keeps v8.serialize output readable by Node.js.
- ext/node keeps worker alive while holding a refed MessagePort.
- ext/node matches Node's UTF-8 replacement for invalid bytes in Buffer decode.
- ext/node matches Node.js when dns.lookup hostname is falsy.
- ext/node propagates nextLoad(newUrl) redirect to default loader.
- ext/node reads proxy env vars without --allow-env.
- ext/node replays direct writes on stale http retry.
- ext/node supports ChildProcess.send with net.Server handles.