Popularity
5.8
Growing
Activity
7.4
Growing
288
5
21

Programming language: Go
License: MIT License
Tags: Configuration    
Latest version: v0.10.0-alpha

aconfig alternatives and similar packages

Based on the "Configuration" category.
Alternatively, view aconfig alternatives based on common mentions on social networks and blogs.

Do you think we are missing an alternative of aconfig or a related project?

Add another 'Configuration' Package

README

aconfig

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

Simple, useful and opinionated config loader.

Rationale

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.

Features

  • 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.

Install

Go version 1.14+

go get github.com/cristalhq/aconfig

Example

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 spf13/cobra playground.

Documentation

See these docs.

License

[MIT License](LICENSE).


*Note that all licence references and agreements mentioned in the aconfig README section above are relevant to that project's source code only.