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
Jan 3 Jan 4 Jan 5 Jan 6 Jan 7 Jan 8 Jan 9 Avg Growth
Clojars (Clojure) 20758 20764 20770 20785 20786 20791 20798 7/day
CPAN 36004 36006 36010 36016 36019 36019 36026 4/day
CPAN (search) 36004 36006 36010 36016 36019 36019 36026 4/day
CRAN (R) 12005 12012 12018 12027 12025 12026 12048 7/day
Crates.io (Rust) 13108 13127 13138 13148 13166 13188 13212 17/day
Drupal (php) 39422 39432 39446 39451 39452 39457 39461 6/day
DUB (dlang) 1175 1176 1177 1178 1178 1177 1178 0/day
Gopm (go) 19867 19871 19878 19883 19883 19888 19894 4/day
Hackage (Haskell) 12151 12154 12156 12160 12161 12165 12167 3/day
Hex.pm (Elixir/Erlang) 5566 5569 5575 5581 5582 5589 5597 5/day
Julia 1688 1688 1688 1702 1659 1661 1661 -4/day
LuaRocks (Lua) 1667 1667 1668 1668 1668 1672 1673 1/day
Maven Central (Java) 215417 215492 215586 215715 215766 215852 215984 94/day
MELPA (Emacs) 3835 3835 3835 3835 3835 3835 3835 0/day
Nimble (Nim) 571 571 571 572 573 573 573 0/day
npm (node.js) 571408 561224 561854 562103 562786 563548 564272 -1189/day
nuget (.NET) 101178 101178 101318 101374 101423 101542 101647 78/day
Packagist (PHP) 169631 169761 169870 170000 170056 170174 170353 120/day
Pear (PHP) 602 602 602 602 602 602 602 0/day
Perl 6 Ecosystem (perl 6) 968 970 970 970 973 974 974 1/day
PyPI 125682 125765 125849 125936 125993 126082 126192 85/day
Rubygems.org 139313 139351 139387 139413 139423 139445 139492 30/day
Vim Scripts 5501 5501 5501 5501 5501 5501 5501 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.