Need help with aconfig?
Click the “chat” button below for chat support from the developer who created it, or find similar developers for support.

About the developer

177 Stars 9 Forks MIT License 88 Commits 2 Opened issues


Simple, useful and opinionated config loader.

Services available


Need anything else?

Contributors list


build-img pkg-img reportcard-img coverage-img

Simple, useful and opinionated config loader.


There are many solutions regarding configuration loading in Go. I was looking for a simple loader that will as much as possible and be easy to use and understand. The goal was to load config from 4 places: defaults (in the code), files, environment variables, command-line flags. This library works with all of this sources.


  • Simple API.
  • Clean and tested code.
  • Automatic fields mapping.
  • Supports different sources:
    • defaults in the code
    • files (JSON, YAML, TOML, DotENV, HCL)
    • environment variables
    • command-line flags
  • Dependency-free (file parsers are optional).
  • Ability to walk over configuration fields.


Go version 1.14+

go get


type MyConfig struct {
    Port int `default:"1111" usage:"just give a number"`
    Auth struct {
        User string `default:"def-user"`
        Pass string `default:"def-pass"`
    Pass string `default:"" env:"SECRET" flag:"sec_ret"`

var cfg MyConfig loader := aconfig.LoaderFor(&cfg, aconfig.Config{ // feel free to skip some steps :) // SkipDefaults: true, // SkipFiles: true, // SkipEnv: true, // SkipFlags: true, EnvPrefix: "APP", FlagPrefix: "app", Files: []string{"/var/opt/myapp/config.json", "ouch.yaml"}, FileDecoders: map[string]aconfig.FileDecoder{ // from aconfigyaml submodule // see submodules in repo for more formats ".yaml": aconfigyaml.New(), }, })

// IMPORTANT: define your own flags with flagSet flagSet := loader.Flags()

if err := loader.Load(); err != nil { panic(err) }

// configuration fields will be loaded from (in order): // // 1. defaults set in structure tags (see MyConfig defenition) // 2. loaded from files file.json if not ouch.yaml will be used // 3. from corresponding environment variables with the prefix APP_ // 4. command-line flags with the prefix app. if they are

Also see examples: examples_test.go.

Integration with



See these docs.


MIT License.

We use cookies. If you continue to browse the site, you agree to the use of cookies. For more information on our use of cookies please see our Privacy Policy.