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
Apr 19 Apr 20 Apr 21 Apr 22 Apr 23 Apr 24 Apr 25 Avg Growth
Clojars (Clojure) 21581 21592 21599 21602 21608 21615 21621 7/day
CPAN 36318 36320 36323 36325 36334 36336 36338 3/day
CPAN (search) 36318 36320 36323 36325 36334 36336 36339 3/day
CRAN (R) 12507 12507 12506 12507 12516 12525 12535 5/day
Crates.io (Rust) 15321 15346 15364 15375 15392 15413 15432 18/day
Crystal Shards 3068 3070 3071 3075 3083 3087 3087 3/day
Drupal (php) 40347 40356 40360 40360 40361 40351 3/day
DUB (dlang) 1279 1280 1280 1284 1284 1284 1285 1/day
Gopm (go) 20157 20157 20158 20160 20161 20161 20172 2/day
Hackage (Haskell) 12535 12535 12538 12543 12546 12548 12553 3/day
Hex.pm (Elixir/Erlang) 6191 6197 6203 6206 6214 6217 6221 5/day
Julia 1813 1819 1819 1826 1826 1827 1827 2/day
LuaRocks (Lua) 1773 1774 1784 1790 1791 1792 1795 4/day
Maven Central (Java) 229359 229511 229622 229657 229774 229880 230085 121/day
MELPA (Emacs) 3789 3789 3805 3806 3815 3815 3815 4/day
Nimble (Nim) 649 649 650 650 650 650 655 1/day
npm (node.js) 617612 618195 618668 619070 619670 620156 620827 536/day
nuget (.NET) 110701 110827 110900 112133 112220 112317 112379 280/day
Packagist (PHP) 183999 184168 184308 184401 184552 184690 184854 142/day
Pear (PHP) 602 602 602 602 602 602 602 0/day
Perl 6 Ecosystem (perl 6) 1083 1083 1082 1083 1084 1086 1091 1/day
PyPI 93/day
Rubygems.org 142532 142586 142617 142646 142687 142717 142745 35/day
Vim Scripts 5533 5533 5533 5535 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).

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

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