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.
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 | |
|---|---|---|---|---|---|
| aider/coders/base_coder.py | 2,485 | 930 | 19 | 46,360.3 | |
| aider/commands.py | 1,712 | 672 | 31 | 27,804.9 | |
| aider/main.py | 1,274 | 729 | 24 | 26,020.3 | |
| HISTORY.md | 1,533 | 539 | 8 | 21,103.8 | |
| aider/models.py | 1,338 | 486 | 21 | 17,777.2 | |
| aider/website/HISTORY.md | 1,557 | 372 | 5 | 14,678.7 | |
| aider/io.py | 1,191 | 421 | 18 | 14,529.1 | |
| aider/website/assets/sample-analytics.jsonl | 1,000 | 404 | 1 | 12,775.6 | |
| benchmark/benchmark.py | 1,059 | 257 | 4 | 8,363.4 | |
| aider/resources/model-settings.yml | 3,128 | 147 | 18 | 8,221.5 |
| File | Lines | Changes | Authors | Score | |
|---|---|---|---|---|---|
| aider/coders/base_coder.py | 2,485 | 930 | 19 | 46,360.3 | |
| aider/commands.py | 1,712 | 672 | 31 | 27,804.9 | |
| aider/main.py | 1,274 | 729 | 24 | 26,020.3 | |
| HISTORY.md | 1,533 | 539 | 8 | 21,103.8 | |
| aider/models.py | 1,338 | 486 | 21 | 17,777.2 | |
| aider/website/HISTORY.md | 1,557 | 372 | 5 | 14,678.7 | |
| aider/io.py | 1,191 | 421 | 18 | 14,529.1 | |
| aider/website/assets/sample-analytics.jsonl | 1,000 | 404 | 1 | 12,775.6 | |
| benchmark/benchmark.py | 1,059 | 257 | 4 | 8,363.4 | |
| aider/resources/model-settings.yml | 3,128 | 147 | 18 | 8,221.5 | |
| aider/repomap.py | 867 | 270 | 4 | 7,950.1 | |
| aider/website/docs/config/adv-model-settings.md | 3,429 | 131 | 7 | 7,671.1 | |
| tests/basic/test_main.py | 1,483 | 195 | 4 | 7,509.4 | |
| tests/basic/test_commands.py | 2,226 | 146 | 5 | 6,888.4 | |
| README.md | 179 | 496 | 11 | 6,636.0 | |
| aider/args.py | 945 | 214 | 19 | 6,578.5 | |
| aider/website/docs/faq.md | 383 | 312 | 4 | 6,106.0 | |
| aider/website/_data/edit_leaderboard.yml | 2,232 | 97 | 7 | 4,582.7 | |
| aider/repo.py | 622 | 179 | 11 | 4,464.2 | |
| aider/website/docs/leaderboards/index.md | 290 | 243 | 2 | 4,138.1 | |
| aider/website/_data/polyglot_leaderboard.yml | 1,856 | 92 | 8 | 3,963.5 | |
| aider/utils.py | 348 | 209 | 6 | 3,898.8 | |
| requirements.txt | 489 | 166 | 8 | 3,670.8 | |
| tests/basic/test_coder.py | 1,438 | 90 | 1 | 3,412.9 | |
| aider/coders/editblock_coder.py | 657 | 130 | 5 | 3,332.2 | |
| aider/watch.py | 318 | 181 | 3 | 3,227.7 | |
| aider/website/_data/blame.yml | 4,896 | 46 | 1 | 3,218.7 | |
| aider/website/docs/config/options.md | 863 | 95 | 7 | 2,790.8 | |
| aider/website/index.html | 695 | 101 | 1 | 2,662.6 | |
| tests/basic/test_models.py | 600 | 97 | 2 | 2,376.0 | |
| aider/website/docs/config/aider_conf.md | 536 | 102 | 4 | 2,361.5 | |
| tests/basic/test_repomap.py | 510 | 98 | 7 | 2,213.2 | |
| aider/website/assets/sample.aider.conf.yml | 480 | 97 | 7 | 2,125.2 | |
| aider/website/docs/config/dotenv.md | 490 | 94 | 3 | 2,080.8 | |
| aider/website/assets/sample.env | 448 | 89 | 4 | 1,883.8 | |
| scripts/blame.py | 296 | 104 | 1 | 1,789.3 | |
| aider/__init__.py | 20 | 378 | 1 | 1,690.5 | |
| scripts/issues.py | 458 | 78 | 1 | 1,669.3 | |
| aider/linter.py | 304 | 95 | 6 | 1,656.4 | |
| requirements/common-constraints.txt | 629 | 66 | 4 | 1,655.3 | |
| requirements/requirements-help.txt | 387 | 82 | 4 | 1,613.1 | |
| aider/resources/model-metadata.json | 715 | 59 | 12 | 1,577.6 | |
| benchmark/problem_stats.py | 355 | 78 | 1 | 1,469.6 | |
| tests/basic/test_io.py | 610 | 56 | 1 | 1,383.1 | |
| requirements/requirements-dev.txt | 320 | 76 | 4 | 1,359.5 | |
| aider/analytics.py | 258 | 82 | 2 | 1,317.1 | |
| aider/gui.py | 545 | 53 | 2 | 1,237.3 | |
| aider/website/assets/home.css | 937 | 38 | 1 | 1,163.2 | |
| aider/scrape.py | 284 | 64 | 3 | 1,078.5 | |
| tests/basic/test_repo.py | 716 | 40 | 4 | 1,070.3 | |
| tests/basic/test_reasoning.py | 609 | 43 | 1 | 1,061.2 | |
| aider/coders/editblock_prompts.py | 172 | 80 | 3 | 1,049.2 | |
| aider/sendchat.py | 61 | 119 | 5 | 929.4 | |
| benchmark/over_time.py | 168 | 71 | 1 | 920.3 | |
| requirements/requirements-browser.txt | 155 | 69 | 4 | 859.0 | |
| aider/mdstream.py | 243 | 48 | 2 | 748.2 | |
| aider/voice.py | 187 | 54 | 3 | 738.4 | |
| aider/onboarding.py | 428 | 35 | 2 | 724.1 | |
| aider/website/_includes/blame.md | 162 | 55 | 2 | 700.0 | |
| aider/website/docs/more/infinite-output.md | 256 | 43 | 2 | 688.0 | |
| scripts/versionbump.py | 175 | 50 | 1 | 661.4 | |
| aider/report.py | 200 | 46 | 1 | 650.5 | |
| aider/coders/wholefile_coder.py | 144 | 54 | 2 | 648.0 | |
| aider/history.py | 143 | 54 | 4 | 645.7 | |
| tests/fixtures/chat-history.md | 99,961 | 2 | 1 | 632.3 | |
| aider/website/_includes/leaderboard_table.js | 520 | 27 | 1 | 615.7 | |
| aider/website/docs/usage/commands.md | 131 | 52 | 6 | 595.2 | |
| aider/website/_posts/2024-09-26-architect.md | 418 | 29 | 2 | 592.9 | |
| aider/website/_posts/2024-08-14-code-in-json.md | 254 | 37 | 2 | 589.7 | |
| aider/prompts.py | 61 | 74 | 8 | 578.0 | |
| aider/versioncheck.py | 113 | 50 | 1 | 531.5 | |
| scripts/update-history.py | 162 | 41 | 1 | 521.8 | |
| aider/website/_posts/2024-11-21-quantization.md | 194 | 36 | 2 | 501.4 | |
| aider/help.py | 163 | 38 | 1 | 485.2 | |
| aider/website/assets/models-over-time.svg | 1,974 | 10 | 1 | 444.3 | |
| aider/website/_includes/recording.js | 428 | 21 | 1 | 434.5 | |
| tests/basic/test_editblock.py | 618 | 17 | 5 | 422.6 | |
| aider/website/_data/quant.yml | 322 | 23 | 2 | 412.7 | |
| aider/run_cmd.py | 132 | 35 | 2 | 402.1 | |
| aider/website/_posts/2025-01-28-deepseek-down.md | 257 | 24 | 1 | 384.7 | |
| tests/basic/test_sendchat.py | 171 | 29 | 1 | 379.2 | |
| aider/website/docs/languages.md | 262 | 23 | 2 | 372.3 | |
| aider/coders/patch_coder.py | 706 | 14 | 1 | 372.0 | |
| aider/special.py | 203 | 26 | 2 | 370.4 | |
| tests/basic/test_watch.py | 166 | 28 | 3 | 360.8 | |
| scripts/clean_metadata.py | 258 | 22 | 1 | 353.4 | |
| tests/fixtures/chat-history-search-replace-gold.txt | 27,808 | 2 | 1 | 333.5 | |
| aider/website/docs/usage/watch.md | 294 | 19 | 4 | 325.8 | |
| aider/args_formatter.py | 228 | 21 | 1 | 317.1 | |
| aider/exceptions.py | 113 | 29 | 3 | 308.3 | |
| tests/basic/test_editor.py | 159 | 24 | 2 | 302.6 | |
| requirements/requirements.in | 50 | 42 | 7 | 297.0 | |
| aider/diffs.py | 128 | 26 | 1 | 294.2 | |
| .github/workflows/windows-tests.yml | 51 | 41 | 5 | 292.8 | |
| tests/basic/test_onboarding.py | 437 | 14 | 1 | 292.7 | |
| aider/website/_includes/leaderboard.js | 246 | 18 | 1 | 282.3 | |
| aider/website/docs/config/model-aliases.md | 105 | 27 | 1 | 276.7 | |
| aider/website/docs/usage/modes.md | 210 | 19 | 2 | 275.3 | |
| aider/website/_includes/recording.css | 228 | 18 | 1 | 271.8 | |
| aider/coders/udiff_coder.py | 429 | 13 | 2 | 269.3 |