Declarative configuration spec for Haskell projects

Version on this page:
LTS Haskell 12.22:
Stackage Nightly 2018-12-15:
Latest on Hackage:

See all snapshots etc appears in

MIT licensed by Roman Gonzalez
Maintained by

Module documentation for

There are no documented modules for this package.


etc gathers configuration values from multiple sources (cli options, OS environment variables, files) using a declarative spec file that defines where this values are to be found and located in a configuration map.

For more information about etc API and how to use it, see the etc homepage

Changes (Release Candidate)

  • Add parseConfigSpecTH functionality, now we can parse the ConfigSpec record at compilation time (closes #47)
  • Remove bug on CLI option parser, now it will coerce numbers and booleans to string when specifying numbers and booleans over CLI and the field type is a string (closes #48)
  • Improve Error Types to be more granular and descriptive
  • Re-organize Spec parser functions in its own module
  • Add switch input for CLI spec (closes #41)

  • Remove bug that stop configuration to be rendered when a default value was an empty array

  • Improvement around unhelpful error being thrown when CLI Config Map didn’t contain a value on a required (by code) field

  • Improve pretty printer for configuration values (closes #32)


  • Add new type field to etc/spec with support for string, number, bool, [string], [number] and [bool], [object]
  • Remove type field in cli spec in favor of type on etc/spec
  • Allow ENV vars to accept supported types (only strings were allowed) (closes #30)
  • Allow CLI options to accept supported types (only strings and numbers were allowed)
  • Allow spec file to have array as default values
  • Return a warning and an empty config whenever configuration files contain entries not defined in the spec (closes #26)

  • Upgrade to rio to version

  • Add new etc/files entry to the spec file which allows to specify an environment variable to fetch a file


  • Bump resolver to lts-11
  • Replace protolude in favor of rio
  • Update parseConfigSpec to no longer attempt to parse JSON when yaml cabal flag is set
  • Add sensitive setting to etc/spec entries
  • Add Value type to deal with sensitive values
  • Update examples with sensitive values
  • Add optional key context to the InvalidConfiguration error (issue #12)
  • Add config printer function that renders config map with/without colors (issue #15)
  • Give precedence to values that do not contain inner JSON.Null values (issue #16)

  • Move Config API to typeclass IConfig
  • Add a Setup.hs file to every hachage repo (issue #5)
  • Add example of a project with a config spec embedded in the binary

  • Add support for null values on Default (issue #3)
  • If cli cabal flag is false, have parseConfigSpec return ConfigSpec () instead of ambiguous FromJSON value (issue #3)
  • Bump aeson dependency to <1.3

  • Rename System.Etc.Internal.Util module to System.Etc.Internal.Extra
  • Rename cabal flag from printer to extra
  • Add feature for Environment Variable misspelling reports
  • Add misspelling reports to example projects
  • Improvements on README

  • Various changes to source code to comply with previous resolvers
    • Use Monoid instead of Semigroup
    • Remove unused imports/typeclasses
  • Bump upper limits for aeson and vector
  • Improve typos
Used by 1 package:
comments powered byDisqus