Description
Tiny library for reading configuration from a file and from environment variables (with validation & defaults).
fig alternatives and similar packages
Based on the "Configuration" category.
Alternatively, view fig 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 -
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 -
gcfg
read INI-style configuration files into Go structs; supports user-defined types and subsections -
envconfig
Small library to read your configuration from environment variables -
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 -
uConfig
Lightweight, zero-dependency, and extendable configuration management library for Go -
configure
Configure is a Go package that gives you easy configuration of your project through redundancy -
go-up
go-up! A simple configuration library with recursive placeholders resolution and no magic. -
CONFLATE
Library providing routines to merge and validate JSON, YAML and/or TOML files -
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).
InfluxDB - Power Real-Time Data Analytics at Scale
Do you think we are missing an alternative of fig or a related project?
Popular Comparisons
README
fig
fig is a tiny library for loading an application's config file and its environment into a Go struct. Individual fields can have default values defined or be marked as required.
Why fig?
- Define your configuration, validations and defaults in a single location
- Optionally load from the environment as well
- Only 3 external dependencies
- Full support for
time.Time
&time.Duration
- Tiny API
- Decoders for
.yaml
,.json
and.toml
files
Getting Started
$ go get -d github.com/kkyr/fig
Define your config file:
# config.yaml
build: "2020-01-09T12:30:00Z"
server:
ports:
- 8080
cleanup: 1h
logger:
level: "warn"
trace: true
Define your struct along with validations or defaults:
package main
import (
"fmt"
"github.com/kkyr/fig"
)
type Config struct {
Build time.Time `fig:"build" validate:"required"`
Server struct {
Host string `fig:"host" default:"127.0.0.1"`
Ports []int `fig:"ports" default:"[80,443]"`
Cleanup time.Duration `fig:"cleanup" default:"30m"`
}
Logger struct {
Level string `fig:"level" default:"info"`
Trace bool `fig:"trace"`
}
}
func main() {
var cfg Config
err := fig.Load(&cfg)
// handle your err
fmt.Printf("%+v\n", cfg)
// Output: {Build:2019-12-25 00:00:00 +0000 UTC Server:{Host:127.0.0.1 Ports:[8080] Cleanup:1h0m0s} Logger:{Level:warn Trace:true}}
}
If a field is not set and is marked as required then an error is returned. If a default value is defined instead then that value is used to populate the field.
Fig searches for a file named config.yaml
in the directory it is run from. Change the lookup behaviour by passing additional parameters to Load()
:
fig.Load(&cfg,
fig.File("settings.json"),
fig.Dirs(".", "/etc/myapp", "/home/user/myapp"),
) // searches for ./settings.json, /etc/myapp/settings.json, /home/user/myapp/settings.json
Environment
Need to additionally fill fields from the environment? It's as simple as:
fig.Load(&cfg, fig.UseEnv("MYAPP"))
Usage
See usage examples.
Documentation
See go.dev for detailed documentation.
Contributing
PRs are welcome! Please explain your motivation for the change in your PR and ensure your change is properly tested and documented.
*Note that all licence references and agreements mentioned in the fig README section above
are relevant to that project's source code only.