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
Oct 11 Oct 12 Oct 13 Oct 14 Oct 15 Oct 16 Oct 17 Avg Growth
Clojars (Clojure) 20065 20069 20073 20080 20083 20086 20093 5/day
CPAN 35771 35775 35779 35785 35789 35796 35802 5/day
CPAN (search) 35771 35775 35779 35785 35789 35796 35802 5/day
CRAN (R) 11592 11600 11601 11601 11609 11615 11626 6/day
Crates.io (Rust) 11707 11728 11747 11775 11781 11794 11814 18/day
Drupal (php) 38766 38773 38788 38799 38800 38802 38815 8/day
DUB (dlang) 1133 1135 1130 1130 1131 1132 1134 0/day
Gopm (go) 19542 19551 19555 19557 19557 19560 19564 4/day
Hackage (Haskell) 11848 11849 11856 11859 11861 11865 11869 3/day
Hex.pm (Elixir/Erlang) 5129 5138 5147 5154 5159 5166 5172 7/day
Julia 1518 1518 1518 1518 1518 1518 1518 0/day
LuaRocks (Lua) 1587 1589 1589 1590 1590 1592 1592 1/day
Maven Central (Java) 203205 203356 203528 203640 203714 203961 126/day
MELPA (Emacs) 3738 3738 3738 3750 3750 3750 3749 2/day
Nimble (Nim) 534 535 536 537 537 537 537 0/day
npm (node.js) 528061 528624 529140 529495 529867 530460 530995 489/day
nuget (.NET) 93738 93858 93969 94031 94059 94135 94207 78/day
Packagist (PHP) 158933 159051 159167 159274 159358 159493 159665 122/day
Pear (PHP) 602 602 602 602 602 602 602 0/day
Perl 6 Ecosystem (perl 6) 911 911 911 914 919 921 922 2/day
PyPI 119018 119128 119214 119291 119346 119406 119487 78/day
Rubygems.org 136921 136961 136982 137019 137047 137074 137114 32/day
Vim Scripts 5481 5481 5482 5482 5482 5482 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.