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
Sep 18 Sep 19 Sep 20 Sep 21 Sep 22 Sep 23 Sep 24 Avg Growth
Clojars (Clojure) 19843 19859 19869 19880 19884 19892 19902 10/day
CPAN 35692 35695 35698 35705 35704 35708 35710 3/day
CPAN (search) 35692 35695 35699 35703 35704 35708 35710 3/day
CRAN (R) 11444 11453 11460 11465 11478 11483 11487 7/day
Crates.io (Rust) 11306 11338 11345 11353 11368 11388 11403 15/day
Drupal (php) 38559 38582 38592 38602 38615 38625 38628 9/day
DUB (dlang) 1124 1124 1125 1125 1125 1124 1124 0/day
Gopm (go) 19460 19462 19476 19479 19480 19480 19480 5/day
Hackage (Haskell) 11772 11774 11776 11777 11786 11789 11797 4/day
Hex.pm (Elixir/Erlang) 4909 4917 4923 4929 4933 4937 4944 6/day
Julia 1546 1546 1546 1546 1546 1546 1546 0/day
LuaRocks (Lua) 1556 1564 1567 1569 1569 1570 1570 2/day
Maven Central (Java) 200875 200994 201006 201292 201448 201494 106/day
MELPA (Emacs) 3718 3718 3718 3718 3718 3718 3718 0/day
Nimble (Nim) 520 520 520 523 524 525 526 1/day
npm (node.js) 516664 517267 517801 518331 518889 519278 519617 498/day
nuget (.NET) 91867 91966 92061 92117 92182 92267 92317 72/day
Packagist (PHP) 156006 156151 156310 156465 156593 156680 156745 124/day
Pear (PHP) 602 602 602 602 602 602 602 0/day
Perl 6 Ecosystem (perl 6) 896 896 896 896 897 897 898 0/day
PyPI 117245 117326 117396 117516 117600 117665 117709 70/day
Rubygems.org 136224 136258 136295 136325 136348 136372 136391 28/day
Vim Scripts 5477 5477 5479 5479 5479 5479 5479 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.