Self-measured on every release by running codegraph on its own codebase. Metrics are normalized per file for cross-version comparability.
| Version | Engine | Date | Files | Build (ms/file) | Query (ms) | Nodes/file | Edges/file | DB (bytes/file) |
|---|---|---|---|---|---|---|---|---|
| 3.16.0 | native | 2026-07-20 | 741 | 6.9 ↑19% | 9.4 ↓72% | 25.4 ~ | 53.1 ↑3% | 49191 ↓3% |
| 3.16.0 | wasm | 2026-07-20 | 741 | 24.4 ↓7% | 11.6 ↓76% | 25.4 ~ | 53.7 ~ | 50318 ↓3% |
| 3.15.0 | native | 2026-06-23 | 629 | 5.8 ↑29% | 33 ↓21% | 25.4 ↓15% | 51.8 ↓16% | 50845 ↓8% |
| 3.15.0 | wasm | 2026-06-23 | 629 | 26.2 ↓4% | 47.4 ↓18% | 25.4 ↓15% | 52.7 ↓16% | 52017 ↓6% |
| 3.13.0 | native | 2026-06-17 | 695 | 4.5 ↑2% | 42 ↑11% | 29.9 ~ | 61.7 ↓4% | 55564 ~ |
| 3.13.0 | wasm | 2026-06-17 | 695 | 27.4 ↑29% | 57.7 ↑20% | 29.9 ~ | 62.4 ~ | 55216 ~ |
| 3.12.0 | native | 2026-06-11 | 670 | 4.4 ↑22% | 37.7 ↑10% | 30.3 ~ | 64 ~ | 55394 ↑3% |
| 3.12.0 | wasm | 2026-06-11 | 670 | 21.2 ↑13% | 47.9 ↑9% | 30.3 ~ | 62.2 ↓3% | 54605 ~ |
| 3.11.2 | native | 2026-06-01 | 628 | 3.6 ↓3% | 34.3 ~ | 30.9 ~ | 64 ~ | 53894 ~ |
| 3.11.2 | wasm | 2026-06-01 | 628 | 18.7 ~ | 44.1 ↓4% | 30.9 ~ | 64 ~ | 53613 ~ |
| 3.11.1 | native | 2026-05-30 | 625 | 3.7 ↓23% | 34.3 ↓31% | 30.9 ↑29% | 64 ↑28% | 53949 ↑30% |
| 3.11.1 | wasm | 2026-05-30 | 625 | 18.4 ~ | 45.7 ↑22% | 30.9 ↑27% | 64 ↑26% | 53504 ↑29% |
| 3.10.0 | native | 2026-05-11 | 745 | 4.8 ↓17% | 49.6 ↑6% | 24 ~ | 50.1 ~ | 41614 ~ |
| 3.10.0 | wasm | 2026-05-11 | 745 | 18.1 ↓36% | 37.6 ↓12% | 24.4 ~ | 50.6 ~ | 41543 ~ |
| 3.9.6 | native | 2026-04-30 | 744 | 5.8 ↑81% | 47 ↑60% | 24 ↓6% | 50 ↓7% | 41422 ↓7% |
| 3.9.6 | wasm | 2026-04-30 | 742 | 28.3 ↑74% | 42.8 ↓3% | 24.3 ~ | 50.5 ~ | 41335 ↑6% |
| 3.9.4 | native | 2026-04-18 | 668 | 3.2 ↓3% | 29.4 ~ | 25.6 ~ | 53.8 ↑4% | 44590 ~ |
| 3.9.4 | wasm | 2026-04-18 | 728 | 16.3 ↑3% | 44.1 ↑6% | 24.3 ~ | 51.4 ↑4% | 38839 ~ |
| 3.9.3 | native | 2026-04-13 | 727 | 3.3 ↓79% | 29.5 ↑11% | 25.4 ~ | 51.6 ~ | 43981 ↑7% |
| 3.9.3 | wasm | 2026-04-13 | 727 | 15.9 ↑6% | 41.6 ↑4% | 24.1 ~ | 49.3 ~ | 38380 ~ |
| 3.9.2 | native | 2026-04-09 | 727 | 15.7 ↑54% | 26.6 ↑14% | 25.3 ↓10% | 51.4 ↓10% | 41028 ↓15% |
| 3.9.2 | wasm | 2026-04-09 | 727 | 15 ↑9% | 40.1 ↑13% | 24 ↓15% | 49.2 ↓14% | 38256 ↓16% |
| 3.9.1 | native | 2026-04-06 | 570 | 10.2 ↓20% | 23.4 ↓23% | 28.1 ↑3% | 56.9 ↑5% | 48433 ↑8% |
| 3.9.1 | wasm | 2026-04-06 | 570 | 13.7 ↑5% | 35.6 ↑16% | 28.1 ↑3% | 56.9 ↑5% | 45717 ↑2% |
| 3.9.0 | native | 2026-04-04 | 567 | 12.8 ↓4% | 30.4 ↑5% | 27.3 ~ | 54 ↑14% | 44666 ↑2% |
| 3.9.0 | wasm | 2026-04-04 | 567 | 13.1 ↓4% | 30.6 ↓4% | 27.3 ~ | 54 ~ | 44623 ↑5% |
| 3.8.1 | native | 2026-04-03 | 565 | 13.3 ↑533% | 28.9 ↑113% | 27 ↑4% | 47.5 ↑5% | 43693 ↑42% |
| 3.8.1 | wasm | 2026-04-03 | 565 | 13.6 ↑518% | 31.8 ↑108% | 27.2 ↑5% | 53.8 ↑19% | 42417 ↑39% |
| 3.8.0 | native | 2026-04-02 | 564 | 2.1 | 13.6 | 26 | 45.3 | 30851 |
| 3.8.0 | wasm | 2026-04-02 | 564 | 2.2 ↓85% | 15.3 ↑22% | 26 ~ | 45.3 ↓10% | 30524 ↓43% |
| 3.7.0 | wasm | 2026-04-01 | 532 | 14.2 ↑7% | 12.5 ~ | 25.8 ~ | 50.3 ~ | 53795 ~ |
| 3.6.0 | wasm | 2026-03-30 | 514 | 13.3 ↑12% | 12.3 ~ | 25.6 ↑10% | 49.5 ↑12% | 54013 ↑28% |
| 3.4.1 | native | 2026-03-27 | 473 | 5.7 ↑8% | 11.7 ~ | 23.2 ~ | 44.1 ~ | 57725 ↑5% |
| 3.4.1 | wasm | 2026-03-27 | 473 | 11.9 ↓2% | 12.2 ↑4% | 23.2 ~ | 44.1 ~ | 42276 ↑5% |
| 3.4.0 | native | 2026-03-26 | 473 | 5.3 ↓13% | 11.6 ↑63% | 23.2 ↑32% | 44.2 ↑21% | 55041 ↑13% |
| 3.4.0 | wasm | 2026-03-26 | 473 | 12.2 ↑9% | 11.7 ↑62% | 23.1 ↑32% | 44.4 ↑22% | 40198 ↓15% |
| 3.3.1 | native | 2026-03-20 | 442 | 6.1 ↑74% | 7.1 ↑122% | 17.6 ↑31% | 36.5 ↑27% | 48707 ↑10% |
| 3.3.1 | wasm | 2026-03-20 | 442 | 11.2 ↑17% | 7.2 ↑57% | 17.5 ↑31% | 36.4 ↑26% | 47317 ↑10% |
| 3.1.4 | native | 2026-03-16 | 398 | 3.5 ↓31% | 3.2 ↓18% | 13.4 ↓26% | 28.8 ↓27% | 44469 ↓32% |
| 3.1.4 | wasm | 2026-03-16 | 398 | 9.6 ↓34% | 4.6 ↓16% | 13.4 ↓26% | 28.9 ↓27% | 42823 ↓32% |
| 3.1.3 | native | 2026-03-12 | 236 | 5.1 ~ | 3.9 ↓7% | 18 ~ | 39.4 ↑2% | 65553 ~ |
| 3.1.3 | wasm | 2026-03-12 | 236 | 14.6 ↓3% | 5.5 ↓5% | 18 ~ | 39.6 ~ | 63037 ~ |
| 3.1.2 | native | 2026-03-11 | 235 | 5.2 ↓15% | 4.2 ↑24% | 17.9 ↓14% | 38.6 ↓14% | 65275 ↓19% |
| 3.1.2 | wasm | 2026-03-11 | 235 | 15 ↓9% | 5.8 ↑26% | 17.9 ↓14% | 39.3 ↓13% | 62207 ↓20% |
| 3.1.0 | native | 2026-03-08 | 180 | 6.1 ~ | 3.4 ↑3% | 20.8 ~ | 44.7 ~ | 80919 ↑14% |
| 3.1.0 | wasm | 2026-03-08 | 180 | 16.5 ↓13% | 4.6 ↓4% | 20.9 ~ | 45 ~ | 77665 ~ |
| 3.0.4 | native | 2026-03-06 | 177 | 6.2 ↓50% | 3.3 ↓3% | 20.6 ↑10% | 44.5 ↑7% | 70951 ↓4% |
| 3.0.4 | wasm | 2026-03-06 | 177 | 19 ↑17% | 4.8 ↑4% | 20.6 ↑10% | 44.7 ↑7% | 77245 ↑4% |
| 3.0.3 | native | 2026-03-04 | 172 | 12.3 ↑7% | 3.4 ↑3% | 18.8 ~ | 41.6 ~ | 74133 ~ |
| 3.0.3 | wasm | 2026-03-04 | 172 | 16.3 ↓8% | 4.6 ↑5% | 18.7 ~ | 41.6 ~ | 74300 ~ |
| 3.0.2 | native | 2026-03-04 | 172 | 11.5 ↓18% | 3.3 ↓3% | 18.8 ↓29% | 41.6 ↓17% | 74109 ↓5% |
| 3.0.2 | wasm | 2026-03-04 | 172 | 17.8 ↓27% | 4.4 ↓2% | 18.7 ↓2% | 41.6 ~ | 74252 ~ |
| 3.0.1 | native | 2026-03-04 | 165 | 14.1 ↑220% | 3.4 ↑6% | 26.6 ↑43% | 50 ↑20% | 78246 ↑91% |
| 3.0.1 | wasm | 2026-03-04 | 165 | 24.4 ↑78% | 4.5 ↓10% | 19.1 ↑6% | 42.4 ↑3% | 74870 ↑19% |
| 3.0.0 | native | 2026-03-03 | 164 | 4.4 ↑132% | 3.2 ↑19% | 18.6 ↑195% | 41.6 ↑262% | 41010 ↑682% |
| 3.0.0 | wasm | 2026-03-03 | 164 | 13.7 ↑65% | 5 ↑11% | 18.1 ↑187% | 41.1 ↑257% | 63063 ↑1102% |
| 2.6.0 | native | 2026-03-02 | 146 | 1.9 ~ | 2.7 ↑29% | 6.3 ↓3% | 11.5 ↑4% | 5246 ↓5% |
| 2.6.0 | wasm | 2026-03-02 | 146 | 8.3 ↑6% | 4.5 ↑50% | 6.3 ↓3% | 11.5 ↑4% | 5246 ↓5% |
| 2.5.1 | native | 2026-03-01 | 126 | 1.9 ↓5% | 2.1 ↓12% | 6.5 ~ | 11.1 ~ | 5526 ~ |
| 2.5.1 | wasm | 2026-03-01 | 126 | 7.8 ↓7% | 3 ↓14% | 6.5 ~ | 11.1 ~ | 5526 ~ |
| 2.5.0 | native | 2026-02-28 | 123 | 2 | 2.4 | 6.5 | 11.1 | 5595 |
| 2.5.0 | wasm | 2026-02-28 | 123 | 8.4 ↑65% | 3.5 ↑59% | 6.5 ~ | 11.1 ↑4% | 5595 ↑19% |
| 2.4.0 | wasm | 2026-02-28 | 123 | 5.1 ↓23% | 2.2 ↑5% | 6.5 ↑12% | 10.7 ↑18% | 4695 ↑22% |
| 2.3.0 | native | 2026-02-24 | 99 | 1.9 ~ | 1.5 ↑7% | 5.8 ↑7% | 9.1 ~ | 3848 ~ |
| 2.3.0 | wasm | 2026-02-24 | 99 | 6.6 ~ | 2.1 ↑11% | 5.8 ~ | 9.1 ↑3% | 3848 ~ |
| 2.1.0 | native | 2026-02-23 | 92 | 1.9 ↓24% | 1.4 ↑17% | 5.4 ↑6% | 9.1 ↓47% | 3829 ↓14% |
| 2.1.0 | wasm | 2026-02-23 | 92 | 6.6 ↑32% | 1.9 ↑19% | 5.7 ↑12% | 8.8 ↓46% | 3829 ↓12% |
| 2.0.0 | native | 2026-02-23 | 89 | 2.5 | 1.2 | 5.1 | 17.2 | 4464 |
| 2.0.0 | wasm | 2026-02-23 | 89 | 5 | 1.6 | 5.1 | 16.2 | 4372 |
| Metric | Value |
|---|---|
| Build time | 5.1s |
| Query time | 9ms |
| Nodes | 18,811 |
| Edges | 39,377 |
| DB size | 34.8 MB |
| Files | 741 |
| Metric | Value |
|---|---|
| Build time | 18.1s |
| Query time | 12ms |
| Nodes | 18,811 |
| Edges | 39,822 |
| DB size | 35.6 MB |
| Files | 741 |
| Phase | Native (build) | WASM (build) | Native (1-file) | WASM (1-file) |
|---|---|---|---|---|
| Parse | 1145.2 ms | 11530.6 ms | 0.5 ms | 2.2 ms |
| Insert nodes | 415 ms | 413.3 ms | 0.2 ms | 0.4 ms |
| Resolve imports | 5.6 ms | 20.4 ms | 0.5 ms | 0.4 ms |
| Build edges | 256 ms | 4309.1 ms | 5.4 ms | 12.6 ms |
| Structure | 37.9 ms | 56.2 ms | 43.4 ms | 32.8 ms |
| Roles | 97.1 ms | 122 ms | 29.5 ms | 22.5 ms |
| AST nodes | 279.5 ms | 352.4 ms | 0.3 ms | 0.3 ms |
| Complexity | 21.4 ms | 42.3 ms | 0 ms | 0.1 ms |
| CFG | 196.2 ms | 270.6 ms | 0 ms | 0.1 ms |
| Dataflow | 179.1 ms | 389 ms | 0 ms | 1.3 ms |
Extrapolated linearly from per-file metrics above.
| Metric | Native (Rust) | WASM |
|---|---|---|
| Build time | 345.0s | 1220.0s |
| DB size | 2345.6 MB | 2399.3 MB |
| Nodes | 1,270,000 | 1,270,000 |
| Edges | 2,655,000 | 2,685,000 |
| Version | Engine | No-op (ms) | 1-file (ms) |
|---|---|---|---|
| 3.16.0 | native | 29 ↑21% | 193 ↑65% |
| 3.16.0 | wasm | 29 ↑21% | 213 ↑90% |
| 3.15.0 | native | 24 ↓8% | 117 ↑8% |
| 3.15.0 | wasm | 24 ↓4% | 112 ↑44% |
| 3.13.0 | native | 26 ↓13% | 108 ↓11% |
| 3.13.0 | wasm | 25 ↓7% | 78 ↑3% |
| 3.12.0 | native | 30 ↑20% | 121 ↑41% |
| 3.12.0 | wasm | 27 ↑29% | 76 ↑27% |
| 3.11.2 | native | 25 ↑4% | 86 ↑6% |
| 3.11.2 | wasm | 21 ↑5% | 60 ↓12% |
| 3.11.1 | native | 24 ~ | 81 ↑21% |
| 3.11.1 | wasm | 20 ↑33% | 68 ↑33% |
| 3.10.0 | native | 24 ↑85% | 67 ↓14% |
| 3.10.0 | wasm | 15 ↓89% | 51 ↓25% |
| 3.9.6 | native | 13 ↑30% | 78 ↓80% |
| 3.9.6 | wasm | 134 ↑538% | 68 ↑6% |
| 3.9.4 | native | 10 ↓9% | 400 ~ |
| 3.9.4 | wasm | 21 ↓5% | 64 ↓90% |
| 3.9.3 | native | 11 ↑22% | 397 ↓29% |
| 3.9.3 | wasm | 22 ↑10% | 638 ↑2% |
| 3.9.2 | native | 9 ↓47% | 558 ↓27% |
| 3.9.2 | wasm | 20 ↑33% | 624 ↓2% |
| 3.9.1 | native | 17 ↑113% | 767 ↑36% |
| 3.9.1 | wasm | 15 ~ | 639 ↑14% |
| 3.9.0 | native | 8 ~ | 562 ↑1238% |
| 3.9.0 | wasm | 15 ↓6% | 559 ↓7% |
| 3.8.1 | native | 8 ~ | 42 ↑27% |
| 3.8.1 | wasm | 16 ↑100% | 600 ↑1718% |
| 3.8.0 | native | 8 | 33 |
| 3.8.0 | wasm | 8 ↓47% | 33 ↓94% |
| 3.7.0 | wasm | 15 ↑7% | 542 ~ |
| 3.6.0 | wasm | 14 ↓12% | 547 ↑12% |
| 3.4.1 | native | 14 ↑17% | 316 ↓27% |
| 3.4.1 | wasm | 16 ↑60% | 487 ↓22% |
| 3.4.0 | native | 12 ~ | 432 ↑22% |
| 3.4.0 | wasm | 10 ↓17% | 621 ↑23% |
| 3.3.1 | native | 12 ↑33% | 353 ↑33% |
| 3.3.1 | wasm | 12 ↑20% | 506 ↑35% |
| 3.1.4 | native | 9 ↑50% | 265 ↓6% |
| 3.1.4 | wasm | 10 ↑67% | 375 ↓24% |
| 3.1.3 | native | 6 ~ | 282 ↓5% |
| 3.1.3 | wasm | 6 ↓14% | 493 ↓12% |
| 3.1.2 | native | 6 ↑20% | 296 ↓11% |
| 3.1.2 | wasm | 7 ↑40% | 563 ~ |
| 3.1.0 | native | 5 ↓98% | 332 ~ |
| 3.1.0 | wasm | 5 ↓29% | 570 ~ |
| 3.0.4 | native | 329 ↑6480% | 335 ↓11% |
| 3.0.4 | wasm | 7 ~ | 559 ~ |
| 3.0.3 | native | 5 ~ | 375 ↓2% |
| 3.0.3 | wasm | 7 ↑40% | 567 ↓3% |
| 3.0.2 | native | 5 ~ | 384 ↓58% |
| 3.0.2 | wasm | 5 ~ | 584 ↓42% |
| 3.0.1 | native | 5 ↑25% | 915 ↑182% |
| 3.0.1 | wasm | 5 ~ | 1012 ↓5% |
| 3.0.0 | native | 4 ~ | 325 ↑162% |
| 3.0.0 | wasm | 5 ↓29% | 1068 ↑112% |
| 2.6.0 | native | 4 ↑33% | 124 ↑33% |
| 2.6.0 | wasm | 7 ↑75% | 504 ↑56% |
| 2.5.1 | native | 3 ↓25% | 93 ↓4% |
| 2.5.1 | wasm | 4 ~ | 324 ~ |
| 2.5.0 | native | 4 | 97 |
| 2.5.0 | wasm | 4 ↓20% | 324 ↑69% |
| 2.4.0 | wasm | 5 | 192 |
| Version | Engine | fn-deps (ms) | fn-impact (ms) | path (ms) | roles (ms) |
|---|---|---|---|---|---|
| 3.16.0 | native | 9.7 ↑304% | 5.6 ↑133% | 12.8 ↑433% | 23.6 ↓7% |
| 3.16.0 | wasm | 11.2 ↑409% | 4.6 ↑100% | 11.9 ↑467% | 24 ~ |
| 3.15.0 | native | 2.4 ↓14% | 2.4 ↓20% | 2.4 ↓17% | 25.5 ↓42% |
| 3.15.0 | wasm | 2.2 ↓21% | 2.3 ↓15% | 2.1 ↓16% | 24.3 ↓42% |
| 3.13.0 | native | 2.8 ↑4% | 3 ↑11% | 2.9 ↑4% | 44 ↓8% |
| 3.13.0 | wasm | 2.8 ↑8% | 2.7 ↑4% | 2.5 ~ | 42 ↑3% |
| 3.12.0 | native | 2.7 ~ | 2.7 ~ | 2.8 ↑4% | 47.8 ↑8% |
| 3.12.0 | wasm | 2.6 ~ | 2.6 ↑4% | 2.5 ↑4% | 40.8 ↓4% |
| 3.11.2 | native | 2.7 ↑8% | 2.7 ↑4% | 2.7 ↑8% | 44.1 ↑15% |
| 3.11.2 | wasm | 2.6 ↑13% | 2.5 ↑4% | 2.4 ↑4% | 42.4 ↑20% |
| 3.11.1 | native | 2.5 ↑14% | 2.6 ↑18% | 2.5 ↑9% | 38.5 ↑11% |
| 3.11.1 | wasm | 2.3 ↑10% | 2.4 ↑9% | 2.3 ↑10% | 35.4 ↑19% |
| 3.10.0 | native | 2.2 ↓35% | 2.2 ↓29% | 2.3 ↓26% | 34.8 ↓6% |
| 3.10.0 | wasm | 2.1 ↓12% | 2.2 ↓8% | 2.1 ↓5% | 29.8 ↓5% |
| 3.9.6 | native | 3.4 ↑36% | 3.1 ↑24% | 3.1 ↑29% | 37 ↓5% |
| 3.9.6 | wasm | 2.4 ↑9% | 2.4 ↑4% | 2.2 ~ | 31.3 ↓4% |
| 3.9.4 | native | 2.5 ~ | 2.5 ~ | 2.4 ↓4% | 39 ↓6% |
| 3.9.4 | wasm | 2.2 ↓8% | 2.3 ↓4% | 2.2 ↓4% | 32.6 ↓6% |
| 3.9.3 | native | 2.5 ↑9% | 2.5 ↑4% | 2.5 ~ | 41.3 ↑24% |
| 3.9.3 | wasm | 2.4 ~ | 2.4 ~ | 2.3 ↓4% | 34.5 ↓3% |
| 3.9.2 | native | 2.3 ↑5% | 2.4 ↑4% | 2.5 ↑14% | 33.2 ↑30% |
| 3.9.2 | wasm | 2.4 ↑9% | 2.4 ↑9% | 2.4 ↑9% | 35.4 ↑35% |
| 3.9.1 | native | 2.2 ↑5% | 2.3 ↑5% | 2.2 ~ | 25.5 ~ |
| 3.9.1 | wasm | 2.2 ↑5% | 2.2 ~ | 2.2 ↑5% | 26.3 ~ |
| 3.9.0 | native | 2.1 ↓5% | 2.2 ~ | 2.2 ~ | 25.9 ↓13% |
| 3.9.0 | wasm | 2.1 ↓5% | 2.2 ~ | 2.1 ↓5% | 26.6 ↓6% |
| 3.8.1 | native | 2.2 ↓12% | 2.2 ~ | 2.2 ↑5% | 29.7 ~ |
| 3.8.1 | wasm | 2.2 ~ | 2.2 ~ | 2.2 ↑5% | 28.4 ↓9% |
| 3.8.0 | native | 2.5 | 2.2 | 2.1 | 29.2 |
| 3.8.0 | wasm | 2.2 ↑10% | 2.2 ↑5% | 2.1 ↑5% | 31.3 ↑28% |
| 3.7.0 | wasm | 2 ↓5% | 2.1 ~ | 2 ↑5% | 24.4 ↑2% |
| 3.6.0 | wasm | 2.1 ↑11% | 2.1 ~ | 1.9 ~ | 23.9 ↑15% |
| 3.4.1 | native | 1.9 ↑12% | 2 ↑18% | 1.9 ↑19% | 21.6 ↑9% |
| 3.4.1 | wasm | 1.9 ↑6% | 2.1 ↑24% | 1.9 ↑19% | 20.7 ↓4% |
| 3.4.0 | native | 1.7 ↑21% | 1.7 ↑21% | 1.6 ↑23% | 19.9 ↑32% |
| 3.4.0 | wasm | 1.8 ↑38% | 1.7 ↑21% | 1.6 ↑23% | 21.5 ↑45% |
| 3.3.1 | native | 1.4 ↑56% | 1.4 ↑56% | 1.3 ↑44% | 15.1 ↑50% |
| 3.3.1 | wasm | 1.3 ↑44% | 1.4 ↑40% | 1.3 ↑44% | 14.8 ↑53% |
| 3.1.4 | native | 0.9 ~ | 0.9 ↑12% | 0.9 ↑12% | 10.1 ↑36% |
| 3.1.4 | wasm | 0.9 ↑12% | 1 ↑11% | 0.9 ↑12% | 9.7 ↑26% |
| 3.1.3 | native | 0.9 ↑12% | 0.8 ~ | 0.8 ~ | 7.4 ↓14% |
| 3.1.3 | wasm | 0.8 ↓11% | 0.9 ~ | 0.8 ↓11% | 7.7 ↓7% |
| 3.1.2 | native | 0.8 ~ | 0.8 ~ | 0.8 ~ | 8.6 ↑34% |
| 3.1.2 | wasm | 0.9 ↑12% | 0.9 ↑12% | 0.9 ↑12% | 8.3 ↑28% |
| 3.1.0 | native | 0.8 ~ | 0.8 ~ | 0.8 ~ | 6.4 ↑7% |
| 3.1.0 | wasm | 0.8 ↓11% | 0.8 ~ | 0.8 ~ | 6.5 ↓4% |
| 3.0.4 | native | 0.8 ~ | 0.8 ~ | 0.8 ~ | 6 ↑9% |
| 3.0.4 | wasm | 0.9 ↑12% | 0.8 ~ | 0.8 ~ | 6.8 ↑11% |
| 3.0.3 | native | 0.8 ~ | 0.8 ~ | 0.8 ~ | 5.5 ↑6% |
| 3.0.3 | wasm | 0.8 ~ | 0.8 ~ | 0.8 ~ | 6.1 ~ |
| 3.0.2 | native | 0.8 ↓11% | 0.8 ~ | 0.8 ~ | 5.2 ↓26% |
| 3.0.2 | wasm | 0.8 ~ | 0.8 ↓11% | 0.8 ~ | 6 ↑15% |
| 3.0.1 | native | 0.9 ↑12% | 0.8 ~ | 0.8 ~ | 7 ↑43% |
| 3.0.1 | wasm | 0.8 ~ | 0.9 ~ | 0.8 ~ | 5.2 ↓5% |
| 3.0.0 | native | 0.8 ↓43% | 0.8 ↓38% | 0.8 ↓43% | 4.9 ↑308% |
| 3.0.0 | wasm | 0.8 ↓43% | 0.9 ↓36% | 0.8 ↓43% | 5.5 ↑323% |
| 2.6.0 | native | 1.4 ↓22% | 1.3 ~ | 1.4 ↑40% | 1.2 ↑20% |
| 2.6.0 | wasm | 1.4 ↓22% | 1.4 ↑8% | 1.4 ↑40% | 1.3 ↑18% |
| 2.5.1 | native | 1.8 ↓14% | 1.3 ↓19% | 1 ↓17% | 1 ↓9% |
| 2.5.1 | wasm | 1.8 ↓18% | 1.3 ↓19% | 1 ↓17% | 1.1 ~ |
| 2.5.0 | native | 2.1 | 1.6 | 1.2 | 1.1 |
| 2.5.0 | wasm | 2.2 ↑340% | 1.6 ↑220% | 1.2 | 1.1 ↑22% |
| 2.4.0 | wasm | 0.5 | 0.5 | null | 0.9 |
Benchmark corpus reduction (v3.10.0 745 files → v3.11.0 623 files, –16%):
Methodology change from PR #1134, which excluded
tests/benchmarks/resolution/fixtures/** from the dogfooding buildGraph
sweep so heavyweight new grammars (e.g. Verilog #1107) no longer inflate
timing. Per-file metrics (Build ms/file, Query ms, Nodes/file,
Edges/file, DB bytes/file) remain comparable across versions — they're
normalized by the file count actually measured. Absolute totals in the
"Raw totals (latest)" block (build time, DB size, total nodes/edges) are
scoped to the post-#1134 corpus and are not directly comparable to
v3.10.0 absolute totals. The lower file count is expected and intentional.
The corpus grew slightly from 623 (v3.11.0) to 625 (v3.11.1).
Native 1-file rebuild regression (v3.8.1 42 ms → v3.9.0 562 ms, ↑1238%): The native incremental
path is re-running graph-wide work on single-file rebuilds. The phase breakdown shows structureMs
at 151.7 ms for a 1-file rebuild vs 54.1 ms for the full 567-file build, and setupMs at 38.2 ms
vs 5.5 ms. AST/complexity/CFG/dataflow phases also jump from near-zero to 20-28 ms each,
suggesting these phases are not scoped to only the changed file. WASM 1-file rebuild (559 ms) is
superficially similar in total time but has a different root cause: WASM is parse-dominated
(parseMs 258.2 ms accounts for nearly half the total) while structureMs (28.3 ms),
astMs/cfgMs/dataflowMs (all under 1 ms) are correctly scoped. The native regression is
specifically in graph-wide phases being re-run during incremental builds. The no-op rebuild
(8 ms native, 15 ms WASM) is unaffected, confirming the regression is triggered by actual
file-change detection.
Engine edge divergence (v3.9.0, 1 edge): Native reports 30,609 edges and WASM reports 30,610 for the same 567-file codebase (node counts match at 15,483). This is a parity bug — tracked in #855.
WASM regression (v2.0.0 → v2.1.0, ↑32% — persists in v2.3.0): The
"v2.1.0" entry was measured after the v2.1.0 tag on main, when package.json
still read "2.1.0" but the codebase already included post-release features:
receiver field extraction (b08c2b2) and Commander/Express callback extraction
(2ac24ef). Both added WASM-to-JS boundary crossings on every
call_expression AST node. The native engine was unaffected because its Rust
extractors have zero boundary overhead — and it gained a net 24% speedup from
the ~45% edge reduction introduced by scoped call-resolution fallback
(3a11191). For WASM the extra crossings outweighed the edge savings. A
targeted fix in d4ef6da gated extractCallbackDefinition behind a
member_expression type check and eliminated redundant childForFieldName
calls, but the v2.3.0 CI benchmark confirms this was insufficient — WASM
remains at 6.6 ms/file (vs 5.0 in v2.0.0). The WASM/Native ratio widened from
2.0x to 3.5x. Further optimization of WASM boundary crossings in the JS
extractor is needed to recover the regression.
Build regression (v3.1.4 3.5 ms/file → v3.3.0 8 ms/file, +129% native): The codebase grew from 398 to 429 files (+8%), but the per-file regression is real and driven by richer extraction. Between v3.1.4 and v3.3.0, type inference was extended to all typed languages (#501), receiver type tracking with graded confidence was added (#505), re-exported barrel file symbols are now tracked (#515), and package.json exports + monorepo workspace resolution was introduced (#509). These produce 33% more nodes/file (13.4 → 17.8) and 28% more edges/file (28.8 → 36.8). The Parse phase tripled on native (468 → 1511 ms) because extractors now perform additional AST traversals for type annotations and receiver resolution. The Complexity phase grew 10× (16 → 179 ms) because 33% more functions each require full AST analysis. Major refactors also decomposed monolithic extractors into per-category handlers (#490) and split domain/feature modules (#491, #492), adding 31 new source files — the benchmark measures codegraph on itself, so more source files amplify per-file overhead.
Native build regression (v3.0.0 4.4 ms/file → v3.0.3 12.3 ms/file): The regression is entirely from new build phases added in v3.0.1 that are now default-on: AST node extraction (651ms), dataflow analysis (367ms), and CFG construction (169ms) — totalling ~1,187ms of new work. The original seven phases (parse, insert, resolve, edges, structure, roles, complexity) actually got slightly faster (728ms → 542ms). As of v3.1.0, CFG and dataflow run natively in Rust, eliminating the redundant WASM pre-parse that previously added ~388ms on native builds.