Module Counts

  • Include
  • Clojars (Clojure)
  • CPAN
  • CPAN (search)
  • CRAN (R)
  • Crates.io (Rust)
  • Drupal (php)
  • DUB (dlang)
  • Gopm (go)
  • Hackage (Haskell)
  • Hex.pm (Elixir/Erlang)
  • Julia
  • LuaRocks (Lua)
  • Maven Central (Java)
  • MELPA (Emacs)
  • Nimble (Nim)
  • npm (node.js)
  • nuget (.NET)
  • Packagist (PHP)
  • Pear (PHP)
  • Perl 6 Ecosystem (perl 6)
  • PyPI
  • Rubygems.org
  • Vim Scripts
  • time period
  • all time
  • last year
  • last 90 days
  • last 30 days
  • last 7 days
Nov 15 Nov 16 Nov 17 Nov 18 Nov 19 Nov 20 Nov 21 Avg Growth
Clojars (Clojure) 20317 20325 20333 20337 20342 20352 20360 7/day
CPAN 35854 35856 35862 35860 35868 35868 35870 3/day
CPAN (search) 35854 35856 35861 35860 35868 35868 35870 3/day
CRAN (R) 11833 11847 11857 11864 11863 11871 11878 8/day
Crates.io (Rust) 12334 12345 12367 12380 12392 12406 12417 14/day
Drupal (php) 39048 39061 39067 39072 39079 39084 39105 10/day
DUB (dlang) 1151 1151 1151 1151 1151 1151 1151 0/day
Gopm (go) 19724 19725 19727 19729 19729 19733 19736 2/day
Hackage (Haskell) 11984 11991 11996 11997 11999 11999 12002 3/day
Hex.pm (Elixir/Erlang) 5334 5340 5346 5351 5358 5364 5371 6/day
Julia 1518 1518 1518 1518 1518 1518 1518 0/day
LuaRocks (Lua) 1622 1622 1624 1624 1624 1625 1626 1/day
Maven Central (Java) 209341 209498 209581 209636 209666 209766 209870 88/day
MELPA (Emacs) 3784 3786 3786 3787 3788 3791 3791 1/day
Nimble (Nim) 552 555 556 556 556 556 556 1/day
npm (node.js) 546070 546720 547339 547743 548104 548644 549259 532/day
nuget (.NET) 97113 97340 97340 97520 97595 97675 97760 108/day
Packagist (PHP) 163570 163684 163807 163908 164003 164107 164259 115/day
Pear (PHP) 602 602 602 602 602 602 602 0/day
Perl 6 Ecosystem (perl 6) 937 937 938 937 937 938 939 0/day
PyPI 121839 121943 122029 122137 122198 122286 122380 90/day
Rubygems.org 137960 137997 138033 138030 138051 138075 138108 25/day
Vim Scripts 5485 5485 5485 5485 5485 5486 5486 0/day

Data is collected by scraping the relevant websites once a day via a cron job and then stored in a Postgresql database for later retrieval. Growth rates are calculated by averaging data over the last week. I'm gathering counts of separate modules, so multiple versions of the same module/package/gem only count once (foo-1.2, foo-1.3 and bar-1.0 would count as 2 total).

(Sept 10, 2017) Update Crates.io for their new data URL and add Nimble, the Nim package manager. Many thanks to Alex Libman for pointing me to it.

(Aug 6, 2017) Go back to single-threaded fetch, as doing it in parallel seems to be causing intermittent sampling failures. Update DUB entry for new wording on their site.

(May 14, 2017) Upgrade to Rails 5.1, ruby 2.4.1, switch from unicorn to puma, and add Vim Scripts repository. I can't believe I've had emacs for so long and no one has mentioned vim has its own repository.

(Apr 2, 2017) Added Julia to list. Thanks to Bargava Subramanian for pointing it out. Return CSV download feature.

(Mar 17, 2017) Bower and GoDoc haven't been pulling numbers for a long time, and it doesn't seem to just be a matter of the number moving somewhere new. I'm removing them both, and adding Gopm.io, which seems to be more in-line with most languages' ideas about what a package manager is. Big thanks to Jesse Aldridge for pointing me to it.

(May 30, 2016) Much thanks to Hiroki Noda for adding DUB (dlang). Fixed Hex.pm sampling, and removed link to CSV download until I can re-engineer it.

(Apr 8, 2016) Updates to Rubygems.org and Npmjs.org broke both of those samplers.

I'd like to add more repositories. If you have suggestions, please send them to erik@debill.org.

CPAN and CPAN (search) used to be two conflicting sources for data about how many modules are in CPAN. During spring of 2011 CPAN got a site refresh and the numbers came into line with each other. It looks funny on the graph, but it's an interesting bit of history.

GoDoc is weird. It's not a true package repository in the same sense as all the others, but as far as I can tell it's the closest GoLang has. Be aware that it pretty drastically overcounts the number of packages. Don't use the raw numbers to compare with other languages. You can still watch the line to see changes in velocity, though.

If you'd like to check out the data in more detail, you are welcome to download it in a CSV file.