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
- 544
- in the current tree
- Bus Factor
- 1
- Igor Sysoev is primary owner of 321 of 544 files
- Single-Owner Files
- 56
- 10.3% of tracked files
- Contributors
- 142
- 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 |
|---|---|---|
| .github/workflows/check-whitespace.yaml | Andrew Clayton | 5 |
| src/event/quic/ngx_event_quic_socket.h | Vladimir Homutov | 5 |
| docs/xml/change_log_conf.xml | Igor Sysoev | 4 |
| conf/koi-win | Igor Sysoev | 4 |
| src/http/v3/ngx_http_v3_table.h | Roman Arutyunyan | 3 |
| src/http/v3/ngx_http_v3_uni.h | Roman Arutyunyan | 3 |
| src/stream/ngx_stream_pass_module.c | Roman Arutyunyan | 3 |
| src/os/win32/nginx.ico | Igor Sysoev | 3 |
| src/event/modules/ngx_win32_poll_module.c | Maxim Dounin | 2 |
| src/core/ngx_sha1.c | Maxim Dounin | 2 |
Table: all 56 single-owner files
| File | Sole owner | Commits |
|---|---|---|
| .github/workflows/check-whitespace.yaml | Andrew Clayton | 5 |
| src/event/quic/ngx_event_quic_socket.h | Vladimir Homutov | 5 |
| docs/xml/change_log_conf.xml | Igor Sysoev | 4 |
| conf/koi-win | Igor Sysoev | 4 |
| src/http/v3/ngx_http_v3_table.h | Roman Arutyunyan | 3 |
| src/http/v3/ngx_http_v3_uni.h | Roman Arutyunyan | 3 |
| src/stream/ngx_stream_pass_module.c | Roman Arutyunyan | 3 |
| src/os/win32/nginx.ico | Igor Sysoev | 3 |
| src/event/modules/ngx_win32_poll_module.c | Maxim Dounin | 2 |
| src/core/ngx_sha1.c | Maxim Dounin | 2 |
| .github/workflows/check-commit-message.yaml | Andrew Clayton | 2 |
| .github/workflows/check-version-bump.yaml | Andrew Clayton | 2 |
| src/http/modules/ngx_http_mirror_module.c | Roman Arutyunyan | 2 |
| src/core/ngx_rwlock.h | Ruslan Ermilov | 2 |
| src/os/win32/nginx_icon16.xpm | Igor Sysoev | 2 |
| conf/koi-utf | Igor Sysoev | 2 |
| src/mail/ngx_mail_realip_module.c | Maxim Dounin | 1 |
| src/os/unix/ngx_dlopen.c | Maxim Dounin | 1 |
| src/os/unix/ngx_dlopen.h | Maxim Dounin | 1 |
| src/os/win32/ngx_dlopen.c | Maxim Dounin | 1 |
| src/os/win32/ngx_dlopen.h | Maxim Dounin | 1 |
| src/core/ngx_parse_time.h | Maxim Dounin | 1 |
| src/http/ngx_http_priority.h | Andrew Clayton | 1 |
| .github/scripts/commit-msg-check.pl | Andrew Clayton | 1 |
| .github/workflows/new-issue-welcome.yaml | Andrew Clayton | 1 |
| src/os/unix/ngx_udp_send.c | Roman Arutyunyan | 1 |
| .github/workflows/windows-zip.yml | Sai Krishna Kumar Reddy YADAMAKANTI | 1 |
| src/event/quic/ngx_event_quic_bpf.h | Sai Krishna Kumar Reddy YADAMAKANTI | 1 |
| src/core/ngx_siphash.c | Eugene Grebenschikov | 1 |
| src/core/ngx_siphash.h | Eugene Grebenschikov | 1 |
| src/core/ngx_data.c | Henry Yuan | 1 |
| src/core/ngx_data.h | Henry Yuan | 1 |
| src/core/ngx_json.h | Henry Yuan | 1 |
| src/stream/ngx_stream_set_module.c | Pavel Pautov | 1 |
| src/event/quic/bpf/bpfgen.sh | Vladimir Homutov | 1 |
| src/core/ngx_bpf.h | Vladimir Homutov | 1 |
| .github/DISCUSSION_TEMPLATE/general.yml | Alessandro Fael Garcia | 1 |
| .github/DISCUSSION_TEMPLATE/ideas.yml | Alessandro Fael Garcia | 1 |
| .github/DISCUSSION_TEMPLATE/q-a.yml | Alessandro Fael Garcia | 1 |
| .github/ISSUE_TEMPLATE/config.yml | Alessandro Fael Garcia | 1 |
| .github/ISSUE_TEMPLATE/feature_request.yml | Alessandro Fael Garcia | 1 |
| SUPPORT.md | Alessandro Fael Garcia | 1 |
| .gitignore | Orgad Shaneh | 1 |
| CODE_OF_CONDUCT.md | Maryna Herasimovich | 1 |
| src/core/ngx_thread_pool.h | Valentin Bartenev | 1 |
| src/os/unix/ngx_thread_id.c | Valentin Bartenev | 1 |
| src/os/win32/nginx_icon48.xpm | Igor Sysoev | 1 |
| src/os/win32/nginx_icon32.xpm | Igor Sysoev | 1 |
| contrib/unicode2nginx/koi-utf | Igor Sysoev | 1 |
| contrib/unicode2nginx/win-utf | Igor Sysoev | 1 |
| src/http/modules/perl/typemap | Igor Sysoev | 1 |
| contrib/geo2nginx.pl | Igor Sysoev | 1 |
| docs/dtd/change_log_conf.dtd | Igor Sysoev | 1 |
| contrib/vim/ftplugin/nginx.vim | Armin Grodon | 1 |
| contrib/vim/ftdetect/nginx.vim | Evan Miller | 1 |
| contrib/vim/indent/nginx.vim | Evan Miller | 1 |
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 |
|---|---|---|---|
| Igor Sysoev | 321 | 12 | 360 |
| Vladimir Homutov | 41 | 3 | 153 |
| Maxim Dounin | 38 | 8 | 318 |
| Roman Arutyunyan | 37 | 5 | 193 |
| Ruslan Ermilov | 20 | 1 | 268 |
| Sergey Kandaurov | 18 | 0 | 232 |
| Valentin Bartenev | 13 | 2 | 166 |
| Maxim Konovalov | 8 | 0 | 330 |
| Andrew Clayton | 7 | 6 | 46 |
| Alessandro Fael Garcia | 7 | 6 | 11 |
| Roman Semenov | 4 | 0 | 12 |
| Henry Yuan | 4 | 3 | 7 |
| Sai Krishna Kumar Reddy YADAMAKANTI | 2 | 2 | 18 |
| Eugene Grebenschikov | 2 | 2 | 10 |
| Konstantin Pavlov | 2 | 0 | 7 |
| Maryna Herasimovich | 2 | 1 | 4 |
| Evan Miller | 2 | 2 | 3 |
| Piotr Sikora | 1 | 0 | 79 |
| Vadim Zhestikov | 1 | 0 | 60 |
| Ava Hahn | 1 | 0 | 9 |
| Zhidao HONG | 1 | 0 | 9 |
| Pavel Pautov | 1 | 1 | 8 |
| Orgad Shaneh | 1 | 1 | 6 |
| Evgeny Shirykalov | 1 | 0 | 5 |
| Gena Makhomed | 1 | 0 | 3 |
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 |
|---|---|---|---|
| src/http/ngx_http_upstream.c | 27 | Igor Sysoev | 43.2% |
| src/event/ngx_event_openssl.c | 24 | Maxim Dounin | 33.4% |
| src/http/modules/ngx_http_proxy_module.c | 22 | Igor Sysoev | 47.4% |
| src/http/modules/ngx_http_ssl_module.c | 18 | Igor Sysoev | 35.6% |
| src/http/modules/ngx_http_uwsgi_module.c | 18 | Maxim Dounin | 34.0% |
| src/http/ngx_http_core_module.c | 17 | Igor Sysoev | 70.9% |
| src/http/modules/ngx_http_fastcgi_module.c | 16 | Igor Sysoev | 58.8% |
| auto/options | 16 | Igor Sysoev | 60.6% |
| auto/modules | 15 | Igor Sysoev | 46.0% |
| src/core/ngx_resolver.c | 15 | Igor Sysoev | 33.3% |
| src/event/ngx_event_openssl.h | 15 | Igor Sysoev | 30.0% |
| src/http/ngx_http_upstream.h | 15 | Igor Sysoev | 42.7% |
| src/http/ngx_http_request.c | 14 | Igor Sysoev | 58.9% |
| src/http/ngx_http.c | 14 | Igor Sysoev | 75.4% |
| src/os/unix/ngx_process_cycle.c | 14 | Igor Sysoev | 67.9% |
| src/core/ngx_connection.c | 14 | Igor Sysoev | 52.9% |
| src/http/ngx_http_variables.c | 14 | Igor Sysoev | 59.2% |
| src/http/modules/ngx_http_ssi_filter_module.c | 14 | Igor Sysoev | 73.3% |
| src/http/modules/ngx_http_scgi_module.c | 14 | Maxim Dounin | 38.9% |
| src/http/modules/ngx_http_grpc_module.c | 14 | Maxim Dounin | 40.0% |
How nginx compares with other open source languages and developer tools →
How nginx ranks among open source languages and developer tools 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