Ownership is measured by how many commits each author made to each file in the current tree. It highlights bus-factor risk (files only one person has ever touched) and where knowledge is concentrated. The bus factor is the smallest number of people who are, between them, primary owner of more than half of the files.
Files only one author has ever changed. The more a file has changed, the more knowledge is at risk if that person leaves.
| File | Sole owner | Commits |
|---|---|---|
| packages/next/src/lib/upgrade/nudge.ts | Jiwon Choi | 19 |
| test/unit/security-upgrade-nudge.test.ts | Jiwon Choi | 19 |
| packages/next/src/lib/upgrade/prepare-upgrade.ts | Jiwon Choi | 16 |
| packages/next/src/client/components/segment-cache/vary-path.ts | Andrew Clark | 14 |
| apps/bundle-analyzer/components/analyzer.tsx | Will Binns-Smith | 13 |
| apps/bundle-analyzer/components/route-typeahead.tsx | Will Binns-Smith | 12 |
| packages/next/src/client/components/segment-cache/decode-server-response.ts | Andrew Clark | 11 |
| test/unit/prepare-latest-upgrade.test.ts | Jiwon Choi | 11 |
| packages/next/src/client/dev/debug-channel.ts | Hendrik Liebau | 9 |
| turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/export-named/output.md | Donny/강동윤 | 9 |
| File | Sole owner | Commits |
|---|---|---|
| packages/next/src/lib/upgrade/nudge.ts | Jiwon Choi | 19 |
| test/unit/security-upgrade-nudge.test.ts | Jiwon Choi | 19 |
| packages/next/src/lib/upgrade/prepare-upgrade.ts | Jiwon Choi | 16 |
| packages/next/src/client/components/segment-cache/vary-path.ts | Andrew Clark | 14 |
| apps/bundle-analyzer/components/analyzer.tsx | Will Binns-Smith | 13 |
| apps/bundle-analyzer/components/route-typeahead.tsx | Will Binns-Smith | 12 |
| packages/next/src/client/components/segment-cache/decode-server-response.ts | Andrew Clark | 11 |
| test/unit/prepare-latest-upgrade.test.ts | Jiwon Choi | 11 |
| packages/next/src/client/dev/debug-channel.ts | Hendrik Liebau | 9 |
| turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/export-named/output.md | Donny/강동윤 | 9 |
| turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/3/output.md | Donny/강동윤 | 9 |
| test/e2e/app-dir/bfcache-regression/bfcache-regression.test.ts | Hendrik Liebau | 8 |
| apps/bundle-analyzer/components/compare-layout.tsx | Will Binns-Smith | 8 |
| apps/bundle-analyzer/components/top-bar.tsx | Will Binns-Smith | 8 |
| apps/bundle-analyzer/components/sidebar.tsx | Will Binns-Smith | 8 |
| scripts/upload-preview-tarballs.js | Sebastian "Sebbie" Silbermann | 7 |
| packages/next/src/server/app-render/segment-explorer-path.ts | Jiachi Liu | 7 |
| apps/bundle-analyzer/components/diff-table.tsx | Will Binns-Smith | 7 |
| evals/eval.config.json | Aurora Scharff | 7 |
| packages/next/src/client/components/app-router-state.ts | Andrew Clark | 7 |
| test/production/adapter-config/my-adapter.mjs | JJ Kasper | 7 |
| test/e2e/app-dir/app-static/app/api/revalidate-tag-node/route.ts | JJ Kasper | 7 |
| test/e2e/app-dir/app-static/app/api/revalidate-path-node/route.ts | JJ Kasper | 7 |
| turbopack/crates/turbopack-trace-size/src/lib.rs | Tobias Koppers | 6 |
| turbopack/crates/turbo-tasks-backend/tests/gc_resurrection.rs | Luke Sandberg | 6 |
| turbopack/crates/turbo-tasks-backend/src/backend/cell_data.rs | Luke Sandberg | 6 |
| turbopack/crates/turbo-tasks-backend/src/backend/counter_map.rs | Luke Sandberg | 6 |
| packages/next/src/next-devtools/shared/stack-frame.ts | Sebastian "Sebbie" Silbermann | 6 |
| test/e2e/app-dir/server-source-maps/fixtures/default/app/rsc-error-log/page.js | Sebastian "Sebbie" Silbermann | 6 |
| test/production/app-dir/adapter-dynamic-routes/dynamic-routes-cache-components.test.ts | Hendrik Liebau | 6 |
| packages/next/src/build/analyze/graph-dump.ts | Will Binns-Smith | 6 |
| test/e2e/app-dir/segment-cache/vary-params/next.config.js | Andrew Clark | 6 |
| test/e2e/app-dir/app-static/app/api/revalidate-path-edge/route.ts | JJ Kasper | 6 |
| test/e2e/app-dir/app-static/app/api/revalidate-tag-edge/route.ts | JJ Kasper | 6 |
| docs/02-pages/04-api-reference/03-functions/get-static-paths.mdx | Delba de Oliveira | 6 |
| packages/next/src/shared/lib/router/utils/get-segment-param.tsx | Wyatt Johnson | 6 |
| turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/assign-before-decl-fn/output.md | Donny/강동윤 | 6 |
| turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/assign-before-decl-var/output.md | Donny/강동윤 | 6 |
| examples/cms-sanity/sanity.types.ts | Cody Olsen | 6 |
| test/e2e/next-font/app/pages/variables.js | Hannes Bornö | 6 |
| test/e2e/next-font/app/pages/with-fallback.js | Hannes Bornö | 6 |
| test/e2e/next-font/app/pages/with-google-fonts.js | Hannes Bornö | 6 |
| turbopack/crates/turbopack-trace-server/src/query_tests.rs | Tobias Koppers | 5 |
| turbopack/crates/turbopack-core/src/module_graph/style_groups_graph/algorithm.rs | Tobias Koppers | 5 |
| turbopack/crates/turbopack-core/src/module_graph/style_groups_graph/tests.rs | Tobias Koppers | 5 |
| turbopack/crates/turbo-tasks-backend/tests/gc_fixture.rs | Luke Sandberg | 5 |
| turbopack/crates/turbo-tasks-backend/tests/gc_stress.rs | Luke Sandberg | 5 |
| turbopack/crates/turbo-tasks-backend/tests/util.rs | Luke Sandberg | 5 |
| turbopack/crates/turbo-tasks-fs/src/path_map.rs | Benjamin Woodruff | 5 |
| test/e2e/app-dir/server-source-maps/fixtures/default/app/rsc-error-log-cause/page.js | Sebastian "Sebbie" Silbermann | 5 |
| test/e2e/app-dir/server-source-maps/fixtures/default/app/rsc-error-log-custom-name/page.js | Sebastian "Sebbie" Silbermann | 5 |
| test/e2e/app-dir/server-source-maps/fixtures/default/app/rsc-error-log-ignore-listed/page.js | Sebastian "Sebbie" Silbermann | 5 |
| crates/next-custom-transforms/tests/errors/server-actions/server-graph/14/output.stderr | Hendrik Liebau | 5 |
| crates/next-custom-transforms/tests/errors/server-actions/server-graph/23/output.js | Hendrik Liebau | 5 |
| test/e2e/app-dir/rsc-basic/app/shared/page.js | Jiachi Liu | 5 |
| packages/next/analyze/graph-v1.schema.json | Will Binns-Smith | 5 |
| apps/bundle-analyzer/lib/use-analyzer-route.ts | Will Binns-Smith | 5 |
| docs/01-app/02-guides/building.mdx | Aurora Scharff | 5 |
| packages/next/src/agent-feedback/protocol.md | Aurora Scharff | 5 |
| packages/next/src/cli/internal/agent-feedback-instructions.test.ts | Aurora Scharff | 5 |
| packages/next/src/shared/lib/segment-cache/vary-params-decoding.ts | Andrew Clark | 5 |
| test/e2e/app-dir/instant-validation/app/suspense-in-root/static/route-group-shared-boundary/(outer)/(inner)/page.tsx | Josh Story | 5 |
| packages/next/src/server/app-render/stream-ops.ts | Tim Neutkens | 5 |
| examples/image-component/styles.module.css | Steven | 5 |
| rspack/crates/binding/Cargo.toml | Cong-Cong Pan | 5 |
| rspack/crates/binding/package.json | Cong-Cong Pan | 5 |
| packages/next-routing/src/__tests__/resolve-routes.test.ts | JJ Kasper | 5 |
| packages/next-routing/src/resolve-routes.ts | JJ Kasper | 5 |
| test/e2e/app-dir/app-static/app/variable-revalidate/revalidate-360/page.js | JJ Kasper | 5 |
| docs/02-pages/04-api-reference/03-functions/get-static-props.mdx | Delba de Oliveira | 5 |
| turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/route-kind/output.md | Donny/강동윤 | 5 |
| examples/cms-sanity/app/(blog)/posts/[slug]/page.tsx | Cody Olsen | 5 |
| test/e2e/next-font/app/components/CompWithFonts.js | Hannes Bornö | 5 |
| test/e2e/app-dir/otel-middleware-trace/otel-middleware-trace.test.ts | Tobias Koppers | 4 |
| turbopack/crates/turbo-tasks-backend/tests/gc_cross_session.rs | Luke Sandberg | 4 |
| turbopack/scripts/analyze_cache_effectiveness.py | Luke Sandberg | 4 |
| test/e2e/app-dir/back-before-hydration/app/search/page.tsx | dan | 4 |
| test/e2e/app-dir/back-before-hydration/back-before-hydration.test.ts | dan | 4 |
| test/e2e/app-dir/turbopack-additional-roots/turbopack-additional-roots.test.ts | Benjamin Woodruff | 4 |
| test/development/app-dir/react-performance-track/instrumentation-client.ts | Sebastian "Sebbie" Silbermann | 4 |
| test/e2e/app-dir/server-source-maps/fixtures/default/app/ssr-error-log-ignore-listed/page.js | Sebastian "Sebbie" Silbermann | 4 |
| packages/next/src/server/node-environment-extensions/error-inspect.tsx | Sebastian "Sebbie" Silbermann | 4 |
| test/e2e/app-dir/server-source-maps/fixtures/default/app/layout.js | Sebastian "Sebbie" Silbermann | 4 |
| turbopack/crates/turbopack-tracing/tests/node-file-trace/test/unit/asset-fs-extra/output.js | Niklas Mischkulnig | 4 |
| .config/ast-grep/rules/no-map-async-cell.yml | Niklas Mischkulnig | 4 |
| test/production/app-dir/adapter-dynamic-routes/dynamic-routes-legacy.test.ts | Hendrik Liebau | 4 |
| test/production/app-dir/adapter-dynamic-routes/dynamic-routes-base-path.test.ts | Hendrik Liebau | 4 |
| test/e2e/app-dir/bfcache-regression/app/layout.tsx | Hendrik Liebau | 4 |
| test/production/app-dir/no-mangling/no-mangling.test.ts | Hendrik Liebau | 4 |
| crates/next-custom-transforms/tests/errors/server-actions/server-graph/15/output.stderr | Hendrik Liebau | 4 |
| test/e2e/app-dir/sitemap-group/sitemap-group.test.ts | Jiachi Liu | 4 |
| test/e2e/app-dir/metadata-icons/metadata-icons.test.ts | Jiachi Liu | 4 |
| test/development/app-dir/segment-explorer-globals/segment-explorer-globals.test.ts | Jiachi Liu | 4 |
| test/e2e/app-dir/metadata-streaming/metadata-streaming-customized-rule.test.ts | Jiachi Liu | 4 |
| test/e2e/app-dir/metadata-streaming-static-generation/app/layout.tsx | Jiachi Liu | 4 |
| packages/next-codemod/transforms/__testfixtures__/next-async-request-api-dynamic-apis/async-api-15.output.js | Jiachi Liu | 4 |
| packages/next-codemod/transforms/__testfixtures__/next-async-request-api-dynamic-apis/async-api-16.output.js | Jiachi Liu | 4 |
| packages/next-codemod/transforms/__testfixtures__/next-async-request-api-dynamic-apis/async-api-type-cast-02.output.js | Jiachi Liu | 4 |
| packages/next-codemod/transforms/__tests__/next-async-request-api-dynamic-props.test.js | Jiachi Liu | 4 |
| test/e2e/rsc-layers-transform/next.config.js | Jiachi Liu | 4 |
Primary owner = the author with the most commits to a file. Solely owned = files only that author has touched.
| Author | Files owned | Solely owned | Files touched |
|---|---|---|---|
| Tim Neutkens | 5,116 | 3,690 | 6,657 |
| Niklas Mischkulnig | 2,752 | 2,297 | 3,908 |
| Tobias Koppers | 2,606 | 1,751 | 3,572 |
| Jiachi Liu | 1,983 | 1,623 | 3,389 |
| Josh Story | 1,611 | 1,171 | 2,642 |
| Steven | 1,578 | 120 | 2,552 |
| Hendrik Liebau | 1,405 | 1,133 | 2,341 |
| Jiwon Choi | 1,199 | 987 | 1,975 |
| Zack Tanner | 1,170 | 734 | 2,023 |
| Sebastian "Sebbie" Silbermann | 1,126 | 577 | 2,496 |
| Wyatt Johnson | 1,024 | 654 | 1,595 |
| Luke Sandberg | 892 | 658 | 2,088 |
| Janka Uryga | 867 | 682 | 1,585 |
| JJ Kasper | 798 | 567 | 2,295 |
| hrmny | 677 | 471 | 1,112 |
| Sam Poder | 621 | 537 | 858 |
| Andrew Clark | 610 | 516 | 1,223 |
| Will Binns-Smith | 459 | 248 | 1,214 |
| Benjamin Woodruff | 449 | 233 | 1,475 |
| Delba de Oliveira | 407 | 258 | 658 |
| Shu Ding | 388 | 244 | 796 |
| dan | 380 | 350 | 464 |
| Jude Gao | 367 | 325 | 649 |
| Aurora Scharff | 362 | 284 | 654 |
| Donny/강동윤 | 246 | 137 | 856 |
Files touched by the most people — shared code where changes are most likely to need coordination.
| File | Contributors | Primary owner | Owner share |
|---|---|---|---|
| package.json | 178 | Tim Neutkens | 16.4% |
| packages/next/package.json | 143 | nextjs-bot | 39.2% |
| pnpm-lock.yaml | 110 | nextjs-bot | 56.1% |
| packages/next/README.md | 110 | Tim Neutkens | 11.3% |
| readme.md | 93 | Tim Neutkens | 23.7% |
| packages/next/src/server/config-shared.ts | 72 | JJ Kasper | 10.5% |
| packages/next/taskfile.js | 60 | JJ Kasper | 17.9% |
| packages/next/src/server/config.ts | 59 | Jiachi Liu | 9.8% |
| packages/next/src/build/index.ts | 57 | JJ Kasper | 15.8% |
| packages/next/src/server/config-schema.ts | 53 | JJ Kasper | 10.7% |
| packages/next/src/server/app-render/app-render.tsx | 49 | Josh Story | 14.3% |
| packages/next/src/server/base-server.ts | 47 | Wyatt Johnson | 20.2% |
| packages/next/src/build/webpack-config.ts | 47 | Jiachi Liu | 18.6% |
| packages/create-next-app/index.ts | 47 | JJ Kasper | 11.4% |
| packages/next/src/server/next-server.ts | 46 | JJ Kasper | 20.0% |
| packages/next/src/server/lib/start-server.ts | 44 | Tim Neutkens | 13.2% |
| packages/next/src/build/utils.ts | 42 | Wyatt Johnson | 17.6% |
| contributing.md | 41 | JJ Kasper | 14.7% |
| packages/create-next-app/create-app.ts | 39 | Balázs Orbán | 11.3% |
| examples/with-docker/Dockerfile | 39 | JJ Kasper | 6.2% |
How Next.js compares with other open source web frontend projects →
How Next.js ranks among open source web frontend projects by AI-assisted commits →
Generate this report for your own repository with gitstats-action · All Gallery reports
Publishes the report to GitHub Pages on every push to main: turn on Pages for the gh-pages branch.
# .github/workflows/gitstats.yml
name: GitStats Report
on:
push:
branches: [main]
permissions:
contents: write
jobs:
gitstats:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v7
with:
fetch-depth: 0
- uses: shenxianpeng/gitstats-action@v1
with:
deploy-to-pages: true