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
Dec 18 Dec 19 Dec 20 Dec 21 Dec 22 Dec 23 Dec 24 Avg Growth
Clojars (Clojure) 23163 23176 23180 23183 23187 23188 23194 5/day
CPAN 39288 39291 39293 39296 39297 39298 39306 3/day
CPAN (search) 5/day
CRAN (R) 13546 13560 13560 13561 13578 13579 13583 7/day
Crates.io (Rust) 21037 21077 21117 21144 21166 21185 21214 28/day
Crystal Shards 4055 4055 4061 4064 4064 4067 4069 2/day
Drupal (php) 42122 42133 42129 42133 42143 42146 42149 5/day
DUB (dlang) 1463 1463 1463 1464 1464 1465 1467 1/day
Gopm (go) 21412 21416 21420 21429 21432 21437 21441 5/day
Hackage (Haskell) 13332 13334 13339 13344 13346 13351 13353 3/day
Hex.pm (Elixir/Erlang) 7444 7448 7455 7456 7459 7460 7465 3/day
Julia 1906 1906 1906 1906 1906 1906 1906 0/day
LuaRocks (Lua) 1/day
Maven Central (Java) 260695 260858 260978 261085 261251 261417 261604 150/day
MELPA (Emacs) 4046 4047 4048 4048 4048 4048 4048 0/day
Nimble (Nim) 875 877 878 879 879 880 880 1/day
npm (node.js) 744063 744633 745312 745989 746411 746726 747267 552/day
nuget (.NET) 136965 136965 137441 137452 137579 137651 137749 112/day
Packagist (PHP) 206328 206471 206598 206686 206764 206818 206904 102/day
Pear (PHP) 602 602 602 602 602 602 602 0/day
Perl 6 Ecosystem (perl 6) 1279 1283 1283 1282 1283 1283 1283 1/day
PyPI 162065 162181 162290 162400 162494 162570 162632 96/day
Rubygems.org 148693 148720 148759 148784 148803 148823 148842 25/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 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.