Module Counts

  • Include
  • Clojars (Clojure)
  • CPAN
  • CPAN (search)
  • CRAN (R)
  • Crates.io (Rust)
  • Crystal Shards
  • 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
Jun 20 Jun 21 Jun 22 Jun 23 Jun 24 Jun 25 Jun 26 Avg Growth
Clojars (Clojure) 24213 24217 24220 24222 24227 24234 24237 4/day
CPAN 40005 40009 40010 40014 40015 40020 40023 3/day
CPAN (search) 5/day
CRAN (R) 14435 14440 14445 14445 14448 14456 14460 4/day
Crates.io (Rust) 26970 26989 26987 27019 18/day
Crystal Shards 4515 4233 4523 4528 4532 4535 4535 2/day
Drupal (php) 43332 43339 43341 43343 43344 43358 43365 6/day
DUB (dlang) 1592 1592 1592 1593 1593 1594 1595 1/day
Gopm (go) 23291 23312 23314 23317 23324 23329 23340 10/day
Hackage (Haskell) 13932 13936 13937 13940 13944 13947 13952 3/day
Hex.pm (Elixir/Erlang) 8351 8355 8358 8363 8370 8385 8388 6/day
Julia 2016 2018 2025 2033 6/day
LuaRocks (Lua) 2178 2179 2179 2181 1/day
Maven Central (Java) 287328 287438 287653 287735 287911 288048 125/day
MELPA (Emacs) 4208 4207 4208 4214 4214 4214 4214 1/day
Nimble (Nim) 968 970 970 970 971 972 972 1/day
npm (node.js) 1007596 1008479 1009033 1009655 1010311 1011120 1012109 770/day
nuget (.NET) 158136 158335 158455 158651 158748 158748 158836 127/day
Packagist (PHP) 228910 229070 229173 229287 229384 229490 229606 122/day
Pear (PHP) 603 603 603 603 603 603 603 0/day
Perl 6 Ecosystem (perl 6) 1396 1396 1396 1396 1396 1399 1399 0/day
PyPI 184354 184475 184604 184729 184821 184971 185114 126/day
Rubygems.org 153323 153343 153363 153371 153387 153420 153433 17/day
Vim Scripts 5536 5536 5536 5536 5536 5536 5536 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).

(Jun 23, 2019) Update Crates.io, Julia, and LuaRocks after site changes. Also upgrade LOTS of ruby gems and get off a deprecated Heroku stack.

(Jun 3, 2018) Update Drupal, DUB, and PyPI after their sites updated.

(Mar 4, 2018) Added Crystal Shards, as well as JSON endpoints /repositories and /repositories/:id/counts/:start/:finish as first steps towards revamping JS front end. (e.g. /repositories/1/counts/2018-02-01/2018-02-28)

(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.

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.