Range: v3.14.0 → v3.15.0b1 Overall: net +7,269,378 hand-written non-whitespace characters (excluding generated/vendored code) across 4,419 commits
Measured in non-whitespace characters (not lines), excluding whitespace-only changes. % of Net excludes generated/vendored files
(.gitattributes generated markers, _vendor/, Modules/expat, Modules/_hacl, ensurepip/_bundled/, *.min.js).
| Feature | Commits | Net Chars | Hand Net Chars | % of Net | Test % | Gen % | Top Contributors by Chars (top 3 + ≥5%) | Languages |
|---|---|---|---|---|---|---|---|---|
| PEP 799: Profiling/Tachyon | 153 | +2,830,193 | +1,384,581 | 19.05% | 16% | 51% | Pablo Galindo Salgado (74%), László Kiss Kollár (12%), Ivona Stojanovic (4%) | Py 31%, Other 30%, C/H 18% |
| Documentation | 869 | +1,511,522 | +447,251 | 6.15% | 1% | 70% | Adam Turner (15%), Peter Bierma (13%), Petr Viktorin (11%), Stan Ulbrych (8%), Ned Batchelder (7%) | rST 51%, Other 40%, C/H 3% |
| Free-threading / GIL | 196 | +335,015 | +301,408 | 4.15% | 29% | 10% | Sam Gross (18%), Neil Schemenauer (17%), Alper Yoney (14%), Lysandros Nikolaou (9%), Kumar Aditya (8%) | C/H 60%, Py 19%, rST 12% |
| JIT Compiler | 237 | +927,774 | +289,905 | 3.99% | 11% | 69% | Ken Jin (31%), Diego Russo (16%), Mark Shannon (12%), Hai Zhu (7%), Kumar Aditya (6%) | C/H 93%, Py 6% |
| C API (general) | 190 | +632,897 | +268,372 | 3.69% | 16% | 58% | Petr Viktorin (19%), Sergey B Kirpichev (18%), Serhiy Storchaka (14%), Victor Stinner (11%), Adam Turner (10%) | C/H 72%, rST 13%, Py 11% |
| Optimizations / Performance | 131 | +366,296 | +230,371 | 3.17% | 21% | 37% | Mark Shannon (26%), Pablo Galindo Salgado (17%), Pieter Eendebak (9%), Ken Jin (7%), Hai Zhu (6%) | C/H 94%, Py 5% |
| PEP 803/820/793: Stable ABI | 19 | +170,263 | +139,767 | 1.92% | 31% | 18% | Petr Viktorin (99.6%), David Woods (0.4%) | C/H 49%, rST 30%, Py 11% |
| Build System | 124 | +141,798 | +135,212 | 1.86% | 12% | 5% | Russell Keith-Magee (23%), Neil Schemenauer (14%), Pablo Galindo Salgado (9%), Steve Dower (8%) | C/H 26%, Py 26%, Other 20% |
| PEP 810: Lazy Imports | 30 | +143,172 | +126,804 | 1.74% | 48% | 11% | Pablo Galindo Salgado (64%), Bartosz Sławecki (15%), Brett Cannon (11%) | Py 59%, C/H 33%, rST 7% |
| asyncio | 77 | +96,650 | +96,650 | 1.33% | 42% | 0% | Pablo Galindo Salgado (25%), Kumar Aditya (24%), Alexander Nordin (11%), Bartosz Sławecki (10%) | Py 60%, rST 24%, C/H 10% |
| Memory / Refcount / Leaks | 148 | +106,872 | +73,946 | 1.02% | 43% | 31% | Bénédikt Tran (15%), Ken Jin (9%), Serhiy Storchaka (7%), Nadeshiko Manju (6%), Hai Zhu (5%) | C/H 93%, Py 5% |
| More Color | 62 | +70,881 | +70,846 | 0.97% | 47% | 0% | Hugo van Kemenade (31%), Sergey Miryanov (22%), Antonio Cuni (7%), Pablo Galindo Salgado (6%) | Py 57%, C/H 28%, rST 10% |
| Improved Error Messages | 50 | +78,347 | +68,157 | 0.94% | 29% | 13% | Serhiy Storchaka (27%), Pablo Galindo Salgado (23%), Jason R. Coombs (9%), Stan Ulbrych (9%), Matt Van Horn (5%) | C/H 80%, Py 18% |
| PEP 831: Frame Pointers | 17 | +73,678 | +66,556 | 0.92% | 36% | 10% | Diego Russo (80%), Pablo Galindo Salgado (13%), Petr Viktorin (3%) | C/H 63%, Py 22%, Other 11% |
| Windows | 123 | +64,370 | +66,456 | 0.91% | 23% | -3% | Steve Dower (22%), Serhiy Storchaka (16%), Chris Eibl (11%), AN Long (10%), Adam Turner (7%) | C/H 40%, Py 28%, Other 17% |
| Deprecations & Removals | 70 | +66,977 | +61,471 | 0.85% | 56% | 8% | Serhiy Storchaka (14%), Bénédikt Tran (13%), Hugo van Kemenade (12%), Rani Pinchuk (9%), Petr Viktorin (8%) | Py 41%, rST 35%, C/H 20% |
| PEP 788: Finalization Protection | 17 | +54,954 | +53,662 | 0.74% | 49% | 2% | Peter Bierma (86%), Ken Jin (4%), Petr Viktorin (3%) | C/H 57%, rST 28%, Py 14% |
| iOS / Android / Mobile | 59 | +45,845 | +45,666 | 0.63% | 25% | 0% | Russell Keith-Magee (71%), Malcolm Smith (24%), Łukasz Langa (1%) | Py 47%, Other 16%, rST 16% |
| PEP 814: frozendict | 59 | +50,667 | +44,690 | 0.61% | 40% | 12% | Victor Stinner (85%), Donghee Na (8%), Pieter Eendebak (2%) | C/H 58%, Py 36%, rST 5% |
| Emscripten / WASM | 95 | +73,938 | +36,381 | 0.50% | 58% | 51% | Brett Cannon (44%), Hood Chatham (42%), Savannah Ostrowski (5%) | Py 60%, JSON 13%, Other 11% |
| Subinterpreters | 46 | +83,192 | +33,283 | 0.46% | 22% | 60% | Eric Snow (61%), Adam Turner (18%), Peter Bierma (8%) | C/H 75%, Py 22%, rST 3% |
| PEP 829: Package Startup Config | 2 | +32,069 | +32,069 | 0.44% | 63% | 0% | Barry Warsaw (100%) | Py 80%, rST 20% |
| PEP 686: UTF-8 Default | 21 | +24,474 | +24,474 | 0.34% | 69% | 0% | Serhiy Storchaka (56%), Mike Edmunds (14%), Adam Turner (13%), Victor Stinner (12%) | Py 59%, C/H 27%, rST 14% |
| PEP 782: PyBytesWriter | 56 | +13,975 | +14,423 | 0.20% | 60% | -3% | Victor Stinner (92%), Emma Smith (5%), Maurycy Pawłowski-Wieroński (2%) | C/H 90%, rST 7%, Py 3% |
| PEP 661: Sentinel | 9 | +14,082 | +13,273 | 0.18% | 36% | 6% | Jelle Zijlstra (84%), W. H. Wang (11%), Victor Stinner (3%) | Py 37%, C/H 35%, rST 22% |
| PEP 798: Unpacking in Comprehensions | 2 | +32,237 | +10,584 | 0.15% | 9% | 67% | Adam J Hartz (95%) | C/H 94% |
| PEP 728: TypedDict Extra Items | 9 | +8,207 | +8,207 | 0.11% | 50% | 0% | Jelle Zijlstra (41%), Angela Liss (35%), Bénédikt Tran (15%), Nikita Sobolev (6%) | Py 68%, rST 32% |
| Tail-calling Interpreter | 21 | -3,012 | +4,849 | 0.07% | 0% | — | Chris Eibl (45%), Ken Jin (18%), Savannah Ostrowski (15%), Victor Stinner (13%) | C/H 78%, YAML 11%, rST 4% |
| PEP 747: TypeForm | 1 | +3,853 | +3,853 | 0.05% | 42% | 0% | Jelle Zijlstra (100%) | Py 66%, rST 34% |
| PEP 800: Disjoint Bases | 1 | +2,111 | +2,111 | 0.03% | 11% | 0% | Jelle Zijlstra (100%) | rST 66%, Py 34% |
- Net Chars: Total non-whitespace characters added minus removed
- Hand Net Chars: Same, excluding generated/vendored files
- % of Net: Share of +7,269,378 total hand-written non-whitespace chars
- Test %: Percentage of net chars that is test code
- Gen %: Percentage of net chars from generated or vendored files
- Top Contributors by Chars (top 3 + ≥5%): Always shows top 3 contributors by hand-written non-whitespace chars touched, plus 4th/5th if they have ≥5%
- Languages: Top 3 languages by chars touched, ≥3% threshold
Each of the 4,419 commits was individually classified using a rule-based system combining:
- GitHub issue number mapping (known tracking issues per feature)
- Keyword pattern matching on commit messages
- Validated through random spot-checking (3 consecutive rounds of 15 random samples with 0 misclassification errors)
Changes are measured in non-whitespace characters rather than lines, giving a more accurate picture of actual work done — a single line of minified JS or a deeply indented Python block doesn't distort the numbers. Generated/vendored detection uses .gitattributes markers plus known vendored paths (_vendor/, Modules/expat, Modules/_hacl, ensurepip/_bundled/, *.min.js).
Categories overlap (a commit can belong to multiple features). ~1,800 commits (41%) were classified as "Other" — genuine one-off stdlib fixes, test maintenance, and patches that don't belong to any tracked theme.
| Release | Commits | Added | Deleted | Net | Files | Net/Commit |
|---|---|---|---|---|---|---|
| 3.9 → 3.10 | 3,240 | +226,951 | -119,707 | +107,244 | 2,029 | 33 |
| 3.10 → 3.11 | 4,382 | +258,887 | -172,864 | +86,023 | 2,423 | 20 |
| 3.11 → 3.12 | 4,591 | +383,391 | -222,585 | +160,806 | 2,569 | 35 |
| 3.12 → 3.13 | 6,067 | +402,990 | -269,326 | +133,664 | 3,179 | 22 |
| 3.13 → 3.14 | 5,783 | +406,548 | -190,762 | +215,786 | 2,690 | 37 |
| 3.14 → 3.15b1 | 4,419 | +398,030 | -148,962 | +249,068 | 2,525 | 56 |
Note: Historical table uses line counts (the standard git metric) for comparability with prior analyses.
3.15 already has the largest net change of any release in this window, and it's still only at beta 1. At +249k net lines it's 2.3x the size of 3.11 and 1.15x the previous largest (3.14). The 56 net lines per commit is nearly double the historical average (~30), meaning commits are carrying more substance.
Generated 2026-05-17 by individually classifying all 4,419 commits in the python/cpython git history between v3.14.0 and v3.15.0b1. Non-whitespace character counting via git diff -U0.