Files that are both large and changed often are where bugs tend to cluster and where refactoring pays off first. Each file in the current tree is placed by its size and by the number of commits that changed it; its hotspot score is changes × √lines. Files without counted lines, such as binary files, are left out.
Each dot is a file; a bigger dot is a higher score. The dashed lines mark the median file size and the median number of changes, so the large files that change often are in the top right. Both axes are logarithmic. Showing the 2,000 highest-scoring of 8,210 files.
The files ranked by hotspot score: the larger a file is and the more often it changes, the higher it ranks. Authors is how many people have changed the file, bots aside, as on the Code Ownership page: a hotspot only one person has changed is also a bus-factor risk.
| File | Lines | Changes | Authors | Score | |
|---|---|---|---|---|---|
| bun.lock | 7,837 | 1,529 | 68 | 135,357.5 | |
| packages/core/test/session-runner.test.ts | 6,811 | 250 | 11 | 20,632.2 | |
| packages/client/src/promise/generated/types.ts | 6,830 | 227 | 15 | 18,760.1 | |
| packages/tui/src/routes/session/index.tsx | 3,640 | 308 | 16 | 18,582.4 | |
| packages/protocol/openapi.json | 20,551 | 113 | 10 | 16,199.3 | |
| packages/stats/app/src/routes/index.css | 8,911 | 108 | 5 | 10,195.0 | |
| packages/plugin/package.json | 71 | 944 | 17 | 7,954.3 | |
| packages/tui/src/app.tsx | 1,442 | 183 | 15 | 6,949.2 | |
| sdks/vscode/package.json | 108 | 647 | 7 | 6,723.8 | |
| packages/ui/package.json | 132 | 585 | 18 | 6,721.1 |
| File | Lines | Changes | Authors | Score | |
|---|---|---|---|---|---|
| bun.lock | 7,837 | 1,529 | 68 | 135,357.5 | |
| packages/core/test/session-runner.test.ts | 6,811 | 250 | 11 | 20,632.2 | |
| packages/client/src/promise/generated/types.ts | 6,830 | 227 | 15 | 18,760.1 | |
| packages/tui/src/routes/session/index.tsx | 3,640 | 308 | 16 | 18,582.4 | |
| packages/protocol/openapi.json | 20,551 | 113 | 10 | 16,199.3 | |
| packages/stats/app/src/routes/index.css | 8,911 | 108 | 5 | 10,195.0 | |
| packages/plugin/package.json | 71 | 944 | 17 | 7,954.3 | |
| packages/tui/src/app.tsx | 1,442 | 183 | 15 | 6,949.2 | |
| sdks/vscode/package.json | 108 | 647 | 7 | 6,723.8 | |
| packages/ui/package.json | 132 | 585 | 18 | 6,721.1 | |
| services/www/openapi.json | 20,551 | 46 | 9 | 6,594.4 | |
| services/www/public/openapi.json | 20,551 | 46 | 9 | 6,594.4 | |
| packages/tui/test/cli/tui/data.test.tsx | 3,670 | 108 | 10 | 6,542.7 | |
| packages/ai/test/provider/openai-responses.test.ts | 5,242 | 90 | 5 | 6,516.1 | |
| packages/tui/src/component/prompt/index.tsx | 2,011 | 139 | 12 | 6,233.3 | |
| packages/client/src/effect/api/api.ts | 2,297 | 125 | 9 | 5,990.9 | |
| packages/client/src/promise/generated/client.ts | 2,309 | 122 | 10 | 5,862.4 | |
| package.json | 189 | 404 | 30 | 5,554.1 | |
| .github/workflows/publish.yml | 675 | 203 | 12 | 5,274.1 | |
| packages/desktop/package.json | 69 | 594 | 14 | 4,934.1 | |
| packages/web/src/content/docs/providers.mdx | 2,686 | 95 | 56 | 4,923.5 | |
| packages/web/package.json | 42 | 675 | 11 | 4,374.5 | |
| packages/client/src/effect/generated/client.ts | 1,644 | 107 | 7 | 4,338.5 | |
| packages/core/test/config/config.test.ts | 1,913 | 97 | 10 | 4,242.6 | |
| packages/core/test/mcp.test.ts | 2,622 | 80 | 9 | 4,096.4 | |
| packages/app/package.json | 93 | 422 | 12 | 4,069.6 | |
| packages/stats/app/src/routes/index.tsx | 1,882 | 89 | 5 | 3,861.0 | |
| packages/console/app/package.json | 41 | 577 | 16 | 3,694.6 | |
| packages/core/test/tool-shell.test.ts | 1,864 | 83 | 7 | 3,583.4 | |
| packages/core/src/session/runner/llm.ts | 408 | 168 | 8 | 3,393.4 | |
| packages/core/test/session-create.test.ts | 1,516 | 87 | 7 | 3,387.4 | |
| STATS.md | 217 | 218 | 5 | 3,211.3 | |
| packages/app/src/runtime/i18n/en.ts | 1,051 | 99 | 8 | 3,209.5 | |
| packages/core/src/session.ts | 495 | 144 | 9 | 3,203.8 | |
| packages/ai/src/protocols/open-responses.ts | 1,509 | 82 | 5 | 3,185.4 | |
| packages/core/package.json | 139 | 270 | 17 | 3,183.3 | |
| packages/function/package.json | 23 | 652 | 9 | 3,126.9 | |
| packages/app/e2e/utils/mock-server.ts | 1,612 | 77 | 10 | 3,091.5 | |
| packages/session-ui/src/tools/tool-renderer.tsx | 2,434 | 60 | 6 | 2,960.1 | |
| packages/enterprise/package.json | 51 | 413 | 12 | 2,949.4 | |
| packages/console/app/src/i18n/en.ts | 448 | 139 | 13 | 2,942.1 | |
| packages/core/test/plugin/provider-opencode.test.ts | 1,899 | 66 | 10 | 2,876.1 | |
| packages/tui/test/mini/stream-v2.transport.test.ts | 4,668 | 41 | 6 | 2,801.2 | |
| packages/core/src/session/compaction.ts | 988 | 89 | 6 | 2,797.5 | |
| packages/ai/src/protocols/anthropic-messages.ts | 1,676 | 65 | 7 | 2,661.0 | |
| packages/console/app/src/routes/go/index.tsx | 382 | 136 | 8 | 2,658.1 | |
| packages/stats/app/src/routes/[lab]/[model].tsx | 1,494 | 68 | 5 | 2,628.4 | |
| packages/client/test/promise.test.ts | 1,127 | 78 | 8 | 2,618.5 | |
| packages/util/package.json | 74 | 304 | 8 | 2,615.1 | |
| packages/console/function/package.json | 22 | 553 | 11 | 2,593.8 | |
| packages/client/src/solid/data.ts | 2,016 | 57 | 8 | 2,559.3 | |
| packages/tui/src/component/session-tabs.tsx | 1,803 | 60 | 5 | 2,547.7 | |
| packages/web/src/components/Share.tsx | 646 | 100 | 12 | 2,541.7 | |
| packages/core/src/session/projector.ts | 810 | 89 | 7 | 2,533.0 | |
| packages/core/test/session-prompt.test.ts | 1,217 | 72 | 7 | 2,511.8 | |
| packages/console/app/src/i18n/de.ts | 449 | 118 | 11 | 2,500.4 | |
| packages/console/app/src/i18n/tr.ts | 449 | 118 | 12 | 2,500.4 | |
| packages/console/app/src/i18n/fr.ts | 453 | 117 | 11 | 2,490.2 | |
| packages/console/app/src/i18n/pl.ts | 450 | 117 | 11 | 2,481.9 | |
| packages/console/app/src/i18n/ru.ts | 450 | 117 | 11 | 2,481.9 | |
| packages/console/app/src/i18n/br.ts | 448 | 117 | 11 | 2,476.4 | |
| packages/console/app/src/i18n/it.ts | 446 | 117 | 11 | 2,470.9 | |
| packages/console/app/src/i18n/no.ts | 444 | 117 | 12 | 2,465.3 | |
| packages/console/app/src/i18n/da.ts | 443 | 117 | 11 | 2,462.6 | |
| packages/console/app/src/i18n/ja.ts | 441 | 117 | 11 | 2,457.0 | |
| packages/console/app/src/i18n/es.ts | 448 | 116 | 11 | 2,455.3 | |
| packages/console/app/src/i18n/ar.ts | 437 | 117 | 11 | 2,445.8 | |
| packages/console/app/src/i18n/ko.ts | 434 | 117 | 11 | 2,437.4 | |
| packages/console/app/src/i18n/zht.ts | 423 | 118 | 11 | 2,426.9 | |
| packages/console/app/src/i18n/zh.ts | 425 | 117 | 11 | 2,412.0 | |
| packages/console/app/src/i18n/th.ts | 440 | 114 | 11 | 2,391.3 | |
| packages/tui/test/app-lifecycle.test.tsx | 1,753 | 57 | 9 | 2,386.5 | |
| packages/core/src/plugin/host.ts | 702 | 89 | 8 | 2,358.1 | |
| packages/codemode/test/parity.test.ts | 1,986 | 51 | 2 | 2,272.8 | |
| packages/protocol/src/groups/session.ts | 906 | 75 | 6 | 2,257.5 | |
| packages/ai/test/provider/openai-chat.test.ts | 2,270 | 47 | 4 | 2,239.3 | |
| packages/ai/test/provider/bedrock-converse.test.ts | 2,512 | 44 | 4 | 2,205.3 | |
| packages/core/test/model-resolver.test.ts | 1,607 | 55 | 7 | 2,204.8 | |
| packages/ai/test/provider/anthropic-messages.test.ts | 2,400 | 45 | 6 | 2,204.5 | |
| packages/codemode/interpreter-support.md | 657 | 86 | 2 | 2,204.4 | |
| packages/core/src/aisdk.ts | 1,078 | 66 | 9 | 2,167.0 | |
| packages/ai/src/protocols/openai-chat.ts | 1,322 | 59 | 6 | 2,145.2 | |
| packages/core/test/location-layer.test.ts | 704 | 79 | 8 | 2,096.1 | |
| packages/session-ui/src/components/message-part.css | 1,327 | 57 | 10 | 2,076.4 | |
| packages/ai/README.md | 1,402 | 55 | 7 | 2,059.4 | |
| packages/console/app/src/routes/go/index.css | 1,556 | 52 | 8 | 2,051.2 | |
| packages/codemode/test/stdlib.test.ts | 2,021 | 44 | 2 | 1,978.0 | |
| packages/tui/src/component/prompt/autocomplete.tsx | 953 | 64 | 9 | 1,975.7 | |
| packages/tui/test/mini/footer.view.test.tsx | 2,521 | 39 | 7 | 1,958.2 | |
| packages/server/src/handlers/session.ts | 715 | 72 | 6 | 1,925.2 | |
| packages/tui/test/cli/tui/diff-viewer.test.tsx | 2,446 | 37 | 10 | 1,829.9 | |
| packages/httpapi-codegen/src/index.ts | 1,961 | 40 | 6 | 1,771.3 | |
| packages/core/test/plugin/models-dev.test.ts | 1,303 | 48 | 8 | 1,732.7 | |
| packages/web/src/content/docs/config.mdx | 948 | 56 | 25 | 1,724.2 | |
| packages/tui/src/mini/stream-v2.transport.ts | 1,898 | 39 | 5 | 1,699.1 | |
| packages/core/src/plugin/provider/opencode.ts | 667 | 65 | 10 | 1,678.7 | |
| packages/core/src/session/runner/publish-llm-event.ts | 680 | 64 | 8 | 1,668.9 | |
| packages/ui/src/styles/theme.css | 632 | 66 | 10 | 1,659.2 | |
| packages/tui/src/component/dialog-integration.tsx | 1,259 | 46 | 10 | 1,632.2 | |
| packages/core/src/config.ts | 435 | 78 | 8 | 1,626.8 |