Deno v2.8.3

Deno v2.8.3がリリースされています。

deno compile

deno compile--exclude-unused-npmオプションが追加されています (#34741)。実行可能ファイルの作成時にアプリケーションにおいてimportされていないnpmパッケージを実行可能ファイルから除外してくれるようです。Deno v2.8.2で実装されたdeno compile --bundleと同様に、実行可能ファイルのサイズの削減が期待されそうです。

また、deno compile--watchがサポートされています (#34860)

deno x

deno xコマンドに--ignore-scriptsオプションが追加されています (#34952)。このオプションに引数を指定しない場合、すべてのnpmパッケージのライフサイクルスクリプトが無効化されます。引数が指定された場合、指定されたnpmパッケージに対してのみライフサイクルスクリプトの実行が無効化されます。

deno lsp

以下の改善が実施されています:

  • Deno.test()に対するDebug code lens がサポートされています (#34742)
  • textDocument/codeAction: Deno.test()に対するignore/onlyオプションのトグルがサポートされています (#34861)
  • deno.jsonimportMapで指定されたImport mapファイルに対する診断がサポートされています (#34864)
  • LSPがdeno doc --lint及びdeno publish --dry-run相当の診断を実施してくれるように改善されています。JSRパッケージ中の各エントリーポイントにおける公開APIのJSDocコメントや型定義について検査してくれます (#34733, #34740)

deno test --doc

deno test --docがコードブロック中のshebangを解釈してくれるように改善されています。shebangで指定されたパーミッションフラグに基づいてDeno.test()permissionsオプションが自動で設定されます (#35052)

deno fmt

json.trailingCommasオプションが追加されています (#33383)

{
  "fmt": {
    "json.trailingCommas": "jsonc"
  }
}

deno add

deno adddeno updateなどの各種依存関係管理用のコマンドで--env-fileオプションがサポートされています (#34843)。.envDENO_AUTH_TOKENSが定義されているようなケースなどが想定されています。

また、パッケージインストール時のバージョンの範囲指定がサポートされています (#34799)

$ deno add 'jsr:@david/dax@>=0.48.0'

deno outdated/deno update

catalog/catalogsで定義されたパッケージを認識してくれるように改善されています (#34977)

deno bump-version

deno bump-versionコマンドに--configオプションが追加されています (#34770)。package.jsondeno.jsonが併用されたプロジェクトにおいて--config package.jsonを指定することにより、deno.jsonではなくpackage.jsonversionを更新したいケースでの使用が想定されています。

deno bundle

deno bundleコマンドで--checkオプションがサポートされています (#33514)。型チェックを実施してからバンドルしてくれます。

deno clean

--exceptの指定なしでのdeno clean --dry-runの実行がサポートされています (#34846)

$ deno clean --dry-run
Removed /path/to/.deno (2737 files, 98.07MB)
Aborting due to --dry-run flag

deno publish

deno publishコマンドでwith { type: "text" }を含むパッケージがサポートされています (#34692)

deno jupyter

Jupyterカーネルにおいて受信したメッセージのHMAC署名が検証されるように改善されています (#34825)

deno.jsonlinksにおいてglobがサポートされています (#34849)。パターンに基づいて複数のローカルパッケージを一括で指定できます。

パーミッション

--deny-readまたは--deny-writeに指定されたパスよりも祖先のパスに対する読み書きが拒否されてしまう問題が修正されています (#34504)

Deno.stat()などのAPIで/procなどの特殊ファイルを読もうとすると、--allow-readしか要求されない問題が修正されています (#34393)

また、Workerdeno.permissionsオプションが設定されている場合、そのWorker内で静的に読み込み先モジュールを特定できないtext/bytesファイルに対するimport()を使用している場合、deno.permissionsオプションではなく親のパーミッションがWorkerに適用されてしまう問題が修正されています (#34707)

ワークスペース

ワークスペース中のpackage.jsonを持つメンバーにて定義されたライフサイクルスクリプトが実行されるように改善されています (#34615)

Deno API

Deno.serve()

HTTP/1.1向けの実装におけるhyperへの依存が削除されています (#34446, #35049)。これによりパフォーマンス改善などが期待されるようです。

FFI

FFI 関連のAPIでUint8Array<ArrayBufferLike>型の値がサポートされています (#34999)

Deno.listen()/Deno.listenDatagram()

Deno.listen()及びDeno.listenDatagram()においてportまたはpath (transport: "unixpacket") の省略がサポートされています (#31681)。portが省略された場合は0がデフォルトで使用されます。pathが省略された場合は送信専用のソケットが作成されます。

Stream

Deno.stdin.readableなどの特定リソースに紐づくReadableStreamをキャンセルした際に、 読み込みが適切にキャンセルされるように改善されています (#34986)

また、Deno.Conn.writableなどの特定リソースに紐づくWritableStreamへ任意のArrayBufferまたはArrayBufferViewの書き込みがサポートされています (#35020)

Web API

BroadcastChannel

BroadcastChannel間でのSharedArrayBufferのやり取りがサポートされています (#34961)

Fetch API

Requestコンストラクターでpriorityオプションがサポートされています (#34716)

Web Crypto API

WICG/webcrypto-modern-algosに関連して下記の改善が実施されています:

  • SubtleCrypto.supports()が実装されています (#34903)
  • ML-DSA-44/ML-DSA-65/ML-DSA-87: SubtleCrypto#importKey()及びSubtleCrypto#exportKey()においてJWK形式がサポートされています(#34914)
  • getPublicKey()メソッドがCryptoKeyからSubtleCryptoへ移動しています (#34913)
  • ChaCha20-Poly1305: importKey()/exportKey()におけるrawフォーマットが廃止され、代わりにraw-secretフォーマットがサポートされています。また、encrypt()/decrypt()nonceパラメーターが削除され、代わりにivが追加されています (#34915)
  • ML-KEM-512/ML-KEM-768/ML-KEM-1024: SubtleCrypto#importKey()及びSubtleCrypto#exportKey()においてraw-seed及びjwk形式がサポートされています (#34924)
  • ML-DSA-44/ML-DSA-65/ML-DSA-87におけるraw-privateフォーマットでのSubtleCrypto#importKey()/SubtleCrypto#exportKey() 及び SHAKE128/SHAKE256のサポートが削除されています (cSHAKE128/cSHAKE256にて代替可能なため) (#34941)
  • raw-publicフォーマットがrawのエイリアスとして機能するように改善されています (#34920)

OpenTelemetry

node:http2が計装されています。 (#34510)

また下記環境変数がサポートされています:

Node.js互換性の改善

node:http

NODE_USE_ENV_PROXYなどのプロキシー関連の環境変数が--allow-envなしで読み込まれるように挙動が修正されています (#34807)

また、DENO_UNSTABLE_CONTROL_SOCKのサポートが追加されています (#34949)

node:test

mock.property()が実装されています (#34959)

node:url

fileURLToPathBuffer()が実装されています (#34883)

node:child_process

spawnSync()maxBufferオプションがサポートされています (#34053)

node:net

Socket#setKeepAlive()が実装されています(#34865)

NODE_OPTIONS

DenoがNODE_OPTIONSに指定された--inspect関連のオプションを認識してくれるように改善されています (#34717)

Denoの直近の開発について

まだマージはされていませんが、直近でいくつか面白そうなPRが作成されているため、紹介いたします。

"jsxImportSource": "deno-jsx:preact"

まだマージされていませんが、設定なしでJSXを動作させるための機能を導入するPRが作成されています:

現時点においては、ユーザーがjsxImportSourceを設定していない場合に限り、jsxImportSourceのデフォルト値としてdeno-jsx:preactが設定されます。deno-jsx:preactが設定されている場合、Deno本体に組み込まれたPreactベースの内部モジュールを使用することで機能が実現される想定のようです。

本機能については2.9.0のマイルストーンに含まれています。

Deno.McpServer & Deno.S3Client

Draft状態のため、マージされるかどうかはまだわかりませんが、Deno.McpServer及びDeno.S3Clientを実装するPRが作成されています:

Deno.McpServerはMCPサーバーを実装するためのAPIで利用するためには--unstable-mcpの指定が必要な想定のようです。

もう一方のDeno.S3ClientはS3互換のオブジェクトストレージ向けのクライアントで、利用するためには--unstable-s3の指定が必要なようです。

denoland/orchid

ここ最近、Deno本体の開発で使用されていると思われるorchidというツールのリポジトリが公開されています:

GitHubのIssueごとにAIエージェントのオーケストレーションをしてくれるツールのようです。