Skip to content


Subversion checkout URL

You can clone with
Download ZIP
Search code on CPAN with Regexps
Perl CSS Perl6 Shell
Branch: master
Failed to load latest commit information.
bin If argument is given use it as job option
etc Add haproxy configs
lib/WWW Drop cache if we have trouble opening files
t Avoid /g on s///, fixes search parser
tools Kill cpangrep-matcher too
var Hide dump.rdb
Makefile.PL Need namespace::autoclean
README.pod Add a note on deployment, mostly as an excuse to try it
app.psgi Support running outside of pwd
debug.psgi About a year worth of misc changes which I should have put into git
full-reindex Add hacky full-reindex script



This is the code behind Unless you want to add something you probably want to use the site, not try and install this ;-)

The default development configuration will index a sample CPAN from fakecpan. Indexing the whole CPAN doesn't take long, although you'll need around 4GB of RAM spare to get a decent level of performance.

Quick start

For a very quick development setup you should be able to:

  • Ensure you have Perl 5.14 or later
  • Install redis

    You just need a redis-server binary around, run-test below will start it for you.

  • Run the following:
      cpanm --installdeps .
  • Visit http://localhost:5000
  • Hack!

    Starman will pick up changes automatically, so web frontend changes should be picked up right away.


If you want to work on the indexing or other aspects you might need to run these, to start with run-test may well be enough though.

  • cpangrep-index

    Run this to start with:

      bin/cpangrep-index [--cpan_dir /path/to/cpan --slab_dir /data/cpangrep/extract]

    If you omit the --cpan_dir and --slab_dir options you'll get the fakecpan configured in etc/config and shipped with this.

  • WWW::CPANGrep

    The web frontend. Run with:

      starman -Ilib lib/WWW/

    (or other plack server.)

    There's also a version that wraps this in Plack::Debug in debug.psgi.

  • cpangrep-matcher

    Backend workers that do the matching, based on a redis queue. This should be running along with the web frontend, all the time:

  • Redis

    A Redis server (or several for the live version) are used for queuing jobs and also resolving matches.


Currently the "live" tag refers to the version that is live. To push a new version:

  git tag -f live
  git push --tags

(See the handler for /githook for how this works.)

Something went wrong with that request. Please try again.