Soup in numbers
Four figures are fetched from the service that produces each one; two tables are typed in at each release and say so. A figure we cannot fetch reads unavailable. At the bottom: the request behind every number and what we refuse to publish.
Downloads per day, last 216 days
26,680 downloads in the 30 days to 2026-11-09, against 10,186 in the 30 days before.
The bright line is the seven-day mean, the faint one each day. 2 days run above the scale and are drawn at the top edge, marked with a tick: the highest was 8,453 on 2026-10-31.
This is not the all-time total above it. pypistats keeps only about six months of daily history, so this window holds 113,689 downloads and can fall as old days drop out of it. Both counts include mirrors and continuous-integration traffic, which is normal for PyPI and worth knowing before reading a single day as demand.
Who writes it
Of the pull requests merged into each release, how many came from somebody other than the maintainer. No API reports this, so the rows are transcribed from upstream's release notes. They are not free of double counting: six pull requests sit in both the v0.76.0 row and the v0.75.0 row, as the v0.76.0 note says.
- v0.77.2153 of 159 from outside, 30 people
A cut of main eight days after v0.77.1, as counted in the release notes, which name each of the 30 people and what they found or built
- v0.77.122 of 28 from outside, 11 people
A cut of main two days after v0.77.0, as counted in the release notes; the maintainer's six are the two data-command input fixes, plan and apply refusing what train refuses, the two program-search changes and a docs correction
- v0.77.0151 of 226 from outside, 44 people
As counted in the release notes, which name each of the 44 people and what they found or built
- v0.76.1none from outside, 0 people
A patch on v0.76.0 written by the maintainer alone. @dryn85-max reported that every bundled DPO example failed (#1849); @umran666 measured the post-repair 8B row (#1103)
- v0.76.0418 of 490 from outside, 80 people
Counted from 12 September, the day v0.75.0 shipped, not tag to tag: the window also holds v0.75.1 and v0.75.2, and six of the 418 are counted in the v0.75.0 row too. Counting only pull requests merged after v0.75.0's release pull request gives 412 of 483
- v0.75.2none from outside, 0 people
A security patch the maintainer wrote alone; an outside contributor reported the defect
- v0.75.1none from outside, 0 people
A security backport onto v0.75.0, written by the maintainer alone
- v0.75.060 of 60 from outside, 22 people
Every pull request came from outside
- v0.74.0116 of 120 from outside, 25 people
The maintainer's own four were CI and guard work
- v0.73.324 of 24 from outside, 8 people
Five of them appearing for the first time
| Release | From outside | People | Note |
|---|---|---|---|
| v0.77.2 | 153 of 159 | 30 | A cut of main eight days after v0.77.1, as counted in the release notes, which name each of the 30 people and what they found or built |
| v0.77.1 | 22 of 28 | 11 | A cut of main two days after v0.77.0, as counted in the release notes; the maintainer's six are the two data-command input fixes, plan and apply refusing what train refuses, the two program-search changes and a docs correction |
| v0.77.0 | 151 of 226 | 44 | As counted in the release notes, which name each of the 44 people and what they found or built |
| v0.76.1 | none | 0 | A patch on v0.76.0 written by the maintainer alone. @dryn85-max reported that every bundled DPO example failed (#1849); @umran666 measured the post-repair 8B row (#1103) |
| v0.76.0 | 418 of 490 | 80 | Counted from 12 September, the day v0.75.0 shipped, not tag to tag: the window also holds v0.75.1 and v0.75.2, and six of the 418 are counted in the v0.75.0 row too. Counting only pull requests merged after v0.75.0's release pull request gives 412 of 483 |
| v0.75.2 | none | 0 | A security patch the maintainer wrote alone; an outside contributor reported the defect |
| v0.75.1 | none | 0 | A security backport onto v0.75.0, written by the maintainer alone |
| v0.75.0 | 60 of 60 | 22 | Every pull request came from outside |
| v0.74.0 | 116 of 120 | 25 | The maintainer's own four were CI and guard work |
| v0.73.3 | 24 of 24 | 8 | Five of them appearing for the first time |
Release cadence
The eight most recent, newest first, straight from the GitHub releases API. Each one links to its notes.
What ships in it
Counted in the source of the current release rather than on the development branch, which runs ahead of anything you can install. Transcribed here at each release, not fetched.
- ready-made recipes, all offline
- 173
- training tasks in one schema
- 23
- test files
- 1220
- counted at release
- v0.77.2
Apache-2.0 since v0.29.0. Every performance number this project publishes is measured rather than estimated, and the working records are public including the runs that failed: see the preprint and the measurement records.
Check any number yourself
Each figure, where it comes from, and the request that returns it. GitHub is read without a token, as this page reads it.
Stars, forks, watching
The repository API: stargazers_count, forks_count and subscribers_count.
$ curl -s https://api.github.com/repos/MakazhanAlpamys/SoupContributors
Real GitHub accounts only (anon=0): the page number on rel="last" in the link header.
$ curl -sI "https://api.github.com/repos/MakazhanAlpamys/Soup/contributors?per_page=1&anon=0"Releases
Published releases: the page number on rel="last" in the link header.
$ curl -sI "https://api.github.com/repos/MakazhanAlpamys/Soup/releases?per_page=1"Downloads, all time
pepy.tech, through the badge the README shows, which rounds to the unit it prints (such as 131k), up as well as down; hence the ≈. With a pepy API key the page shows the exact total instead.
$ curl -s https://img.shields.io/pepy/dt/soup-cli.jsonDownloads per day
pypistats, the with_mirrors rows. It keeps about six months.
$ curl -s "https://pypistats.org/api/packages/soup-cli/overall?mirrors=true"Recipes, at the tag
Each recipe is one RecipeMeta entry in the catalog. Clone once for this and the next row.
$ git clone https://github.com/MakazhanAlpamys/Soup && git -C Soup show v0.77.2:src/soup_cli/recipes/catalog.py | grep -c "RecipeMeta("Test files, at the tag
Files named test_*.py under tests/. A test total is not published at a tag, so it is not here.
$ git -C Soup ls-tree -r --name-only v0.77.2 -- tests/ | grep -c "test_.*\.py$"
What is deliberately not here
- User counts. Soup sends nothing about your runs unless you opt in, and as shipped it sends nothing even then. We cannot count users, so we do not estimate them.
- Revenue, pricing and funding status. Soup is Apache-2.0 and free. There is nothing to report here and this page will not invent a funnel.
- A test total. The file count is reproducible at a tag; the total is not published at one, so only the file count appears.
- Anything a static page cannot keep honest, which is why no Product Hunt rank, subscriber count or channel membership appears anywhere on this site.
Every number here can be re-derived by a stranger
That is the only claim this page makes for itself, and the requests above are how. It is the same standard the project holds its measurements to: the benchmark records are published with the runs that failed still in them.
pip install "soup-cli[train]"