All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/)
and this project adheres to [Semantic
## [3.0.1] - 2020-11-12
- `.read` now uses `%!data.clone`, instead of `%!data`. This should fix an
issue where the `Hash` used is shared between the objects, resulting in
## [3.0.0] - 2020-07-12
`Config` has been rebuilt from the ground up. This is a relatively old
project of mine, which I used to get into Raku. I've learned many new things
in the past couple years, many things of which have been applied to this
Much of the user-facing interface is the same, however, breaking some backwards
compatibility was inevitable with some of the new ways I wanted `Config` to
function. Please read through this CHANGELOG carefully, and consider reading
the documentation if you encounter issues. If you have any questions or
remarks, you can also send an email to `~email@example.com`.
- `.new` now (optionally) accepts a `Hash` which will be used as a template.
From this template, environment variables will be checked for existence, and
used if they exist. You must also set a `:name` attribute, which will be used
as a prefix for all the variables. This should make it easier to include
environment variable based configuration in applications.
Additionally, if the `:name` attribute is set, a number of standard
directories will be probed to see if there's a usable configuration file to
read. Which directories to probe is based on the [XDG Base Directory
Both environment and XDG-path based auto-loading of configuration can be
turned off with `:!from-env` and `:!from-xdg` respectively.
- [`Log`](https://modules.raku.org/dist/Log:cpan:TYIL) is now included to
provide some debug logging. Any application using this will get logging in
their preferred format through this.
- The `Config` object is now immutable. Calling methods that alter the
configuration values (such as `.read`, `.set`, `.unset`) will now return a
new `Config` object. Raku has a very pretty [`.=`
operator](https://docs.raku.org/language/operators#infix_.=) that may come in
- The `Exception` classes are now in `X::Config`, and the redundant `Exception`
suffix has been removed.
- When setting an explicit parser, the parser must be given as a type object,
instead of a `Str`. This will lead to potential issues being known at
compile-time, rather than runtime.
- `Config`'s license has changed from `AGPL-3.0` to `LGPL-3.0-only`. The Lesser
General Public License allows use of `Config`, even in closed code bases.
This should make the module more usable for all sorts of people, while still
maintaining a strong focus on keeping it Free Software.
## [2.1.0] - 2018-08-26
- `.clone` method now exists to create a clone of the Config object.
## [2.0.0] - 2018-08-26
- `.read` will now return the `Config` object, instead of a `Bool`.
## [1.3.5] - 2018-03-28
- `api` key to META6.json
- Update dependency to `Hash::Merge` to use `api` and `version` adverbs
- Lingering say statement in get-parser, breaking tests for Rakudo Star users
- Useless `use lib "lib"` statements from tests
- Useless dd statement from tests
## [1.3.3] - 2018-03-20
- A CHANGELOG is now present to keep track of changes between versions
- Fix `:delete` adverb