Code Ownership
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 Tracked
- 7,300
- in the current tree
- Bus Factor
- 3
- 3 authors are primary owner of 4,250 of 7,300 files
- Single-Owner Files
- 2,634
- 36.1% of tracked files
- Contributors
- 810
- authors who changed files
Bus factor risk — single-owner 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 |
|---|---|---|
| compiler/scripts/release/publish.js | lauren | 15 |
| packages/react-devtools-facade/src/__tests__/DevToolsFacade-test.js | Ruslan Lesiutin | 11 |
| packages/react-server/src/ReactFlightAsyncSequence.js | Sebastian Markbåge | 9 |
| packages/react-devtools-facade/src/DevToolsFacadeTreeTools.js | Ruslan Lesiutin | 8 |
| packages/react-devtools-cdt-mcp/package.json | Ruslan Lesiutin | 8 |
| fixtures/dom/src/components/fixtures/fragment-refs/index.js | Jack Pope | 8 |
| compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/error.todo-repro-missed-memoization-from-inferred-mutation-in-logger.expect.md | Joseph Savona | 8 |
| fixtures/view-transition/src/components/SwipeRecognizer.js | Sebastian Markbåge | 8 |
| packages/react-devtools-cdt-mcp/src/__tests__/DevToolsCdtMcp-test.js | Ruslan Lesiutin | 7 |
| packages/react-devtools-facade/src/DevToolsFacadeTools.js | Ruslan Lesiutin | 7 |
Table: the 100 most-changed of 2,634 single-owner files
| File | Sole owner | Commits |
|---|---|---|
| compiler/scripts/release/publish.js | lauren | 15 |
| packages/react-devtools-facade/src/__tests__/DevToolsFacade-test.js | Ruslan Lesiutin | 11 |
| packages/react-server/src/ReactFlightAsyncSequence.js | Sebastian Markbåge | 9 |
| packages/react-devtools-facade/src/DevToolsFacadeTreeTools.js | Ruslan Lesiutin | 8 |
| packages/react-devtools-cdt-mcp/package.json | Ruslan Lesiutin | 8 |
| fixtures/dom/src/components/fixtures/fragment-refs/index.js | Jack Pope | 8 |
| compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/error.todo-repro-missed-memoization-from-inferred-mutation-in-logger.expect.md | Joseph Savona | 8 |
| fixtures/view-transition/src/components/SwipeRecognizer.js | Sebastian Markbåge | 8 |
| packages/react-devtools-cdt-mcp/src/__tests__/DevToolsCdtMcp-test.js | Ruslan Lesiutin | 7 |
| packages/react-devtools-facade/src/DevToolsFacadeTools.js | Ruslan Lesiutin | 7 |
| .github/workflows/shared_check_maintainer.yml | lauren | 7 |
| compiler/packages/snap/src/sprout/shared-runtime-type-provider.ts | Joseph Savona | 7 |
| compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/preserve-memo-validation/error.useCallback-aliased-var.expect.md | Joseph Savona | 7 |
| compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/preserve-memo-validation/error.useMemo-aliased-var.expect.md | Joseph Savona | 7 |
| compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/error.todo-repro-missed-memoization-from-capture-in-invoked-function-inferred-as-mutation.expect.md | Joseph Savona | 7 |
| compiler/apps/playground/components/AccordionWindow.tsx | Eugene Choi | 7 |
| packages/react-dom/src/__tests__/ReactDOMFizzSuspenseList-test.js | Sebastian Markbåge | 7 |
| packages/react-devtools-extensions/firefox/build.js | Brian Vaughn | 7 |
| packages/react-devtools-extensions/chrome/build.js | Brian Vaughn | 7 |
| compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/error.invalid-ReactUseMemo-async-callback.expect.md | Joseph Savona | 6 |
| compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/error.invalid-useMemo-async-callback.expect.md | Joseph Savona | 6 |
| compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/new-mutability/error.invalid-reassign-local-variable-in-jsx-callback.expect.md | Joseph Savona | 6 |
| compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/new-mutability/error.invalid-referencing-frozen-hoisted-storecontext-const.expect.md | Joseph Savona | 6 |
| compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/error.invalid-uncalled-function-capturing-mutable-values-memoizes-with-captures-values.expect.md | Joseph Savona | 6 |
| compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/new-mutability/error.invalid-useCallback-captures-reassigned-context.expect.md | Joseph Savona | 6 |
| compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/error.invalid-optional-member-expression-as-memo-dep-non-optional-in-body.expect.md | Joseph Savona | 6 |
| compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/error.invalid-hoisting-setstate.expect.md | Joseph Savona | 6 |
| .github/ISSUE_TEMPLATE/devtools_bug_report.yml | Brian Vaughn | 6 |
| packages/react-devtools-shared/src/devtools/views/Profiler/SidebarCommitInfo.css | Brian Vaughn | 6 |
| packages/react-devtools-cdt-mcp/README.md | Ruslan Lesiutin | 5 |
| packages/react-devtools-cdt-mcp/src/DevToolsCdtMcp.js | Ruslan Lesiutin | 5 |
| packages/react-devtools-shared/src/devtools/views/SuspenseTab/SuspenseBreadcrumbs.css | Sebastian "Sebbie" Silbermann | 5 |
| .github/workflows/shared_close_direct_sync_branch_prs.yml | lauren | 5 |
| .github/workflows/shared_stale.yml | lauren | 5 |
| .github/workflows/runtime_fuzz_tests.yml | lauren | 5 |
| compiler/packages/snap/src/minimize.ts | Joseph Savona | 5 |
| compiler/packages/eslint-plugin-react-compiler/__tests__/PluginTest-test.ts | Joseph Savona | 5 |
| compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/new-mutability/todo-control-flow-sensitive-mutation.expect.md | Joseph Savona | 5 |
| compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/new-mutability/transitivity-add-captured-array-to-itself.expect.md | Joseph Savona | 5 |
| compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/new-mutability/transitivity-capture-createfrom-lambda.expect.md | Joseph Savona | 5 |
| compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/new-mutability/transitivity-capture-createfrom.expect.md | Joseph Savona | 5 |
| compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/new-mutability/transitivity-phi-assign-or-capture.expect.md | Joseph Savona | 5 |
| compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/new-mutability/useCallback-reordering-depslist-assignment.expect.md | Joseph Savona | 5 |
| compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/new-mutability/useMemo-reordering-depslist-assignment.expect.md | Joseph Savona | 5 |
| compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/error.invalid-mutate-context-in-callback.expect.md | Joseph Savona | 5 |
| compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/error.invalid-hook-function-argument-mutates-local-variable.expect.md | Joseph Savona | 5 |
| compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/error.invalid-pass-mutable-function-as-prop.expect.md | Joseph Savona | 5 |
| compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/error.invalid-return-mutable-function-from-hook.expect.md | Joseph Savona | 5 |
| compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/error.mutate-hook-argument.expect.md | Joseph Savona | 5 |
| compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/new-mutability/error.mutate-frozen-value.expect.md | Joseph Savona | 5 |
| compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/new-mutability/error.mutate-hook-argument.expect.md | Joseph Savona | 5 |
| compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/new-mutability/error.not-useEffect-external-mutate.expect.md | Joseph Savona | 5 |
| packages/react-devtools-shared/src/devtools/views/SuspenseTab/SuspenseScrubber.css | Sebastian Markbåge | 5 |
| fixtures/ssr/src/components/LargeContent.js | Sebastian Markbåge | 5 |
| packages/react/src/ReactTransitionType.js | Sebastian Markbåge | 5 |
| packages/react-devtools-shared/src/devtools/views/TabBar.css | Brian Vaughn | 5 |
| packages/react-devtools-shared/src/devtools/views/Profiler/SnapshotCommitListItem.css | Brian Vaughn | 5 |
| packages/react-devtools-extensions/chrome/deploy.js | Brian Vaughn | 5 |
| packages/react-devtools-extensions/firefox/deploy.js | Brian Vaughn | 5 |
| packages/react-devtools-cdt-mcp/e2e/run.flow.js | Ruslan Lesiutin | 4 |
| packages/react-devtools-facade/src/DevToolsFacade.js | Ruslan Lesiutin | 4 |
| packages/react-devtools-cdt-mcp/src/index.js | Ruslan Lesiutin | 4 |
| packages/react-devtools-extensions/src/background/tabsManager.js | Ruslan Lesiutin | 4 |
| packages/react-dom/src/__tests__/utils/IntersectionMocks.js | Jack Pope | 4 |
| fixtures/dom/src/components/fixtures/fragment-refs/FocusCase.js | Jack Pope | 4 |
| compiler/packages/react-forgive/server/src/compiler/index.ts | lauren | 4 |
| compiler/scripts/release/shared/packages.js | lauren | 4 |
| compiler/scripts/release/shared/build-packages.js | lauren | 4 |
| fixtures/ssr2/package-lock.json | dan | 4 |
| compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/exhaustive-deps/error.invalid-exhaustive-deps.expect.md | Joseph Savona | 4 |
| compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/exhaustive-deps/error.invalid-missing-nonreactive-dep-unmemoized.expect.md | Joseph Savona | 4 |
| compiler/packages/babel-plugin-react-compiler/docs/passes/README.md | Joseph Savona | 4 |
| compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/error.useMemo-callback-generator.expect.md | Joseph Savona | 4 |
| compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/rules-of-hooks/error.invalid-hook-for.expect.md | Joseph Savona | 4 |
| compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/error.todo-repro-missed-memoization-from-inferred-mutation-in-logger.js | Joseph Savona | 4 |
| compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/new-mutability/mutate-through-identity-function-expression.expect.md | Joseph Savona | 4 |
| compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/new-mutability/mutate-through-identity.expect.md | Joseph Savona | 4 |
| compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/new-mutability/todo-control-flow-sensitive-mutation.tsx | Joseph Savona | 4 |
| compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/new-mutability/transitivity-add-captured-array-to-itself.tsx | Joseph Savona | 4 |
| compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/new-mutability/transitivity-capture-createfrom-lambda.tsx | Joseph Savona | 4 |
| compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/new-mutability/transitivity-capture-createfrom.tsx | Joseph Savona | 4 |
| compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/new-mutability/transitivity-phi-assign-or-capture.tsx | Joseph Savona | 4 |
| compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/new-mutability/useCallback-reordering-deplist-controlflow.tsx | Joseph Savona | 4 |
| compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/new-mutability/useCallback-reordering-depslist-assignment.tsx | Joseph Savona | 4 |
| compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/new-mutability/useMemo-reordering-depslist-assignment.ts | Joseph Savona | 4 |
| compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/new-mutability/todo-transitivity-createfrom-capture-lambda.expect.md | Joseph Savona | 4 |
| compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/error.invalid-array-push-frozen.expect.md | Joseph Savona | 4 |
| compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/error.invalid-computed-store-to-frozen-value.expect.md | Joseph Savona | 4 |
| compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/error.invalid-delete-computed-property-of-frozen-value.expect.md | Joseph Savona | 4 |
| compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/error.invalid-delete-property-of-frozen-value.expect.md | Joseph Savona | 4 |
| compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/error.invalid-jsx-captures-context-variable.expect.md | Joseph Savona | 4 |
| compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/error.invalid-mutate-after-aliased-freeze.expect.md | Joseph Savona | 4 |
| compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/error.invalid-mutate-after-freeze.expect.md | Joseph Savona | 4 |
| compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/error.invalid-mutate-context.expect.md | Joseph Savona | 4 |
| compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/error.invalid-mutate-props-via-for-of-iterator.expect.md | Joseph Savona | 4 |
| compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/error.invalid-mutation-of-possible-props-phi-indirect.expect.md | Joseph Savona | 4 |
| compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/error.invalid-prop-mutation-indirect.expect.md | Joseph Savona | 4 |
| compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/error.invalid-property-store-to-frozen-value.expect.md | Joseph Savona | 4 |
| compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/error.invalid-props-mutation-in-effect-indirect.expect.md | Joseph Savona | 4 |
| compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/error.mutate-property-from-global.expect.md | Joseph Savona | 4 |
Ownership by author
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 |
|---|---|---|---|
| Joseph Savona | 2,961 | 1,128 | 3,572 |
| Sebastian Markbåge | 669 | 140 | 1,455 |
| Brian Vaughn | 620 | 185 | 1,037 |
| mofeiZ | 393 | 206 | 759 |
| dan | 323 | 58 | 705 |
| lauren | 300 | 118 | 639 |
| Andrew Clark | 254 | 43 | 1,386 |
| Sebastian "Sebbie" Silbermann | 194 | 85 | 893 |
| Nathan | 158 | 7 | 385 |
| Mofei Zhang | 152 | 91 | 279 |
| Josh Story | 136 | 46 | 529 |
| Jan Kassens | 134 | 19 | 2,759 |
| Michael Vitousek | 117 | 47 | 289 |
| Ruslan Lesiutin | 111 | 61 | 384 |
| Rick Hanlon | 69 | 13 | 569 |
| Dominic Gannaway | 48 | 30 | 240 |
| Jorge Cabiedes | 43 | 30 | 104 |
| Hendrik Liebau | 41 | 34 | 142 |
| Jack Pope | 36 | 29 | 251 |
| Devon Govett | 33 | 30 | 78 |
| michael faith | 33 | 13 | 62 |
| Nathan Hunzaker | 32 | 9 | 74 |
| magic-akari | 30 | 18 | 51 |
| Pieter De Baets | 23 | 10 | 88 |
| Sathya Gunasekaran | 21 | 14 | 60 |
Most shared files
Files touched by the most people — shared code where changes are most likely to need coordination.
| File | Contributors | Primary owner | Owner share |
|---|---|---|---|
| package.json | 108 | Brian Vaughn | 16.6% |
| yarn.lock | 68 | Brian Vaughn | 23.7% |
| README.md | 64 | Paul O’Shannessy | 30.4% |
| CHANGELOG.md | 46 | dan | 39.7% |
| packages/shared/ReactFeatureFlags.js | 45 | Andrew Clark | 15.9% |
| packages/shared/forks/ReactFeatureFlags.www.js | 44 | Andrew Clark | 15.5% |
| scripts/rollup/bundles.js | 44 | Sebastian Markbåge | 23.9% |
| packages/shared/forks/ReactFeatureFlags.native-fb.js | 43 | Rick Hanlon | 14.3% |
| packages/shared/forks/ReactFeatureFlags.test-renderer.js | 42 | Andrew Clark | 15.8% |
| packages/shared/forks/ReactFeatureFlags.native-oss.js | 42 | Andrew Clark | 15.3% |
| packages/shared/forks/ReactFeatureFlags.test-renderer.www.js | 41 | Andrew Clark | 15.3% |
| scripts/rollup/build.js | 41 | dan | 24.2% |
| packages/eslint-plugin-react-hooks/__tests__/ESLintRuleExhaustiveDeps-test.js | 39 | dan | 34.6% |
| packages/react-reconciler/src/ReactFiberBeginWork.js | 38 | Sebastian Markbåge | 26.7% |
| .eslintrc.js | 38 | Sebastian Markbåge | 22.0% |
| packages/react-reconciler/src/ReactFiberHooks.js | 37 | Andrew Clark | 30.8% |
| packages/react-reconciler/src/ReactFiberCommitWork.js | 32 | Sebastian Markbåge | 28.9% |
| packages/react-dom/src/__tests__/ReactDOMComponent-test.js | 31 | dan | 22.0% |
| packages/react-dom/src/__tests__/ReactDOMInput-test.js | 31 | dan | 18.1% |
| packages/react-dom/src/test-utils/ReactTestUtils.js | 30 | dan | 20.8% |
How React compares with other open source web frontend projects →
How React ranks among open source web frontend projects by AI-assisted commits →
Generate this report for your own repository with gitstats-action · All Gallery reports
The smallest workflow
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