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 9,160 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 | |
|---|---|---|---|---|---|
| codex-rs/Cargo.lock | 17,992 | 1,343 | 149 | 180,142.3 | |
| codex-rs/app-server-protocol/schema/json/codex_app_server_protocol.schemas.json | 27,021 | 624 | 119 | 102,573.5 | |
| codex-rs/app-server-protocol/schema/json/codex_app_server_protocol.v2.schemas.json | 24,734 | 520 | 114 | 81,780.6 | |
| codex-rs/core/src/session/tests.rs | 13,556 | 583 | 92 | 67,878.8 | |
| codex-rs/core/config.schema.json | 8,132 | 570 | 107 | 51,401.2 | |
| codex-rs/protocol/src/protocol.rs | 6,558 | 556 | 95 | 45,025.7 | |
| codex-rs/core/src/config/config_tests.rs | 13,604 | 384 | 79 | 44,788.3 | |
| codex-rs/core/src/config/mod.rs | 5,135 | 614 | 93 | 43,998.6 | |
| codex-rs/core/src/session/mod.rs | 5,520 | 580 | 92 | 43,092.1 | |
| codex-rs/tui/src/chatwidget.rs | 2,117 | 877 | 78 | 40,351.5 |
| File | Lines | Changes | Authors | Score | |
|---|---|---|---|---|---|
| codex-rs/Cargo.lock | 17,992 | 1,343 | 149 | 180,142.3 | |
| codex-rs/app-server-protocol/schema/json/codex_app_server_protocol.schemas.json | 27,021 | 624 | 119 | 102,573.5 | |
| codex-rs/app-server-protocol/schema/json/codex_app_server_protocol.v2.schemas.json | 24,734 | 520 | 114 | 81,780.6 | |
| codex-rs/core/src/session/tests.rs | 13,556 | 583 | 92 | 67,878.8 | |
| codex-rs/core/config.schema.json | 8,132 | 570 | 107 | 51,401.2 | |
| codex-rs/protocol/src/protocol.rs | 6,558 | 556 | 95 | 45,025.7 | |
| codex-rs/core/src/config/config_tests.rs | 13,604 | 384 | 79 | 44,788.3 | |
| codex-rs/core/src/config/mod.rs | 5,135 | 614 | 93 | 43,998.6 | |
| codex-rs/core/src/session/mod.rs | 5,520 | 580 | 92 | 43,092.1 | |
| codex-rs/tui/src/chatwidget.rs | 2,117 | 877 | 78 | 40,351.5 | |
| codex-rs/tui/src/bottom_pane/chat_composer.rs | 12,667 | 351 | 64 | 39,504.3 | |
| codex-rs/tui/src/lib.rs | 4,113 | 506 | 74 | 32,451.1 | |
| codex-rs/tui/src/app/tests.rs | 10,230 | 313 | 59 | 31,657.9 | |
| codex-rs/app-server-protocol/schema/json/ClientRequest.json | 8,777 | 272 | 75 | 25,482.5 | |
| codex-rs/app-server-protocol/schema/json/ServerNotification.json | 8,817 | 240 | 76 | 22,535.7 | |
| codex-rs/app-server-protocol/src/protocol/common.rs | 4,630 | 331 | 75 | 22,522.6 | |
| codex-rs/tui/src/app.rs | 1,300 | 602 | 67 | 21,705.4 | |
| codex-rs/tui/src/bottom_pane/mod.rs | 4,318 | 327 | 51 | 21,487.7 | |
| codex-rs/core/src/client.rs | 3,091 | 379 | 65 | 21,071.2 | |
| codex-rs/cli/src/main.rs | 5,048 | 295 | 65 | 20,959.5 | |
| codex-rs/core/tests/suite/client.rs | 4,319 | 290 | 57 | 19,058.5 | |
| codex-rs/core/tests/suite/code_mode.rs | 9,448 | 186 | 43 | 18,079.4 | |
| codex-rs/core/src/session/turn.rs | 3,330 | 308 | 68 | 17,773.5 | |
| codex-rs/app-server/src/bespoke_event_handling.rs | 3,953 | 259 | 66 | 16,284.1 | |
| codex-rs/tui/src/app/event_dispatch.rs | 3,888 | 261 | 30 | 16,274.3 | |
| codex-rs/core/src/session/session.rs | 2,007 | 354 | 76 | 15,859.0 | |
| codex-rs/app-server/src/request_processors/thread_processor.rs | 6,679 | 192 | 55 | 15,691.2 | |
| codex-rs/tui/src/app_server_session.rs | 4,492 | 227 | 55 | 15,214.1 | |
| codex-rs/app-server/README.md | 618 | 610 | 110 | 15,164.4 | |
| codex-rs/exec/src/lib.rs | 2,433 | 299 | 70 | 14,748.3 | |
| codex-rs/app-server/tests/suite/v2/thread_resume.rs | 6,480 | 183 | 45 | 14,731.2 | |
| codex-rs/core/src/agent/control_tests.rs | 6,119 | 184 | 49 | 14,393.2 | |
| codex-rs/core/tests/suite/rmcp_client.rs | 5,187 | 196 | 53 | 14,116.1 | |
| codex-rs/app-server/tests/suite/v2/turn_start.rs | 5,789 | 185 | 54 | 14,075.8 | |
| codex-rs/protocol/src/models.rs | 4,726 | 192 | 43 | 13,199.2 | |
| codex-rs/core/src/thread_manager.rs | 2,783 | 242 | 54 | 12,766.5 | |
| codex-rs/app-server-protocol/src/protocol/v2/tests.rs | 5,450 | 168 | 67 | 12,402.5 | |
| codex-rs/app-server/src/message_processor.rs | 1,933 | 281 | 67 | 12,354.4 | |
| codex-rs/core/tests/suite/compact.rs | 6,250 | 156 | 39 | 12,332.9 | |
| codex-rs/features/src/lib.rs | 2,153 | 262 | 67 | 12,156.9 | |
| codex-rs/core/src/tools/handlers/multi_agents_tests.rs | 4,708 | 176 | 35 | 12,076.2 | |
| codex-rs/tui/src/app_event.rs | 1,773 | 285 | 48 | 12,000.5 | |
| codex-rs/core/src/guardian/tests.rs | 4,308 | 182 | 35 | 11,945.6 | |
| codex-rs/Cargo.toml | 652 | 464 | 85 | 11,847.9 | |
| codex-rs/tui/src/resume_picker.rs | 7,337 | 136 | 35 | 11,649.3 | |
| codex-rs/codex-mcp/src/connection_manager_tests.rs | 6,686 | 123 | 44 | 10,057.5 | |
| .github/workflows/rust-release.yml | 2,172 | 215 | 38 | 10,020.0 | |
| codex-rs/core/src/mcp_tool_call.rs | 2,540 | 188 | 54 | 9,474.9 | |
| codex-rs/core/src/thread_manager_tests.rs | 3,516 | 157 | 51 | 9,309.5 | |
| codex-rs/tui/src/chatwidget/tests/status_and_layout.rs | 5,916 | 121 | 38 | 9,306.8 | |
| codex-rs/app-server-protocol/src/protocol/thread_history.rs | 5,584 | 124 | 50 | 9,266.0 | |
| codex-rs/core/src/mcp_tool_call_tests.rs | 3,686 | 152 | 49 | 9,228.3 | |
| codex-rs/core-plugins/src/manager_tests.rs | 7,754 | 104 | 32 | 9,157.9 | |
| codex-rs/core/tests/suite/unified_exec.rs | 4,100 | 143 | 28 | 9,156.5 | |
| codex-rs/app-server/src/lib.rs | 1,638 | 215 | 50 | 8,701.5 | |
| codex-rs/tui/src/chatwidget/tests.rs | 330 | 477 | 66 | 8,665.1 | |
| codex-rs/core/src/session/turn_context.rs | 1,496 | 222 | 56 | 8,586.6 | |
| codex-rs/core/src/tools/spec_plan_tests.rs | 3,394 | 143 | 30 | 8,330.9 | |
| codex-rs/core/tests/suite/realtime_conversation.rs | 6,147 | 105 | 29 | 8,232.3 | |
| codex-rs/tui/src/app/tests/session_lifecycle_requests.rs | 5,374 | 109 | 20 | 7,990.5 | |
| codex-rs/core/src/context_manager/history_tests.rs | 3,562 | 132 | 31 | 7,878.1 | |
| codex-rs/core/tests/suite/remote_env.rs | 4,842 | 111 | 22 | 7,723.9 | |
| MODULE.bazel.lock | 2,542 | 153 | 49 | 7,714.0 | |
| codex-rs/core/tests/suite/approvals.rs | 4,687 | 111 | 25 | 7,599.2 | |
| codex-rs/core/tests/suite/client_websockets.rs | 3,095 | 133 | 41 | 7,399.2 | |
| sdk/python/src/openai_codex/generated/v2_all.py | 13,360 | 63 | 34 | 7,281.9 | |
| codex-rs/core/src/codex_thread.rs | 1,267 | 203 | 55 | 7,225.8 | |
| codex-rs/app-server-protocol/schema/json/v2/ThreadResumeResponse.json | 3,236 | 124 | 48 | 7,053.8 | |
| codex-rs/core/src/unified_exec/process_manager.rs | 1,929 | 160 | 35 | 7,027.3 | |
| codex-rs/app-server-protocol/schema/json/v2/ThreadForkResponse.json | 3,131 | 122 | 48 | 6,826.6 | |
| codex-rs/app-server-protocol/schema/json/v2/ThreadStartResponse.json | 3,131 | 122 | 48 | 6,826.6 | |
| codex-rs/app-server/tests/suite/v2/plugin_list.rs | 5,855 | 89 | 25 | 6,810.1 | |
| codex-rs/core/tests/common/test_codex.rs | 1,613 | 169 | 43 | 6,787.4 | |
| codex-rs/core/src/tools/spec_plan.rs | 1,680 | 164 | 33 | 6,722.0 | |
| codex-rs/tui/src/chatwidget/tests/popups_and_settings.rs | 4,420 | 99 | 30 | 6,581.8 | |
| codex-rs/analytics/src/reducer.rs | 4,214 | 101 | 38 | 6,556.4 | |
| codex-rs/tui/src/chatwidget/tests/slash_commands.rs | 3,881 | 101 | 21 | 6,292.1 | |
| codex-rs/core-plugins/src/manager.rs | 3,851 | 101 | 29 | 6,267.7 | |
| codex-rs/app-server-protocol/schema/typescript/v2/index.ts | 653 | 236 | 63 | 6,030.7 | |
| codex-rs/tui/src/chatwidget/tests/helpers.rs | 1,848 | 139 | 41 | 5,975.4 | |
| codex-rs/ext/guardian-v2/src/async_scorer/extension_tests.rs | 3,808 | 95 | 18 | 5,862.4 | |
| codex-rs/tui/src/app/thread_routing.rs | 2,154 | 126 | 26 | 5,847.8 | |
| codex-rs/core/tests/suite/hooks.rs | 5,960 | 75 | 23 | 5,790.1 | |
| codex-rs/core/src/lib.rs | 258 | 356 | 71 | 5,718.2 | |
| codex-rs/core/tests/suite/compact_remote.rs | 1,701 | 137 | 35 | 5,650.3 | |
| codex-rs/core/src/guardian/review_session.rs | 1,040 | 173 | 36 | 5,579.1 | |
| codex-rs/core/src/tasks/mod.rs | 1,054 | 168 | 45 | 5,454.2 | |
| codex-rs/tui/src/bottom_pane/textarea.rs | 4,721 | 79 | 27 | 5,428.1 | |
| codex-rs/state/src/runtime/threads.rs | 3,829 | 87 | 33 | 5,383.5 | |
| codex-rs/core/src/context_manager/history.rs | 1,405 | 143 | 29 | 5,360.1 | |
| codex-rs/app-server/src/request_processors/plugins.rs | 2,490 | 105 | 31 | 5,239.5 | |
| codex-rs/config/src/config_requirements.rs | 4,970 | 74 | 32 | 5,216.9 | |
| codex-rs/app-server-protocol/schema/json/v2/ThreadListResponse.json | 2,937 | 95 | 44 | 5,148.4 | |
| codex-rs/core/src/realtime_conversation.rs | 2,841 | 96 | 25 | 5,116.9 | |
| codex-rs/core/tests/suite/subagent_notifications.rs | 3,518 | 86 | 22 | 5,100.9 | |
| codex-rs/app-server-protocol/schema/json/v2/ThreadReadResponse.json | 2,920 | 94 | 43 | 5,079.5 | |
| codex-rs/core/src/exec.rs | 1,277 | 142 | 26 | 5,074.4 | |
| codex-rs/core/tests/suite/view_image.rs | 1,733 | 120 | 30 | 4,995.5 | |
| codex-rs/protocol/src/openai_models.rs | 2,024 | 111 | 29 | 4,993.8 | |
| codex-rs/core/src/session/mcp.rs | 1,348 | 136 | 49 | 4,993.3 |