Gallery data
============
The `GitStats Gallery `_ makes a
gitstats report every Monday for each repository of
`gallery/repos.yml `_,
and publishes what it counts as data next to its pages. These files are free
to read from scripts, notebooks and other sites.
Ecosystem rankings
------------------
Each group of ``gallery/repos.yml`` (an *ecosystem*: Python, CNCF graduated,
Apache, …) has a page that ranks its repositories by the share of the last
complete quarter's commits that name an AI coding assistant, and the same
ranking as JSON at the same address:
* ``/gitstats/gallery/ecosystems/.html`` and ``.json``, for example
`python.html `_
and `python.json `_;
* ``/gitstats/gallery/ecosystems/index.html`` and ``index.json``: every
ecosystem side by side.
The ids are those of ``gallery/repos.yml``; an ecosystem's page appears once
one of its repositories has a report. ``/gitstats/gallery/sitemap.xml`` lists
the gallery's pages for search engines.
A commit counts as AI-assisted when it names an assistant as its author, as a
co-author, or in the line the assistant signs with. The counts are lower
bounds: an assistant that leaves no mark in a commit is not counted, and a
mark does not say how much of the commit the assistant wrote. A commit counts
in the quarter it was written (its author date).
``.json``
~~~~~~~~~~~~~
A part of ``python.json``, from a gallery of 24 repositories:
.. code-block:: json
{
"schema_version": 1,
"generated_by": "gitstats 2.12.0",
"generated_at": "2026-10-26T00:41:07+00:00",
"ecosystem": {"id": "python", "name": "Python", "title": "Python open source projects"},
"quarter": {"id": "2026-Q3", "label": "Jul–Sep 2026"},
"previous_quarter": {"id": "2026-Q2", "label": "Apr–Jun 2026"},
"summary": {
"repositories": 6,
"with_commits": 6,
"naming": 4,
"median_share": 0.0115,
"highest": {"id": "pandas", "name": "pandas", "share": 0.6674}
},
"repositories": [
{
"rank": 1,
"id": "pandas",
"name": "pandas",
"repository": "pandas-dev/pandas",
"report": "../pandas/",
"quarter": {"commits": 947, "ai_assisted": 632, "share": 0.6674},
"previous_quarter": {"commits": 630, "ai_assisted": 356, "share": 0.5651},
"commits_last_12mo": 2885,
"active_authors_12mo": 398,
"health": "steady",
"last_commit": "2026-10-18",
"assistants": ["Claude", "Devin", "GitHub Copilot"]
}
]
}
``index.json`` has ``schema_version``, ``generated_by``, ``generated_at``,
``quarter``, and ``ecosystems``: for each, its ``id``, ``name``, ``title``,
``page``, ``data`` (the file names of its page and JSON) and its ``summary``,
as above.
Stable fields
~~~~~~~~~~~~~
While ``schema_version`` is ``1``, these fields keep their names, types and
meaning; a change to any of them comes with a new ``schema_version``:
* ``schema_version``;
* ``ecosystem.id``; ``quarter.id`` and ``previous_quarter.id`` (``YYYY-Qn``);
* ``summary.repositories``, ``summary.with_commits``, ``summary.naming``,
``summary.median_share``, ``summary.highest`` (``id``, ``name``, ``share``,
or ``null`` when no repository names an assistant);
* for each of ``repositories``, sorted by ``rank``: ``rank``, ``id``,
``repository`` (``owner/name`` on GitHub), ``quarter`` and
``previous_quarter`` (``commits``, ``ai_assisted``, ``share``),
``commits_last_12mo`` and ``active_authors_12mo``;
* in ``index.json``: ``ecosystems[].id``, ``ecosystems[].data`` and
``ecosystems[].summary``.
A share is a fraction from 0 to 1, rounded to four decimals, or ``null`` when
there are no commits to make one of. ``quarter`` (in a repository) is ``null``
when its report does not reach back to that quarter. The ranking: the largest
``quarter.share`` first, then the most commits in the quarter, then the name;
repositories without a share last.
Everything else may change without notice: the display names and titles,
``quarter.label``, ``generated_by``, ``generated_at``, ``report`` (where the
repository's report is, relative to the JSON file), ``health`` (the
repository's pace, as its report's History page labels it), ``last_commit``,
and ``assistants`` (the assistants its commits name most). New fields may be
added at any time.
AI-assisted commits
-------------------
`ai.json `_ and
`ai.csv `_ hold the counts
of the `AI-assisted commits `_
page, month by month and quarter by quarter, for every repository of the
gallery; ``ai/-Q.json`` keeps each quarter as it was first
published.
Organizations
-------------
`organizations.json `_
and `organizations.csv `_
hold the counts of the
`Organizations `_
page: commits by the domain of the author's email address, added up across
the gallery's repositories. Domains and counts only, never an address.
``organizations`` lists every organization, the most commits in the last 12
months first: ``organization`` (its domain), ``commits_last_12mo`` (the 12
months that end with each repository's last commit), ``commits`` (all of
them) and ``repositories`` (the names of those it committed to).
``repositories`` lists, for each repository, its ``commits`` of the last four
complete quarters (named in ``quarters``) and ``by_kind``, how they divide
between ``organization``, ``one_person`` (a domain only one person commits
from, most often that person's own), ``personal`` (mail providers anyone can
sign up for), ``hidden`` (code hosts' noreply addresses), ``unknown`` and
``bot``; and ``organizations_last_12mo``, its five organizations with the most
commits in the last 12 months. A domain says where an address is, not who paid
for the work. New fields may be added at any time.
Each of the 200 organizations with the most commits in the last 12 months has
a page, ``orgs/.html``, with its commits to each repository, and a
badge that is made again with every build: ``orgs/.svg``, and
``orgs/.json`` for a `shields.io endpoint badge
`_. In Markdown:
.. code-block:: markdown
[](https://shenxianpeng.dev/gitstats/gallery/orgs/google.com.html)
In ``organizations.json``, each organization's ``by_repository`` lists the
repositories it committed to, each with its ``commits``, ``commits_last_12mo``,
``addresses``, ``first_commit`` and ``last_commit``.