mbtiny - A standalone authoring script for Module::Build::Tiny


version 0.029


 mbtiny listdeps | cpanm
 mbtiny test --release
 mbtiny dist


Essentially mbtiny does only one thing: generate the ancillary files of a distribution with App::ModuleBuildTiny. To be more exact, it can generate:

  • Build.PL

    This contain the code needed to build the dist using Module::Build::Tiny.


    This contains the list of files in this distribution, and optionally descriptions.

  • META.json

    The file containing most meta information about this distributions. Useful for both presenting information to the user as for installing the distribution.

  • META.yml

    This is the legacy meta file. This is mainly useful for bootstrapping on CPAN clients too old to support META.json but recent enough to support configure_requires.

The information for these files is gathered from various sources.

  • The distribution name is taken from the local directory name.

  • The version, abstract and author are taken from the main module of the distribution.

  • The license is extracted from the POD, unless a metamerge file overrides this

  • Prerequisites are mostly taken from a cpanfile, prereqs.json, or prereqs.yml (whichever is present), except when injected explicitly (e.g. a configure dependency on Module::Build::Tiny).

     # cpanfile
     requires 'perl' => '5.012';
     requires 'Path::Tiny';
     recommends 'Term::ReadLine::Gnu';
     on test => sub {
       requires 'Test::More' => '0.88';
     # prereqs.yml
         perl: '5.012'
         Path::Tiny: 0
         Term::ReadLine::Gnu: 0
         Test::More: '0.88'
  • A metamerge.json or metamerge.yml file can be used to merge any additional meta information you want (including dependencies). It is assumed to be in meta-spec 2 format unless otherwise specified.

     # metamerge.yml
         web: ''
       homepage: ''
       x_IRC: 'irc://'


It supports two different workflows, which I call Feedback and Generator. In both cases, additional tools are used for various other authoring tasks such as perl-reversion, scan-prereqs-cpanfile and cpan-upload.


In this workflow you're commiting the generated files to the filesystem/repository, in particular using the regenerate command.


In this workflow the generated files aren't written back to the file system, instead they are generated on every mbtiny command.


  • test

    This runs all of the tests of a distribution. It takes two options that can both be negated:

    • release

      Run release tests. Defaults to false.

    • author

      Run author tests. Defaults to true.

  • run

    Run the specified command in a build distribution. It takes one boolean argument:

    • no-build

      This will cause mbtiny not to build the distribution before running the command.

  • upload

    This builds a tarball and uploads it to CPAN.

    Using a Config::Identity compatible .pause file in your home directory is recommended, but if it's absent or incomplete your credentials will be asked on the console.

  • shell

    Runs the $SHELL, this is equivalent to mbtiny run --no-build $SHELL. It takes one argument.

    • build

      This will cause mbtiny to build the distribution before running the shell.

  • dist

    This creates a distribution tarball.

  • distdir

    This creates a directory containing all of the files of the distribution.

  • listdeps

    List all dependencies of this distribution. By default it prints a list of modules. If the json option option is given, it's printed as JSON instead.

  • regenerate <files>

    This regenerates the given files. If no files are given, it defaults to the six files it can regenerate: Build.PL, MANIFEST, META.json META.yml, LICENSE and README. You usually want to do this after bumping the version of a module, adding a dependency or adding a file.

  • mint <distribution>

    This creates a new distribution. It takes one mandatory positional argument, the name of the new distribution, and up to five optional named arguments

    • abstract

      The abstract of this new distribution. It defaults to an empty string.

    • author

      The name of the author of this distribution. The default value is set in the configuration file.

    • dirname

      The directory name for the new distribution. It defaults to the distribution name.

    • email

      The email address of the author. The default value is set in the configuration file.

    • license

      The license of the new distribution. It default is set in the configuration file, this is usually Perl_5.

    • version

      The initial version of the new distribution. This defaults to 0.001.

  • configure <type>

    This creates or update your configuration file (at ~/.mbtiny/config). It takes one optional position argument that can take any of the following values:

    • update

      This asks you about all configuration items that are currently empty. This is the default.

    • all

      This asks you about all configuration items, even if they currently have a value.

    • reset

      This removes the current configuration file.