All Projects → kkyr → Fig

kkyr / Fig

Licence: apache-2.0
A minimalist Go configuration library

Programming Languages

go
31211 projects - #10 most used programming language
golang
3204 projects

Projects that are alternatives of or similar to Fig

climatecontrol
Python library for loading settings and config data from files and environment variables
Stars: ✭ 20 (-85.92%)
Mutual labels:  yaml, toml, configuration, environment-variables, configuration-management
Simple Settings
A simple way to manage your project settings.
Stars: ✭ 165 (+16.2%)
Mutual labels:  configuration-management, json, yaml, toml, configuration
parse it
A python library for parsing multiple types of config files, envvars & command line arguments that takes the headache out of setting app configurations.
Stars: ✭ 86 (-39.44%)
Mutual labels:  yaml, toml, configuration, environment-variables, configuration-management
Night Config
Powerful java configuration library for toml, yaml, hocon, json and in-memory configurations
Stars: ✭ 93 (-34.51%)
Mutual labels:  configuration-management, json, yaml, toml, configuration
Config Rs
⚙️ Layered configuration system for Rust applications (with strong support for 12-factor applications).
Stars: ✭ 915 (+544.37%)
Mutual labels:  configuration-management, json, toml, configuration
Dasel
Query, update and convert data structures from the command line. Comparable to jq/yq but supports JSON, TOML, YAML, XML and CSV with zero runtime dependencies.
Stars: ✭ 759 (+434.51%)
Mutual labels:  json, yaml, toml, configuration
Koanf
Light weight, extensible configuration management library for Go. Built in support for JSON, TOML, YAML, env, command line, file, S3 etc. Alternative to viper.
Stars: ✭ 450 (+216.9%)
Mutual labels:  configuration-management, yaml, toml, configuration
Mconfig
MCONFIG is a lightweight Golang library for integrating configs files like (json, yml, toml) and environment variables into one config struct.
Stars: ✭ 28 (-80.28%)
Mutual labels:  environment-variables, json, yaml, toml
Konf
A type-safe cascading configuration library for Kotlin/Java/Android, supporting most configuration formats
Stars: ✭ 225 (+58.45%)
Mutual labels:  json, yaml, toml, configuration
Dynaconf
Configuration Management for Python ⚙
Stars: ✭ 2,082 (+1366.2%)
Mutual labels:  configuration-management, environment-variables, configuration, yaml
Node Convict
Featureful configuration management library for Node.js
Stars: ✭ 1,855 (+1206.34%)
Mutual labels:  configuration-management, environment-variables, json, configuration
paerser
No description or website provided.
Stars: ✭ 38 (-73.24%)
Mutual labels:  yaml, toml, configuration, environment-variables
cfg-rs
A Configuration Library for Rust Applications
Stars: ✭ 18 (-87.32%)
Mutual labels:  yaml, toml, environment, configuration
Resticprofile
Configuration profiles for restic backup
Stars: ✭ 48 (-66.2%)
Mutual labels:  json, yaml, toml, configuration
Structured Text Tools
A list of command line tools for manipulating structured text data
Stars: ✭ 6,180 (+4252.11%)
Mutual labels:  json, yaml, toml
Fsconfig
FsConfig is a F# library for reading configuration data from environment variables and AppSettings with type safety.
Stars: ✭ 108 (-23.94%)
Mutual labels:  configuration-management, environment-variables, configuration
Strictyaml
Type-safe YAML parser and validator.
Stars: ✭ 836 (+488.73%)
Mutual labels:  configuration-management, yaml, configuration
Rq
Record Query - A tool for doing record analysis and transformation
Stars: ✭ 1,808 (+1173.24%)
Mutual labels:  json, yaml, toml
Remarshal
Convert between CBOR, JSON, MessagePack, TOML, and YAML
Stars: ✭ 421 (+196.48%)
Mutual labels:  json, yaml, toml
Configr
Implements the JSON, INI, YAML and TOML parser, for R setting and writing of configuration file.
Stars: ✭ 38 (-73.24%)
Mutual labels:  json, yaml, toml

fig

godoc build status semver tag go report card coverage status license

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 fortime.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 the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].