Create and check META6.json files and module skeletons.
Branch: master
Clone or download
Type Name Latest commit message Commit time
Failed to load latest commit information.
bin modulify project Apr 6, 2017
example show how to use as a module Apr 6, 2017
lib/META6 fix license identifier Sep 23, 2017
t remove test noise Aug 2, 2017
.travis.yml speed up travis Sep 23, 2017
META6.json use a Git::Config that doesn't got failing tests May 8, 2018 allow project directory prefix to be set via config file Aug 2, 2017


Build Status

Create and check META6.json files and module skeletons.

Depends on git and curl in $PATH and got a timeout of 60s for each call to both. Those are used to setup a git and github repo.

Module skeletons include basic directories, META6.json, t/meta.t, .travis.yml and a The latter includes a link to travis-ci.


meta6 --create --name=<project-name-here> --force
meta6 --check
meta6 --create-cfg-dir --force
meta6 --new-module=<Module::Name::Here> --force --skip-git --skip-github
meta6 --fork-module=<Module::Name::Here>
meta6 --add-dep=<Module::Name::Here:ver<1.2.3>>
meta6 --pull-request
meta6 --issues --module=<Optional::Module::Name> --closed --one-line --url --deps --verbose
meta6 --set-license="license name or URL"
meta6 --add-author="Another T. Author <>"

Use as a Module

use v6.c;

use META6::bin :HELPER;

    say "checking URL: ⟨$_⟩";


General Options

--meta6-file=<path-to-META6.json> # defaults to ./META6.json

Create Options

--version # defaults to 0.0.1
--perl # defaults to 6.c
--author # defaults to user/name from ~/.gitconfig
--auth # defaults to credentials/username from ~/.gitconfig

New Module Options

--description="some text" # added both META6.json and
--base-dir # the $*CWD for all local file operations

Will create a new module project in a new directory with a name prefixed with create.prefix (default perl6-), setup git, push it to github (See Github below). The skeleton from the config dir ~/.meta6 will be applied (see Config Dir below).

Fork Module Options

--fork-module=<Module::Name::Here> # module name as to be found in the ecosystem

This will seach a module by name in the ecosystem. If it's a github repo that repo will be forked and cloned to the local FS. If there is a but no t/meta.t, the file and its dependancy will be added and commited to the local git repo.

Pull Request Options

--title=`git log|head 1` # defaults to last commit message
--head=master # branch in your fork
--base=master # branch in upstream repo
--repo-name # defaults to repo name provided in

Pull request need to tell github where to create the PR at. That in turn requires a proper META6.json to get the repo name from.

Config Dir

The config dir resides at ~/.meta6 and holds a folder called skeleton for additional files to be copied into any new project. This is where you put your default LICENSE or alternate .gitignore.

The config dir, a default meta6.cfg and its default subdirs are created with --create-cfg-dir.

Any executable under pre-create.d, post-create.d and post-push.d are sorted and executed with a timeout of 60 seconds each. Files that end in ~ are filtered out.

The config directory can hold a github-token.txt file that is used to help curl to connect to github. The token needs the scopes repo, user/read:user and user/email. Please note that git itself can handle a ~/.netrc-file and github will accept a token instead of a password.


To be able to talk to github your git-config requires a section as follows.

    username = your-github-username