The CPAN Unknown Usage problem

To help CPAN authors keep track of who is using their modules, we could introduce two concepts: "follow module" and "I'm using this module". Both would be similar to the 'following' and +1 features found in nearly all social media services, and ++ in MetaCPAN.

One of the problems for most CPAN authors is that you've no idea how many people, if any, are using your module. This can be an issue if you're thinking of changing the interface, or perhaps thinking of just deleting it from CPAN.

I've seen a number of suggestions saying that the number of downloads should be shared, but there are a number of problems with this, not least that the CPAN testers would skew your figures, and plenty of people download modules but then never use them.

"I'm using module Foo::Bar"

You would mark a module as being used (for example MetaCPAN could display an "I'm using this" link next to the module). All modules would have a "registered user count" tally held for them, which would be public.

  • You would explicitly say that you're using particular modules.
  • Their dependencies would be marked as implicitly used by you. These can change as the dependencies change.
  • Marking a module as "being used" would implicitly "follow" the module, as described below.

Having recorded that you're using a module, you could specify communication preferences: whether you're happy to receive email from the module author. The author would be able to send email to everyone who's signed up for this, for example with suggestions for an API change, soliciting feedback. By default the author wouldn't know the individual email addresses.

Following a module

Following a module would be similar, but you wouldn't be counted as a user:

  • Following would not be inherited by dependencies, unlike Using.
  • Maybe you could ask to be emailed the relevant section from Changes whenever a new version is released, but perhaps more useful would be including this in a personal MetaCPAN RSS feed.

How is this different from MetaCPAN's ++? I think the ++ is more of a "I like this module", but doesn't imply usage, and doesn't necessarily imply interest in following.

The downside of "follow" and "I'm using" as buttons displayed against a module is that they'd muddy the concept of ++, and people might be more likely to bother clicking on ++, but not on "follow" or "I'm using". The upside is that they give data with a much clearer interpretation, even though you'd miss a lot of users.

For all the reviews I've written, I generally end up using one or two of the modules, but would follow all of the others.

Following a CPAN Author

Olaf suggested we might want to think about following an author as well.

Following an author would trigger an automatic follow on any modules released by the author.

This needs a bit of thought with respect to the PAUSE permissions model: if you follow someone, and they're the owner of a module, then you probably want to be informed. But what if they're co-maint on a module owned by someone else, and do a release of that — should you be informed? Probably. Should you be informed if someone else subsequently does a release? Probably not.


This would essentially let you configure a personal RSS feed for CPAN. This would include news related to the modules and authors you're following.

Other things I'd like to be able to include in my CPAN news feed:

  • Optionally include all new modules. Even better would be the ability to say "but don't include anything in Acme::* or Take::BeLike::*
  • When following an author, if the author has told MetaCPAN about their perl blog, then this could be included as well. That way you could follow a bunch of module authors, and if they start blogging, then you'd transparently start seeing their posts.

This would be a single RSS feed for CPAN news. Perhaps going beyond the scope of MetaCPAN, but I think this would be a real hook.

Where does this fit?

MetaCPAN is the obvious place to put this, but another option is a separate service queried by MetaCPAN and used by the CPAN shell, cpanm, etc.


It'd be nice to have a [Follow] button on MetaCPAN (or a similar website), where I can explicitly say that I am interested to get updates about some CPAN module. I also don't mind some additional [Bookmark], [Like] (already exists in the form of [++]?), etc.

But IMO usage/installation stats is better provided by CPAN clients. MetaCPAN could then display the data provided by these clients.

Ideally there should be separate download/install stats.

BTW, a more generic feature would be listmania lists (or wishlists), where users can build one or more lists of modules (but also dists, authors, releases). Each list has a name/label, and it'd be nice if each item in the list can have user-supplied comment/description. Each list and item should also have a create/entry date.

Ideally other users can [Like] or comment on each list/item.

Some examples:

"Modules I'm using for project X":
  - Foo::Baz (I'm using this instead of Foo::Bar because blah)
  - Acme::X
  - Acme::Y (not really used right now, but blah)

"Modules to avoid":
- Qux (very very slow)
- Quux (even slower than Qux, hard to believe)

"My favorite authors":

"Modules to use in the future"

"Modules which I would like to use but can't"

"Modules that load other modules"

Some of this could be solved with tags and as far as the concept of following goes, we could also put together a newsfeed, which is maybe a bit like what you see on your Github page. So, you'd see release activities for modules you care about maybe on the MetaCPAN home page. (Just thinking out loud). If we introduced the concept of following authors you could then introduce all author activity into a news feed.

++ is really a pared down first pass at getting some relevant user data, so it's good talk about how we can improve on it.

In addition, marking a module as being followed would put all changes/releases to that module into a personalized RSS feed from or metacpan.

Here's a Perl equivalent of Debian's "popcon":

Now we just need a web service to pump the data to and analyse it. :-)

(I suppose we should also reduce that script's non-core deps to avoid skewing results towards the "aliased", "JSON", "Path-Tiny" and "Path-Iterator-Rule" distributions!)

I have a rudimentary web service now using Bitcard for login. I'll report back shortly.

Leave a comment

About Neil Bowers

user-pic Perl hacker since 1992.