Skip to content
CAI
Software that uses CAICheck a score

denoland/deno

49.9

Weak · 29 July 2026

617k

lines of production code

Rust

with JavaScript, TypeScript

2

measurements over time

CAI band scale
CAI trend line
CAI lens gauges

How this codebase got here

Score

  • CAI 43 → 50 (+6.7)
  • Rubric changed (rubric-2026.08.17 → rubric-2026.08.18) — scores are not directly comparable.

Lenses

  • Code Health 36 → 39 (+3.1)
  • Architecture 56 → 85 (+29.2)
  • Maturity 74 → 78 (+4.3)
  • Readiness 33 → 39 (+5.5)
  • Security 60 → 67 (+6.6)
  • Domain Modelling 100 → 100 (+0.0)
  • Event Sourcing 100 → 100 (+0.0)

Resolved (176)

  • (anonymous) (cognitive 17) (ext/fetch/21_formdata.js)
  • (anonymous) (cognitive 21) (runtime/js/99_main.js)
  • (anonymous) (cognitive 61) (ext/fetch/27_eventsource.js)
  • (anonymous) (cyclomatic 49) (ext/fetch/27_eventsource.js)
  • (computed) (cognitive 30) (ext/websocket/01_websocket.js)
  • AddRmPackageReq.parse (cyclomatic 18) (cli/tools/pm/mod.rs)
  • ByonmNpmResolver.resolve_package_folder_from_package (cognitive 18) (libs/resolver/npm/byonm.rs)
  • Change coupling: lib.dom.d.ts ↔ lib.dom.iterable.d.ts (cli/tsc/dts/lib.dom.d.ts)
  • Change coupling: lib.dom.d.ts ↔ lib.webworker.d.ts (cli/tsc/dts/lib.dom.d.ts)
  • Change coupling: lib.dom.d.ts ↔ lib.webworker.iterable.d.ts (cli/tsc/dts/lib.dom.d.ts)
  • Change coupling: lib.dom.iterable.d.ts ↔ lib.webworker.d.ts (cli/tsc/dts/lib.dom.iterable.d.ts)
  • Change coupling: lib.dom.iterable.d.ts ↔ lib.webworker.iterable.d.ts (cli/tsc/dts/lib.dom.iterable.d.ts)
  • Change coupling: lib.dom.iterable.d.ts ↔ typescript.d.ts (cli/tsc/dts/lib.dom.iterable.d.ts)
  • Change coupling: lib.webworker.d.ts ↔ lib.webworker.iterable.d.ts (cli/tsc/dts/lib.webworker.d.ts)
  • Change coupling: lib.webworker.iterable.d.ts ↔ typescript.d.ts (cli/tsc/dts/lib.webworker.iterable.d.ts)
  • Change coupling: module_hooks.rs ↔ 01_require.js (ext/node/ops/module_hooks.rs)
  • CliFactory.npm_installer_factory (cognitive 16) (cli/factory.rs)
  • CliModuleLoader.load (cyclomatic 17) (cli/module_loader.rs)
  • ConfigData.load_inner (cyclomatic 16) (cli/lsp/config.rs)
  • Coverage not included — suite not readable by the collector
  • …and 156 more

