A clever, heirarchical config loader for Perl6
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Type Name Latest commit message Commit time
Failed to load latest commit information.
t Fix removed @*INC Dec 5, 2015
LICENSE.txt Add a license file Oct 18, 2015
META6.json Use SPDX identifier in license field of META6.json Apr 28, 2017
README.md Update README.md Nov 16, 2015



A clever, heirarchical config loader for perl6.

Build Status

Config files

Config::Clever.load takes a String environment parameter and loads json files from the config/ directory. The json objects are loaded and merged together in the following order:

  • default.json
  • <environment>.json
  • local-<environment>.json

Calling Config::Clever.load without any parameters will use default as the environment. You can also supply a path to another config directory:

my %config = Config::Clever.load(:environment("staging"), :config-dir("./my/weird/path"));


Imagine we have a directory config, with two files: default.json and development.json.

// default.json
    "db": {
        "host": "localhost",
        "port": 27017,
        "user": null,
        "password": null,
        "auth": false
    "logLevel": "DEBUG"

// development.json
    "db": {
        "user": "apprunner",
        "password": "a_terrible_password",
        "auth": true

If we call Config::Clever.load, with "development" as the environment, we'll get a hash which consists of the data from development.json merged on top of the data in default.json.

use v6;
use Config::Clever;

my %config = Config::Clever.load(:environment('development'));
say %config
# %config is a hash equivalent to:
#   {
#       "db": {
#           "host": "localhost",
#           "port": 27017,
#           "user": "apprunner",
#           "password": "a_terrible_password",
#           "auth": true
#       },
#       "logLevel": "DEBUG"
#   }


  • more tests
  • support more file formats such as ini, yaml and toml