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
Oct 10 Oct 11 Oct 12 Oct 13 Oct 14 Oct 15 Oct 16 Avg Growth
Clojars (Clojure) 22714 22717 22723 22729 22737 22764 22790 11/day
CPAN 39036 39038 39042 39043 39044 39045 39046 2/day
CPAN (search) 5/day
CRAN (R) 13168 13170 13170 13181 13181 13203 13206 6/day
Crates.io (Rust) 19138 19167 19197 19222 19299 19319 19348 33/day
Crystal Shards 3777 3780 3781 3788 3790 3794 3797 4/day
Drupal (php) 41628 41639 41645 41651 41653 41657 41669 8/day
DUB (dlang) 0/day
Gopm (go) 21000 21011 21012 21014 21025 21029 21036 6/day
Hackage (Haskell) 13128 13130 13132 13134 13139 13141 13145 3/day
Hex.pm (Elixir/Erlang) 7074 7081 7089 7092 7099 7104 7114 6/day
Julia 1906 1906 1906 1906 1906 1906 1906 0/day
LuaRocks (Lua) 1/day
Maven Central (Java) 251452 251594 251771 251861 251925 252005 252143 117/day
MELPA (Emacs) 3971 3971 3971 3971 3978 3977 3979 1/day
Nimble (Nim) 791 793 795 796 796 798 799 1/day
npm (node.js) 707276 707903 708500 708795 709291 709843 710430 539/day
nuget (.NET) 129348 129504 129639 129785 129858 129949 130054 111/day
Packagist (PHP) 198275 198405 198547 198643 198707 198810 198933 114/day
Pear (PHP) 602 602 602 602 602 602 602 0/day
Perl 6 Ecosystem (perl 6) 1228 1229 1230 1231 1231 1232 1232 1/day
PyPI 154681 154795 154941 155036 155124 155223 155335 114/day
Rubygems.org 146973 146994 147015 147033 147051 147084 147129 26/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.