A GUI for CPAN::Mini

After having read yet another tutorial about CPAN::Mini, I once again had the same thoughts:

  • CPAN::Mini is so cool
  • Imagine the use together with CPAN::Mini::Inject and Stratopan!
  • Damn, a configuration file. Where to put it? How do I find it again a month later when I forgot about my minicpan setup? Putting it just somewhere is like undocumented source code. And Windows + configuration files?? WTF!
  • Why can't it just be one of those nifty nice-looking applications like the Github for Windows - simple, easy to use, beautiful? With installers and start menu entries?

This time, I tried to change it. Having thought about it every time I read a post about CPAN::Mini, I was prepared a bit. I planned a feature set that could be completed eventually some day in the future. The result is a working GUI where CPAN::Mini can be configured and executed.

Have a look:

Here you start when the application starts. Some (hopefully) sane defaults were configured to you should be find by just pressing the button. The wheel is spinning while minicpan is creating your personal mirror. It stops when it's done.


The most important part - where to get the modules and where to put them - got it's own page. It's kind of: "don't look further if you don't have to".


Most of the CPAN::Mini options can be configured in the Mirror Options section:


And of course you can add module and path filters. NB: the modules in this screenshot are not the defaults. The form is always visible. No extra clicking to get a dialog where you can enter something. Clicking a module in the list will fill the form so that the filter can be edited. There is even more usability-candy: hitting the delete when a filter is selected removes it. The HList is a Tk::Treeplus - try to sort, filter, resize columns - it can do it. It's all there on CPAN, sometimes it's just a bit difficult to find it.


I noticed that CPAN::Mini prints to STDOUT which is kind of hard to collect and to show it in the GUI. It would be cool to have the possibility to specify my own listener. Also, as usual, Tk + threading was a real pain - mostly because I didn't find the example code on the web again.

To make the project a bit more challenging, the application is a Moose class. So it's Moose, Tk, and threads. And it is working! There even is SQLite and DBIx::Class, because I didn't find a suitable read and write configuration file mechanism.

Now, only an appropriate installer is missing. I want to have it as an application in the start menu to be able to find it again. I also want to provide the possibility to remove it again from the computer using the control panel. It's kind of a standard thing I expect from software. And I have to decide whether to ship Perl and the source code or to ship a compiled executable (yes, it compiles and works fine).

So, what do you think about it?


Hi Alex

Looks good.

For ignore_source_control, I would have called it preserve_cvs_files or preserve_source_control or some such.

Also, I would capture STDOUT with Capture::Tiny, and just echo it verbatim.

Good use for a GUI, and it looks good too!

I love this! Where is the source so I can try it? :-)

Oh, in case you're interested, there was some discussion about making a web-driven installer work with MetaCPAN. I'm sure this would be possible with the installation of a GUI and protocol handler.

Leave a comment

About Alex

user-pic I like Perl.