Email me

Explainer · 7 min read

Filed under Rust

Why are crates.io download counts inflated?

Short answer

Because a crates.io "download" is one fetch of a .crate file from the crates.io CDN, not a person. Every CI run on a clean machine fetches again, every new version gets fetched by automated systems within hours, and one install of a crate split into a workspace counts once per member crate. In our study of 69 crates, 80.1% of 3,676 downloads landed on the day a version was published or the day after, and the number that reflects real use, the quiet-day baseline, was 339.

Screenshot of the crates.io page for the fin-primitives crate: 258 recent downloads, 561 downloads all time, 13 versions published, and a stacked 90-day downloads chart that sits at 0 to 3 a day through the summer, then shows tall colored spikes of 20 to 50 in late September and early October, one color per new version.
A real crates.io page. The flat summer line is people; each tall colored spike is a new version being fetched. Screenshot: Tensorust, crates.io page for fin-primitives, Oct 17 2026.

Part of the article crates.io download count: 80% of ours arrived with a new version. This page answers one question from it in depth.

On this page · 10 sections
  1. Key numbers
  2. What one download is
  3. The three things inside your number
  4. Why releasing more makes the number bigger
  5. How to read any crate's number in two minutes
  6. Common misconceptions
  7. Our take
  8. Related
  9. FAQ
  10. Sources

That does not make the count fake. The rules are public and reasonable. It just measures fetches, so you have to split it into parts before it tells you anything about users. Here is how.

Key numbers

What Number Source
What is counted Requests for a .crate file at static.crates.io, from CDN logs crates.io blog, Mar 11 2024
Which clients count cargo user agents, or no user agent, since Oct 29 2025 crates.io PR #12210
Daily history kept per crate Last 90 days, split by version crates.io data access
Our crates / versions 69 / 235 our study, crates.io API, Oct 17 2026
Downloads Jul 20 to Oct 16 2026 3,676 same
On a publish day or the day after 2,945 (80.1%) same
On "sweep" days, most crates hit at once 392 (10.7%) same
Quiet days 339 (9.2%), about 3.8 a day same
Average downloads per new version, day 0 / day 1 13.45 / 1.21 same, 181 versions
Lowest all-time count for any version 9 same
Correlation, version count vs downloads 0.82 same
Crates outside ours that depend on any of the 69 0 same

What one download is

Diagram titled What one crates.io download actually is. Step 1: a client asks the CDN; cargo build or cargo install on a machine without the file cached requests the .crate file from static.crates.io. Step 2: the log line is filtered; since Oct 29 2025 only cargo user agents or no user agent count, and mirrors, Buck and Bazel are dropped. Step 3: plus one for that version on that UTC day, shown on the crate page for the last 90 days stacked by version. Below, four examples: CI on a clean runner, 30 builds a day, adds 30 a day forever; a developer with a warm cargo cache adds 1, once; publishing a new version adds about 13 on day 0, 1 on day 1, then about 0; one clean install of a binary from a 17-crate workspace adds up to 17, spread over 17 crate pages.
The counting rule, and four ways the same code turns into very different numbers. Credit: Tensorust diagram from crates.io's own docs and our study.

Since March 2024, cargo downloads crates straight from the static.crates.io CDN, and crates.io counts downloads by reading the CDN's request logs. The crates.io team said at the time that this raised the numbers of most crates, especially small ones, because mirrors that had been fetching from the CDN all along were now counted.

On October 29, 2025, crates.io merged a change to count only requests whose user agent belongs to cargo. The pull request says the goal was to "filter out all of the systems that appear to mirror crates.io." Requests with no user agent at all are still counted, and Buck and Bazel are not, for now.

So a download means: some machine running cargo did not have that exact version cached and fetched it. That is why the same crate can show 30 downloads a day from one company's CI pipeline and 1 download, ever, from a developer who builds it every day on a laptop.

The three things inside your number

In our 69 crates, every day of downloads fell into one of three buckets, by a simple mechanical rule:

  1. Publish window (80.1%). The crate published a version that day or the day before. Something fetches every new version within hours, whether or not a human ever reads it. Our guess, and it is only a guess, is registry mirrors that follow the index, build farms and security scanners. The effect is consistent: about 13 downloads on day 0, about 1 on day 1, then near zero.
  2. Sweep days (10.7%). No publish, but most of the crates got downloaded on the same day. On October 9, 2026, all 69 crates got hit, 184 downloads, with nothing published. No person installs a trading library, a game engine and a stats crate in one afternoon.
  3. Quiet days (9.2%). Everything else: 339 downloads in 89 days. This is the closest thing to someone, somewhere, building with your code. One crate, fin-primitives, made up 128 of them.
Stacked bar and table: 3,676 downloads in 90 days. Publish day or the day after: 2,945, 80.1 percent. Sweep days, most crates hit at once with no publish: 392, 10.7 percent. Everything else, the quiet baseline: 339, 9.2 percent.
Our 69 crates, Jul 20 to Oct 16 2026, split by kind of day. Credit: Tensorust, from the crates.io API, pulled Oct 17 2026.

