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
Dec 11 Dec 12 Dec 13 Dec 14 Dec 15 Dec 16 Dec 17 Avg Growth
Clojars (Clojure) 20487 20503 20509 20518 20523 20532 20537 8/day
CPAN 35938 35940 35946 35948 35951 35953 35958 3/day
CPAN (search) 35937 35941 35946 35948 35951 35953 35959 4/day
CRAN (R) 11968 11977 11988 11993 12001 12003 12003 6/day
Crates.io (Rust) 12728 12752 12786 12801 12817 12829 12848 20/day
Drupal (php) 39267 39280 39286 39294 39301 39306 39317 8/day
DUB (dlang) 1161 1162 1162 1163 1164 1165 1165 1/day
Gopm (go) 19796 19799 19806 19811 19813 19817 19817 3/day
Hackage (Haskell) 12066 12071 12075 12082 12085 12098 12105 6/day
Hex.pm (Elixir/Erlang) 5481 5483 5486 5487 5491 5492 5493 2/day
Julia 1686 1686 1686 1686 1686 1686 1686 0/day
LuaRocks (Lua) 1652 1654 1655 1655 1655 1655 1656 1/day
Maven Central (Java) 212735 212955 213072 213253 213575 213750 213774 173/day
MELPA (Emacs) 3809 3809 3809 3809 3809 3809 3809 0/day
Nimble (Nim) 566 566 567 567 567 567 567 0/day
npm (node.js) 560047 560682 561290 561879 562471 562998 563348 550/day
nuget (.NET) 99302 99302 99302 99734 99830 99944 99980 113/day
Packagist (PHP) 166790 167081 167247 167429 167576 167642 167729 156/day
Pear (PHP) 602 602 602 602 602 602 602 0/day
Perl 6 Ecosystem (perl 6) 955 955 956 956 957 957 957 0/day
PyPI 124037 124110 124189 124292 124392 124444 124480 74/day
Rubygems.org 138670 138710 138762 138816 138876 138907 138932 44/day
Vim Scripts 5493 5493 5493 5493 5493 5493 5493 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.