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
Sep 16 Sep 17 Sep 18 Sep 19 Sep 20 Sep 21 Sep 22 Avg Growth
Clojars (Clojure) 22561 22561 22566 22581 22588 22595 22599 6/day
CPAN 38870 38872 38874 38878 38886 38890 38925 9/day
CPAN (search) 5/day
CRAN (R) 13038 13051 13068 13074 13079 13083 13091 9/day
Crates.io (Rust) 18513 18536 18562 18580 18600 18613 18635 20/day
Crystal Shards 3673 3682 3685 3688 3697 3700 3703 5/day
Drupal (php) 41468 41474 41482 41489 41497 41501 41503 6/day
DUB (dlang) 1391 1391 1391 1393 1393 1393 1393 0/day
Gopm (go) 20874 20884 20888 20896 20904 20908 20912 6/day
Hackage (Haskell) 13059 13071 13075 13077 13078 13083 13084 4/day
Hex.pm (Elixir/Erlang) 6978 6982 6990 6992 6995 6996 7001 4/day
Julia 1906 1906 1906 1906 1906 1906 1906 0/day
LuaRocks (Lua) 1/day
Maven Central (Java) 248382 248458 248642 248976 249166 249269 249316 156/day
MELPA (Emacs) 3952 3952 3952 3953 3953 3953 3953 0/day
Nimble (Nim) 771 771 772 773 774 775 776 1/day
npm (node.js) 695308 695820 696473 697079 697705 698236 698575 544/day
nuget (.NET) 126997 127057 127160 127263 127429 127558 127732 122/day
Packagist (PHP) 195580 195680 195804 195928 196191 196276 116/day
Pear (PHP) 602 602 602 602 602 602 602 0/day
Perl 6 Ecosystem (perl 6) 1204 1205 1206 1207 1209 1210 1212 1/day
PyPI 152163 152282 152404 152544 152576 152689 152788 104/day
Rubygems.org 146387 146408 146434 146460 146496 146527 146548 27/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.