confita alternatives and similar packages
Based on the "Configuration" category.
Alternatively, view confita alternatives based on common mentions on social networks and blogs.
-
koanf
Simple, extremely lightweight, extensible, configuration management library for Go. Supports JSON, TOML, YAML, env, command line, file, S3 etc. Alternative to viper. -
konfig
Composable, observable and performant config handling for Go for the distributed processing era -
gookit/config
📝 Go configuration manage(load,get,set,export). support JSON, YAML, TOML, Properties, INI, HCL, ENV and Flags. Multi file load, data override merge, parse ENV var. Go应用配置加载管理,支持多种格式,多文件加载,远程文件加载,支持数据合并,解析环境变量名 -
gcfg
read INI-style configuration files into Go structs; supports user-defined types and subsections -
goConfig
DISCONTINUED. goconfig uses a struct as input and populates the fields of this struct with parameters from command line, environment variables and configuration file. -
joshbetz/config
🛠 A configuration library for Go that parses environment variables, JSON files, and reloads automatically on SIGHUP. -
configuro
An opinionated configuration loading framework for Containerized and Cloud-Native applications. -
hocon
go implementation of lightbend's HOCON configuration library https://github.com/lightbend/config -
configure
Configure is a Go package that gives you easy configuration of your project through redundancy -
Genv
Genv is a library for Go (golang) that makes it easy to read and use environment variables in your projects. It also allows environment variables to be loaded from the .env file. -
swap
Instantiate/configure structs recursively, based on build environment. (YAML, TOML, JSON and env).
InfluxDB high-performance time series database

Do you think we are missing an alternative of confita or a related project?
README
Confita is a library that loads configuration from multiple backends and stores it in a struct.
Supported backends
- Environment variables
- JSON files
- Yaml files
- Toml files
- Command line flags
- etcd
- Consul
- Vault
- Amazon SSM
Install
go get -u github.com/heetch/confita
Usage
Confita scans a struct for config
tags and calls all the backends one after another until the key is found.
The value is then converted into the type of the field.
Struct layout
Go primitives are supported:
type Config struct {
Host string `config:"host"`
Port uint32 `config:"port"`
Timeout time.Duration `config:"timeout"`
}
By default, all fields are optional. With the required option, if a key is not found then Confita will return an error.
type Config struct {
Addr string `config:"addr,required"`
Timeout time.Duration `config:"timeout"`
}
Nested structs are supported too:
type Config struct {
Host string `config:"host"`
Port uint32 `config:"port"`
Timeout time.Duration `config:"timeout"`
Database struct {
URI string `config:"database-uri,required"`
}
}
If a field is a slice, Confita will automatically split the config value by commas and fill the slice with each sub value.
type Config struct {
Endpoints []string `config:"endpoints"`
}
As a special case, if the field tag is "-", the field is always omitted. This is useful if you want to populate this field on your own.
type Config struct {
// Field is ignored by this package.
Field float64 `config:"-"`
// Confita scans any structure recursively, the "-" value prevents that.
Client http.Client `config:"-"`
}
Loading configuration
Creating a loader:
loader := confita.NewLoader()
By default, a Confita loader loads all the keys from the environment. A loader can take other configured backends as parameters.
loader := confita.NewLoader(
env.NewBackend(),
file.NewBackend("/path/to/config.json"),
file.NewBackend("/path/to/config.yaml"),
flags.NewBackend(),
etcd.NewBackend(etcdClientv3),
consul.NewBackend(consulClient),
vault.NewBackend(vaultClient),
)
Loading configuration:
err := loader.Load(context.Background(), &cfg)
Since loading configuration can take time when used with multiple remote backends, context can be used for timeout and cancelation:
ctx, cancel := context.WithTimeout(context.Background(), 5 * time.Second)
defer cancel()
err := loader.Load(ctx, &cfg)
Default values
If a key is not found, Confita won't change the respective struct field. With that in mind, default values can simply be implemented by filling the structure before passing it to Confita.
type Config struct {
Host string `config:"host"`
Port uint32 `config:"port"`
Timeout time.Duration `config:"timeout"`
Password string `config:"password,required"`
}
// default values
cfg := Config{
Host: "127.0.0.1",
Port: "5656",
Timeout: 5 * time.Second,
}
err := confita.NewLoader().Load(context.Background(), &cfg)
Backend option
By default, Confita queries each backend one after another until a key is found. However, in order to avoid some useless processing the backend
option can be specified to describe in which backend this key is expected to be found.
This is especially useful when the location of the key is known beforehand.
type Config struct {
Host string `config:"host,backend=env"`
Port uint32 `config:"port,required,backend=etcd"`
Timeout time.Duration `config:"timeout"`
}
Command line flags
The flags
backend allows to load individual configuration keys from the command line. The default values are extracted from the struct fields values.
A short
option is also supported.
To update usage message on the command line, provide a description
to the given field.
type Config struct {
Host string `config:"host,short=h"`
Port uint32 `config:"port,short=p"`
Timeout time.Duration `config:"timeout,description=timeout (in seconds) for failure"`
}
./bin -h
Usage of ./bin:
-host string
(default "127.0.0.1")
-h string
(default "127.0.0.1")
-port int
(default 5656)
-p int
(default 5656)
-timeout duration
timeout (in seconds) for failure (default 10s)
License
The library is released under the MIT license. See LICENSE file.
*Note that all licence references and agreements mentioned in the confita README section above
are relevant to that project's source code only.