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 12 Jan 13 Jan 14 Jan 15 Jan 16 Jan 17 Jan 18 Avg Growth
Clojars (Clojure) 20817 20827 20832 20840 20851 20859 20874 9/day
CPAN 36045 36046 36050 36051 36056 36061 36062 3/day
CPAN (search) 36045 36047 36051 36052 36056 36062 36063 3/day
CRAN (R) 12066 12067 12069 12075 12090 12102 12108 6/day
Crates.io (Rust) 13270 13289 13310 13340 13358 13382 13393 20/day
Drupal (php) 39480 39484 39489 39490 39504 39517 39520 7/day
DUB (dlang) 1182 1182 1182 1182 1183 0/day
Gopm (go) 19907 19908 19911 19913 19916 19920 19922 3/day
Hackage (Haskell) 12174 12175 12178 12182 12186 12191 12194 3/day
Hex.pm (Elixir/Erlang) 5614 5614 5620 5626 5631 5633 5638 4/day
Julia 1655 1655 1667 1667 1671 1671 1672 1/day
LuaRocks (Lua) 1671 1671 1671 1673 1674 1676 1676 1/day
Maven Central (Java) 216379 216529 216617 216673 216760 216879 217065 118/day
MELPA (Emacs) 3835 3838 3840 3840 3840 3840 3841 1/day
Nimble (Nim) 576 577 577 578 579 579 580 1/day
npm (node.js) 566747 567469 567998 568753 569790 570330 570777 696/day
nuget (.NET) 101837 101915 101990 102072 102169 102269 102400 89/day
Packagist (PHP) 170813 170941 171036 171149 171455 171629 137/day
Pear (PHP) 602 602 602 602 602 602 602 0/day
Perl 6 Ecosystem (perl 6) 980 980 980 980 981 984 987 2/day
PyPI 126523 126591 126652 126740 126821 126918 127021 86/day
Rubygems.org 139568 139597 139619 139637 139663 139705 139742 29/day
Vim Scripts 5501 5504 5501 5501 5505 5504 5506 1/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.