New (225)

  • #handle (cognitive 28) (ext/fetch/27_eventsource.js)
  • #handle (cyclomatic 21) (ext/fetch/27_eventsource.js)
  • #loop (cognitive 29) (ext/fetch/27_eventsource.js)
  • #loop (cyclomatic 27) (ext/fetch/27_eventsource.js)
  • #receiveDatagrams (cognitive 18) (ext/web/webtransport.js)
  • (anonymous) (cognitive 26) (runtime/js/99_main.js)
  • (anonymous) (cyclomatic 16) (runtime/js/99_main.js)
  • (computed) (cognitive 29) (ext/websocket/01_websocket.js)
  • ByonmNpmResolver::resolve_package_folder_from_package::inner (cognitive 18) (libs/resolver/npm/byonm.rs)
  • ByonmNpmResolver::resolve_pkg_json_and_alias_for_req::resolve_alias_from_pkg_json (cognitive 20) (libs/resolver/npm/byonm.rs)
  • Change coupling: 99_main.js ↔ worker_bootstrap.rs (runtime/js/99_main.js)
  • Change coupling: child_process.ts ↔ ipc.rs (ext/node/polyfills/internal/child_process.ts)
  • Change coupling: global.rs ↔ local.rs (libs/resolver/npm/managed/global.rs)
  • Change coupling: js.rs ↔ web_worker.rs (runtime/js.rs)
  • Change coupling: js.rs ↔ worker.rs (runtime/js.rs)
  • Change coupling: lib.rs ↔ cp.ts (ext/node/lib.rs)
  • Change coupling: lib.rs ↔ promises.ts (ext/node/lib.rs)
  • Change coupling: snapshot.rs ↔ worker.rs (runtime/snapshot.rs)
  • Change coupling: snapshot_info.rs ↔ worker.rs (runtime/snapshot_info.rs)
  • Coverage read from a committed report
  • …and 205 more

Changes since last survey

  • 87 commits — 22 feature/other, 65 fixes

By area

  • ext/node — 16 commits
  • tests/specs — 13 commits
  • libs/core — 6 commits
  • cli/tools — 5 commits
  • (root) — 4 commits
  • .github/workflows — 3 commits
  • cli/tsc — 3 commits
  • ext/net — 3 commits
  • ext/web — 3 commits
  • tests/util — 3 commits
  • ext/napi — 2 commits
  • libs/npm_cache — 2 commits
  • cli/args — 1 commit
  • cli/build.rs — 1 commit
  • cli/js — 1 commit
  • cli/rt — 1 commit
  • cli/rt_desktop — 1 commit
  • cli/util — 1 commit
  • ext/crypto — 1 commit
  • ext/ffi — 1 commit

Notable commits

  • fix: fix(cache): store Web Cache under origin data (#36145)
  • fix: fix(check): type-check local wasm imports (#36178)
  • fix: fix(check): write per-file check tsconfig to system temp, not project root (#36171)
  • fix: fix(clean): reject symlinked node_modules cleanup roots (#36190)
  • fix: fix(compile): bump libsui to 0.16.4 to fix Windows resource SizeOfImage (#36242)
  • fix: fix(core): allow dynamic imports during cached module evaluation (#36258)
  • fix: fix(core): don't resolve internal module imports with the user's import map (#36303)
  • fix: fix(core): enforce JSON requests in FsModuleLoader (#36137)
  • fix: fix(crypto): add "raw-secret" to KeyFormat type (#35708)
  • fix: fix(desktop): handle colored HMR URLs and page loads (#36316)
  • fix: fix(desktop): make BrowserWindow bindings typeable (#35907)
  • fix: fix(ext/crypto): allow deriveBits with length 0 (#36283)
  • fix: fix(ext/napi): cancel async sends after close (#36077)
  • fix: fix(ext/napi): polyfill uv_handle_size and uv_strerror (#36308)
  • fix: fix(ext/net): release completed QUIC stream resources (#36247)
  • fix: fix(ext/node): Node compat for web streams (#36285)
  • fix: fix(ext/node): apply backpressure in Readable.toWeb() (#36321)
  • fix: fix(ext/node): apply backpressure to http2 stream writes (#36044)
  • fix: fix(ext/node): defer TLS write completion callback to avoid reentrancy panic (#35867)
  • fix: fix(ext/node): implement node:test tags (#36292)
  • …and 67 more

Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.

Survey your own repository

denoland/deno was measured the same way every project in this corpus was: the same rubric, at a pinned commit, with the result published in full. Point a surveyor at a repository you know and see whether you agree with it.

About this page

  • The score is its most recent published measurement, taken on 29 July 2026 at a pinned commit. It is not a live figure and does not change until the project is measured again.
  • Measured at commit 41e97d3e4a492c94f526204a5f4115c5357db3c3 — the exact code this score is about.
  • Scored under rubric-2026.08.18 — the same rubric and the same method as every other entry in this index.
  • Measured by watchdog.canine.dev using codehealth-analyzer latest.