All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
[0.1.0] - 2026-07-31
Added
CooperConfig.Provider, aConfig.Providerimplementation that loads a CASC file viaCooper.load_file/2at release boot and merges it into the release's app config, replacingconfig/runtime.exsfor the settings it covers.CooperConfig.Convert.to_app_config/2, converting aCooper-loaded value (string-keyed maps) into the[app: [key: value, ...]]shapeApplication/Config.Providerexpect, deep-converting nested maps into keyword lists soConfig.Reader.merge/2can merge them against existing config the same way multipleconfig.exsfiles merge.CooperConfig.Providernow accepts:dotenv/:dotenv_env/:dotenv_files, passed straight through toCooper.load_file/2(cooper0.2.0's new.envfile support).CooperConfig.load!/2, for loading a CASC file (config/config.cascby default) as the first line of your own application'sApplication.start/2-- the equivalent ofProviderformix run/iex -S mix/mix test, whereConfig.Providernever runs at all. UnlikeProvider, this loads withCooper.load_file/2's default cache, since:cooperhas already started by the time it's safe to call.
Changed
- Bumped the
cooperdependency to~> 0.2.0.CooperConfig.Providernow always loads withcache: false--cooper0.2.0 cachesCooper.load_file/2by default via aCooper.CacheGenServer/ETS table started bycooper's own OTP application, which isn't running yet whenConfig.Providercallbacks execute (they run before the release's own supervision tree starts, same reason a load failure raises instead of retrying -- see the moduledoc's "Errors" section); reaching for that cache here would crash, not just be pointless for a file read once per boot. - Note for anyone passing
:envexplicitly:cooper0.2.0 changed it from a full replacement ofSystem.get_env/0to an override layer on top of it (seecooper's own CHANGELOG for the full precedence chain) -- a${...}reference to a name not given an explicit:enventry now falls through to the real environment/.envfiles instead of being undefined.