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 |
|---|---|---|
| tests/components/reolink/snapshots/test_diagnostics.ambr | starkillerOG | 31 |
| tests/components/teslemetry/snapshots/test_diagnostics.ambr | Brett Adams | 26 |
| tests/components/overkiz/fixtures/setup/cloud_somfy_tahoma_v2_europe.json | Mick Vleeshouwer | 23 |
| tests/components/comelit/const.py | Simone Chemelli | 19 |
| tests/components/husqvarna_automower/fixtures/mower.json | Thomas55555 | 19 |
| homeassistant/helpers/template/extensions/__init__.py | Franck Nijhof | 18 |
| tests/components/habitica/fixtures/user.json | Manu | 18 |
| tests/components/lamarzocco/snapshots/test_diagnostics.ambr | Josef Zweck | 17 |
| tests/components/teslemetry/fixtures/vehicle_data.json | Brett Adams | 16 |
| tests/components/melcloud_home/snapshots/test_diagnostics.ambr | Erwin Douna | 15 |
| File | Sole owner | Commits |
|---|---|---|
| tests/components/reolink/snapshots/test_diagnostics.ambr | starkillerOG | 31 |
| tests/components/teslemetry/snapshots/test_diagnostics.ambr | Brett Adams | 26 |
| tests/components/overkiz/fixtures/setup/cloud_somfy_tahoma_v2_europe.json | Mick Vleeshouwer | 23 |
| tests/components/comelit/const.py | Simone Chemelli | 19 |
| tests/components/husqvarna_automower/fixtures/mower.json | Thomas55555 | 19 |
| homeassistant/helpers/template/extensions/__init__.py | Franck Nijhof | 18 |
| tests/components/habitica/fixtures/user.json | Manu | 18 |
| tests/components/lamarzocco/snapshots/test_diagnostics.ambr | Josef Zweck | 17 |
| tests/components/teslemetry/fixtures/vehicle_data.json | Brett Adams | 16 |
| tests/components/melcloud_home/snapshots/test_diagnostics.ambr | Erwin Douna | 15 |
| homeassistant/components/hydrawise/const.py | David Knowles | 15 |
| tests/components/indevolt/fixtures/gen_2.json | A. Gideonse | 15 |
| tests/components/airos/snapshots/test_diagnostics.ambr | Tom | 14 |
| tests/components/habitica/fixtures/tasks.json | Manu | 13 |
| homeassistant/components/onedrive_for_business/strings.json | Josef Zweck | 13 |
| tests/components/victron_ble/fixtures.py | Raj Laud | 13 |
| homeassistant/components/russound_rio/const.py | Noah Husby | 13 |
| homeassistant/components/trmnl/quality_scale.yaml | Joost Lekkerkerker | 12 |
| homeassistant/components/portainer/const.py | Erwin Douna | 12 |
| homeassistant/components/homee/const.py | Markus Adrario | 12 |
| tests/components/myuplink/snapshots/test_diagnostics.ambr | Åke Strandberg | 12 |
| tests/components/heos/__init__.py | Andrew Sayre | 12 |
| tests/components/overkiz/fixtures/setup/local_somfy_tahoma_v2_europe.json | Mick Vleeshouwer | 11 |
| tests/components/habitica/snapshots/test_services.ambr | Manu | 11 |
| tests/components/duco/snapshots/test_diagnostics.ambr | Ronald van der Meer | 11 |
| tests/components/withings/snapshots/test_diagnostics.ambr | Joost Lekkerkerker | 11 |
| tests/components/onedrive/const.py | Josef Zweck | 11 |
| tests/components/sofar/snapshots/test_diagnostics.ambr | darkrain-nl | 11 |
| homeassistant/components/sofar/quality_scale.yaml | darkrain-nl | 11 |
| homeassistant/components/collection_image/image.py | karwosts | 11 |
| tests/components/liebherr/snapshots/test_diagnostics.ambr | mettolen | 11 |
| tests/components/bring/snapshots/test_diagnostics.ambr | Manu | 10 |
| tests/components/habitica/snapshots/test_diagnostics.ambr | Manu | 10 |
| tests/components/teslemetry/test_switch.py | Brett Adams | 10 |
| tests/components/teslemetry/fixtures/vehicle_data_alt.json | Brett Adams | 10 |
| homeassistant/components/duco/const.py | Ronald van der Meer | 10 |
| homeassistant/components/mikrotik/sensor.py | Simone Chemelli | 10 |
| homeassistant/components/airgradient/quality_scale.yaml | Joost Lekkerkerker | 10 |
| tests/components/spotify/snapshots/test_diagnostics.ambr | Joost Lekkerkerker | 10 |
| homeassistant/components/imou/const.py | Imou-OpenPlatform | 10 |
| homeassistant/components/melcloud_home/icons.json | Erwin Douna | 10 |
| homeassistant/components/neopool/const.py | Miloš Svašek | 10 |
| tests/components/sofar/__init__.py | darkrain-nl | 10 |
| tests/components/doorbird/__init__.py | J. Nick Koston | 10 |
| homeassistant/components/lyngdorf/media_player.py | Alex Fishlock | 10 |
| tests/components/hue/const.py | Marcel van der Veldt | 10 |
| homeassistant/components/gatus/quality_scale.yaml | Hamish | 9 |
| homeassistant/components/fumis/manifest.json | Franck Nijhof | 9 |
| homeassistant/components/solaredge_modbus/manifest.json | Franck Nijhof | 9 |
| tests/components/plugwise/fixtures/m_adam_cooling/data.json | Bouwe Westerdijk | 9 |
| tests/components/plugwise/fixtures/m_adam_heating/data.json | Bouwe Westerdijk | 9 |
| homeassistant/components/airly/quality_scale.yaml | Maciej Bieniek | 9 |
| tests/components/sensibo/fixtures/data.json | G Johansson | 9 |
| tests/components/teslemetry/test_device_tracker.py | Brett Adams | 9 |
| homeassistant/components/bosch_shc/select.py | Thomas | 9 |
| homeassistant/components/hr_energy_qube/strings.json | Mattie | 9 |
| tests/components/smartthings/snapshots/test_diagnostics.ambr | Joost Lekkerkerker | 9 |
| tests/components/imou/const.py | Imou-OpenPlatform | 9 |
| homeassistant/components/my_pv/strings.json | rrooggiieerr | 9 |
| homeassistant/components/zonneplan/coordinator.py | Erwin Douna | 9 |
| homeassistant/components/zonneplan/icons.json | Erwin Douna | 9 |
| tests/components/melcloud_home/fixtures/context.json | Erwin Douna | 9 |
| homeassistant/components/besen/strings.json | Yoav Mor | 9 |
| tests/components/myuplink/fixtures/device_points_nibe_f730.json | Åke Strandberg | 9 |
| tests/components/airzone_cloud/test_binary_sensor.py | Álvaro Fernández Rojas | 9 |
| homeassistant/components/google_health/quality_scale.yaml | Allen Porter | 8 |
| homeassistant/components/power/conditions.yaml | Erik Montnemery | 8 |
| homeassistant/components/hydrawise/quality_scale.yaml | Franck Nijhof | 8 |
| homeassistant/components/fumis/icons.json | Franck Nijhof | 8 |
| homeassistant/components/knx/storage/entity_store_validation.py | Matthias Alphart | 8 |
| homeassistant/components/imgw_pib/icons.json | Maciej Bieniek | 8 |
| homeassistant/components/nobo_hub/const.py | Øyvind Matheson Wergeland | 8 |
| tests/components/yale_smart_alarm/snapshots/test_diagnostics.ambr | G Johansson | 8 |
| tests/components/teslemetry/test_number.py | Brett Adams | 8 |
| tests/components/media_player/test_llm.py | Paulus Schoutsen | 8 |
| script/check_requirements/render.py | Robert Resch | 8 |
| homeassistant/components/vicare/coordinator.py | Christian Lackas | 8 |
| homeassistant/components/overseerr/quality_scale.yaml | Joost Lekkerkerker | 8 |
| homeassistant/components/imou/icons.json | Imou-OpenPlatform | 8 |
| homeassistant/components/lamarzocco/const.py | Josef Zweck | 8 |
| homeassistant/components/neopool/icons.json | Miloš Svašek | 8 |
| homeassistant/components/sofar/icons.json | darkrain-nl | 8 |
| homeassistant/components/lyngdorf/quality_scale.yaml | Alex Fishlock | 8 |
| homeassistant/components/hdfury/icons.json | Glenn de Haan | 8 |
| homeassistant/components/kiosker/icons.json | Martin Claesson | 8 |
| tests/components/anthropic/snapshots/test_config_flow.ambr | Denis Shulyaka | 7 |
| homeassistant/components/indi_allsky/coordinator.py | Hamish | 7 |
| homeassistant/components/gatus/sensor.py | Hamish | 7 |
| homeassistant/components/cover/triggers.yaml | Erik Montnemery | 7 |
| homeassistant/components/illuminance/triggers.yaml | Erik Montnemery | 7 |
| homeassistant/components/power/triggers.yaml | Erik Montnemery | 7 |
| homeassistant/components/water_heater/conditions.yaml | Erik Montnemery | 7 |
| homeassistant/components/overkiz/quality_scale.yaml | Mick Vleeshouwer | 7 |
| homeassistant/components/solaredge_modbus/coordinator.py | Franck Nijhof | 7 |
| homeassistant/components/solaredge_modbus/icons.json | Franck Nijhof | 7 |
| homeassistant/components/scorpiontrack/quality_scale.yaml | Anthony | 7 |
| homeassistant/components/axle_energy/strings.json | Anthony | 7 |
| homeassistant/components/led_infrared/icons.json | Manu | 7 |
| tests/components/plugwise/fixtures/m_adam_multiple_devices_per_zone/data.json | Bouwe Westerdijk | 7 |
| tests/components/knx/fixtures/config_store_binarysensor.json | Matthias Alphart | 7 |
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 |
|---|---|---|---|
| epenet | 5,298 | 545 | 14,803 |
| Paulus Schoutsen | 2,167 | 549 | 11,481 |
| Franck Nijhof | 1,890 | 421 | 10,990 |
| Erik Montnemery | 1,397 | 257 | 9,681 |
| Joost Lekkerkerker | 1,150 | 460 | 7,402 |
| J. Nick Koston | 1,056 | 176 | 4,726 |
| Marc Mueller | 467 | 6 | 9,371 |
| Manu | 446 | 145 | 871 |
| G Johansson | 400 | 47 | 3,841 |
| Simone Chemelli | 367 | 71 | 1,078 |
| Robert Resch | 345 | 33 | 2,100 |
| Erwin Douna | 329 | 85 | 1,400 |
| Michael | 273 | 35 | 2,178 |
| Allen Porter | 235 | 63 | 705 |
| Maciej Bieniek | 229 | 41 | 498 |
| Robert Hillis | 224 | 45 | 1,504 |
| Raman Gupta | 223 | 42 | 582 |
| Brett Adams | 220 | 47 | 306 |
| tronikos | 183 | 58 | 327 |
| Aaron Bach | 178 | 35 | 352 |
| Josef Zweck | 177 | 33 | 1,121 |
| Jan Bouwhuis | 162 | 6 | 1,000 |
| Matthias Alphart | 156 | 39 | 317 |
| Åke Strandberg | 148 | 43 | 174 |
| Abílio Costa | 145 | 58 | 5,652 |
Files touched by the most people — shared code where changes are most likely to need coordination.
| File | Contributors | Primary owner | Owner share |
|---|---|---|---|
| requirements_all.txt | 1,951 | J. Nick Koston | 10.6% |
| CODEOWNERS | 854 | J. Nick Koston | 4.4% |
| homeassistant/generated/config_flows.py | 524 | J. Nick Koston | 4.9% |
| homeassistant/generated/integrations.json | 413 | Joost Lekkerkerker | 23.5% |
| mypy.ini | 255 | Marc Mueller | 13.3% |
| .strict-typing | 248 | Marc Mueller | 13.8% |
| script/gen_requirements_all.py | 158 | J. Nick Koston | 13.7% |
| homeassistant/const.py | 152 | Paulus Schoutsen | 47.0% |
| homeassistant/package_constraints.txt | 125 | J. Nick Koston | 32.2% |
| script/hassfest/quality_scale.py | 122 | Manu | 12.3% |
| homeassistant/generated/zeroconf.py | 114 | J. Nick Koston | 15.8% |
| homeassistant/generated/dhcp.py | 88 | J. Nick Koston | 41.9% |
| requirements.txt | 80 | J. Nick Koston | 36.0% |
| homeassistant/config_entries.py | 74 | J. Nick Koston | 24.1% |
| homeassistant/components/media_player/__init__.py | 74 | Paulus Schoutsen | 21.8% |
| pyproject.toml | 69 | Franck Nijhof | 33.6% |
| homeassistant/bootstrap.py | 65 | Paulus Schoutsen | 29.8% |
| homeassistant/helpers/config_validation.py | 65 | Paulus Schoutsen | 17.4% |
| homeassistant/components/light/__init__.py | 64 | Paulus Schoutsen | 24.4% |
| homeassistant/core.py | 63 | J. Nick Koston | 26.8% |
How Home Assistant compares with other Python open source projects →
How Home Assistant ranks among Python open source 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