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 17 Oct 18 Oct 19 Oct 20 Oct 21 Oct 22 Oct 23 Avg Growth
Clojars (Clojure) 20093 20104 20114 20123 20129 20135 20145 8/day
CPAN 35802 35806 35813 35813 35814 35814 35811 2/day
CPAN (search) 35802 35805 35813 35813 35814 35812 35811 2/day
CRAN (R) 11626 11627 11637 11650 11650 11652 11663 7/day
Crates.io (Rust) 11814 11823 11843 11865 11877 11896 11910 17/day
Drupal (php) 38815 38828 38840 38845 38849 38856 38863 9/day
DUB (dlang) 1134 1134 1133 1133 1135 1136 1138 1/day
Gopm (go) 19564 19566 19582 19617 19617 19619 19627 10/day
Hackage (Haskell) 11869 11873 11879 11880 11883 11887 11891 4/day
Hex.pm (Elixir/Erlang) 5172 5177 5185 5191 5200 5203 5207 6/day
Julia 1518 1518 1518 1518 1518 1518 1518 0/day
LuaRocks (Lua) 1592 1594 1596 1596 1596 1597 1597 1/day
Maven Central (Java) 203961 204055 204211 204306 204522 204700 123/day
MELPA (Emacs) 3749 3749 3750 3750 3752 3756 3760 1/day
Nimble (Nim) 537 537 537 537 537 537 537 0/day
npm (node.js) 530995 531620 532293 532829 533113 533456 533955 499/day
nuget (.NET) 94207 94404 94500 94583 94678 94791 94852 102/day
Packagist (PHP) 159665 159799 159976 160087 160183 160271 160413 131/day
Pear (PHP) 602 602 602 602 602 602 602 0/day
Perl 6 Ecosystem (perl 6) 922 923 924 924 929 929 929 1/day
PyPI 119487 119571 119674 119755 119842 119897 119977 82/day
Rubygems.org 137114 137158 137188 137211 137234 137247 137271 28/day
Vim Scripts 5482 5482 5482 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.