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 15 Oct 16 Oct 17 Oct 18 Oct 19 Oct 20 Oct 21 Avg Growth
Clojars (Clojure) 31431 31433 31434 31435 31437 31438 31440 1/day
CPAN 45412 45412 45414 45416 45416 45417 45420 1/day
CPAN (search) 5/day
CRAN (R) 21495 21501 21517 21528 21529 21529 21544 8/day
Crates.io (Rust) 160287 160400 160560 160651 160668 160767 160863 96/day
Crystal Shards 2/day
Drupal (php) 52355 52365 52379 52383 52391 52393 52394 6/day
DUB (dlang) 2493 2494 2495 2495 2495 2496 2497 1/day
Gopm (go) 22377 22377 22377 22377 22377 22377 22377 0/day
Hackage (Haskell) 17964 17966 17967 17967 17967 17968 17971 1/day
Hex.pm (Elixir/Erlang) 16822 16826 16829 16833 16837 16846 16853 5/day
Julia 0/day
LuaRocks (Lua) 4738 4740 4741 4741 4742 4743 4743 1/day
Maven Central (Java) 629584 629750 629910 630063 630130 630329 630376 132/day
MELPA (Emacs) 2/day
Nimble (Nim) -1/day
npm (node.js) 3361070 3362072 3362915 3363782 3362576 3361824 3362693 270/day
nuget (.NET) 421776 421818 421921 422106 422269 422359 422473 116/day
Packagist (PHP) 408238 408333 408419 408504 408557 408602 408673 72/day
Pear (PHP) 603 603 603 603 603 603 603 0/day
Perl 6 Ecosystem (perl 6) 200 200 200 200 200 200 200 0/day
PyPI 201/day
Rubygems.org 182720 182733 182746 182760 182775 182783 182794 12/day
Vim Scripts 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.