envconfig alternatives and similar packages
Based on the "Configuration" category.
Alternatively, view envconfig alternatives based on common mentions on social networks and blogs.
-
kelseyhightower/envconfig
Golang library for managing configuration data from environment variables -
env
A simple and zero-dependencies library to parse environment variables into structs -
koanf
Simple, extremely lightweight, extensible, configuration management library for Go. Support for JSON, TOML, YAML, env, command line, file, S3 etc. Alternative to viper. -
cleanenv
✨Clean and minimalistic environment configuration reader for Golang -
konfig
Composable, observable and performant config handling for Go for the distributed processing era -
confita
Load configuration in cascade from multiple backends into a struct -
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应用配置加载管理,支持多种格式,多文件加载,远程文件加载,支持数据合并,解析环境变量名 -
GoLobby/Config
A lightweight yet powerful configuration manager for the Go programming language -
config
JSON or YAML configuration wrapper with convenient access methods. -
gcfg
read INI-style configuration files into Go structs; supports user-defined types and subsections -
joshbetz/config
🛠 A configuration library for Go that parses environment variables, JSON files, and reloads automatically on SIGHUP. -
goConfig
goconfig uses a struct as input and populates the fields of this struct with parameters from command line, environment variables and configuration file. -
configuro
An opinionated configuration loading framework for Containerized and Cloud-Native applications. -
configuration
Library for setting values to structs' fields from env, flags, files or default tag -
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 -
uConfig
Lightweight, zero-dependency, and extendable configuration management library for Go -
CONFLATE
Library providing routines to merge and validate JSON, YAML and/or TOML files -
go-up
go-up! A simple configuration library with recursive placeholders resolution and no magic. -
go-ssm-config
Go utility for loading configuration parameters from AWS SSM (Parameter Store) -
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. -
subVars
Substitute environment variables from command line for template driven configuration files. -
swap
Instantiate/configure structs recursively, based on build environment. (YAML, TOML, JSON and env).
Collect and Analyze Billions of Data Points in Real Time
Do you think we are missing an alternative of envconfig or a related project?
Popular Comparisons
README
envconfig
envconfig is a library which allows you to parse your configuration from environment variables and fill an arbitrary struct.
See the example to understand how to use it, it's pretty simple.
Supported types
- Almost all standard types plus
time.Duration
are supported by default. - Slices and arrays
- Arbitrary structs
- Custom types via the Unmarshaler interface.
How does it work
envconfig takes the hierarchy of your configuration struct and the names of the fields to create a environment variable key.
For example:
var conf struct {
Name string
Shard struct {
Host string
Port int
}
}
This will check for those 3 keys:
- NAME or name
- SHARD_HOST, or shard_host
- SHARD_PORT, or shard_port
Flexible key naming
envconfig supports having underscores in the key names where there is a word boundary. Now, that term is not super explicit, so let me show you an example:
var conf struct {
Cassandra struct {
SSLCert string
SslKey string
}
}
This will check all of the following keys:
- CASSANDRA_SSL_CERT, CASSANDRA_SSLCERT, cassandra_ssl_cert, cassandra_sslcert
- CASSANDRA_SSL_KEY, CASSANDRA_SSLKEY, cassandra_ssl_key, cassandra_sslkey
If that is not good enough, look just below.
Custom environment variable names
envconfig supports custom environment variable names:
var conf struct {
Name string `envconfig:"myName"`
}
Default values
envconfig supports default values:
var conf struct {
Name string `envconfig:"default=Vincent"`
}
Optional values
envconfig supports optional values:
var conf struct {
Name string `envconfig:"optional"`
}
Skipping fields
envconfig supports skipping struct fields:
var conf struct {
Internal string `envconfig:"-"`
}
Combining multiple options in one tag
You can of course combine multiple options:
var conf struct {
Name string `envconfig:"default=Vincent,myName"`
}
Slices or arrays
With slices or arrays, the same naming is applied for the slice. To put multiple elements into the slice or array, you need to separate them with a , (will probably be configurable in the future, or at least have a way to escape)
For example:
var conf struct {
Ports []int
}
This will check for the key PORTS:
- if your variable is 9000 the slice will contain only 9000
- if your variable is 9000,100 the slice will contain 9000 and 100
For slices of structs, it's a little more complicated. The same splitting of slice elements is done with a comma, however, each token must follow
a specific format like this: {<first field>,<second field>,...}
For example:
var conf struct {
Shards []struct {
Name string
Port int
}
}
This will check for the key SHARDS. Example variable content: {foobar,9000},{barbaz,20000}
This will result in two struct defined in the Shards slice.
If you want to set default value for slice or array, you have to use ;
as separator, instead of ,
:
var conf struct {
Ports []int `envconfig:"default=9000;100"`
}
Same for slices of structs:
var conf struct {
Shards []struct {
Name string
Port int
} `envconfig:"default={foobar;localhost:2929};{barbaz;localhost:2828}"`
}
Development state
I consider envconfig to be pretty much done.
It has been used extensively at Batch for more than 5 years now without much problems, with no need for new features either.
So, while I will keep maintaining this library (fixing bugs, making it compatible with new versions of Go and so on) for the foreseeable future, I don't plan on adding new features.
But I'm open to discussion so if you have a need for a particular feature we can discuss it.