Why releasing more makes the number bigger

Because every new version gets its automatic fetches, the number of versions you publish predicts your downloads better than anything about the code. Across our crates the correlation between version count and all-time downloads was 0.82. Of 235 versions, none had fewer than 9 downloads, and our 19 single-version crates, including internal plumbing nobody outside the project has a reason to use, still collected 10 to 28 each.

Bar chart of mean downloads per new version by day since publish: day 0 13.45, day 1 1.21, day 2 0.02, day 3 0.13, day 4 0.57, day 5 1.15, day 6 0.27, day 7 0.07.
What one new version is worth by itself: a spike, then nothing. 181 versions with a week of data each. Credit: Tensorust, crates.io API, Oct 17 2026.

Workspaces multiply this. When you publish a Cargo workspace, every member becomes its own crate. One of ours, corescout-mcp, has 16 of our other crates in its dependency tree, so a single clean install can show up as up to 17 downloads on 17 different pages.

How to read any crate's number in two minutes

  1. Open the crate page and look at the colors. The 90-day chart is stacked by version. Spikes in a new color right after a release are mostly automatic. The low line between releases is the part that matters.
  2. Check Dependents. The Dependents tab, the reverse dependencies API and GitHub's "Used by" show real adoption. One crate in someone else's tree beats a thousand release-day fetches, because their CI then downloads yours on every run.
  3. Discount workspaces. If the crate is one of 20 members of the same project, its count reflects the project's installs, not separate demand.
  4. Compare quiet days, not totals. Our free crate download checker shows how much of any crate's last 90 days arrived within 2 days of a release, and its quiet-day median, in your browser.

Common misconceptions

Myth

"Downloads equal users."

The recordOne user with a warm cache adds 1. One CI pipeline can add 30 a day. The count measures fetches, and the ratio of fetches to people varies by orders of magnitude.

Myth

"crates.io download counts are fake."

The recordThe counting is public, consistent and reasonable, and the 2025 change removed most mirror traffic. The number is real; it just answers "how often was this file fetched by cargo," not "how many people use this."

Myth

"A brand-new crate with 12 downloads on day one has been discovered."

The recordThat is the automatic baseline every new version gets. Twelve downloads on a random Tuesday three weeks later is the interesting signal.

Myth

"Publishing more often is a growth strategy."

The recordIt raises the count, which is exactly why the count cannot be used to judge popularity, and why people evaluating a crate look at dependents and recent activity instead.

FAQ

What counts as a download on crates.io?

One request for a crate version's .crate file to the crates.io CDN, counted from the CDN's logs. Since October 29, 2025 only requests with a cargo user agent, or no user agent, are counted. It is not a count of users, installs or projects.

Why do new crates get downloads right away?

Something fetches every new version within hours of publish, whether or not anyone reads it. In our 181 versions, the average was 13.45 downloads on day 0 and 1.21 on day 1, and the lowest all-time count for any version was 9.

Do CI builds count as crates.io downloads?

Yes. A CI runner that starts with an empty cargo cache downloads every crate in the dependency tree on every run, and each of those fetches is a download if it uses cargo.

How do I see real usage of my crate?

Look at the downloads on days with no release (the quiet-day baseline), the Dependents tab, and repositories that depend on it. In our 69 crates the quiet baseline was 339 of 3,676 downloads in 89 days, about 3.8 a day.

Does crates.io count mirror downloads?

Not since October 29, 2025, when crates.io started ignoring requests whose user agent is not cargo. Before that change, and since March 2024 when counting moved to CDN logs, mirror fetches were counted.

Sources

All checked October 23, 2026.

crates.io (primary)

Our data

Images

  • Hero screenshot, breakdown chart and per-version chart: from the parent article, made by Tensorust.
  • "What one download is" diagram: made by Tensorust with matplotlib from the sources above. The CI and warm-cache rows illustrate the counting rule; they are not measurements.

Next question

Every number on this page links to its source and was checked on Oct 23, 2026. Spot an error or a newer figure? Email matt@tensorust.com and it gets fixed. Related: Crate download checker.

Read next

Back to The Manual →   All articles →

Get the next one by email.

What my AI agents tried this week, with the real numbers: what worked, what flopped, what made money. One email when there is something worth reading.

No spam, never sold. Every email has a one-click unsubscribe.

Get the receipts by email.

What my AI agents tried this week, with the real numbers: what worked, what flopped, what made money. One email when there is something worth reading.

No spam, never sold. Every email has a one-click unsubscribe.

Did this answer your question?

Popular in the shop

All 124 tools →

Browse: Bundles and kitsHome, family and schoolMoney and businessAI toolsSports and fitnessMaking and hobbiesFood and drinkIndie dev and launchTrading and quant

Free: Landing page teardown iPhone app cost calculator LLM API cost calculator Paid online: $49 Launch Check App builds Articles FAQ