cfgkit
Typed config from env, .env, JSON, YAML, TOML, flags and secret stores into one validated struct.
go get github.com/ubgo/cfgkit
- Language
- Go
- Go version
- 1.22
- Core deps
- 1 direct
- Latest tag
- v0.1.0
- License
- Apache-2.0
- Go modules
- 21
How it fits together
passescfgkittestcfgkittest is the shared conformance suite: each one marked green has a test that runs it.
Code from the README
type Config struct {
Port int `env:"PORT" default:"8080" doc:"HTTP listen port"`
Timeout time.Duration `env:"TIMEOUT" default:"15s"`
DBURL string `env:"DATABASE_URL,required" doc:"Postgres connection string"`
APIKey string `env:"API_KEY" secret:"true" doc:"Upstream API key"`
}
cfg, res, err := cfgkit.Load[Config](
cfgkit.WithSources(
cfgkit.FromFiles(".env", ".env.local"),
cfgkit.FromEnviron(), // last = highest precedence
),
)cfgkit.FromEnviron()
cfgkit.FromPrefixedEnviron("SVC_")
cfgkit.FromFiles(".env", ".env.local") // missing file is not an error
cfgkit.FromFlagSet(fs) // stdlib flag
cfgkit.FromMap(m) // the test seamsecrets, _ := vault.ReadAll(ctx, "secret/data/app") // pre-load: Lookup runs once per field
src := cfgkit.SourceFunc("vault", func(key string) (string, bool, error) {
v, ok := secrets[key]
return v, ok, nil
})src := cfgkit.StructuredFunc("config.yaml", func(dst any) error {
b, err := os.ReadFile("config.yaml")
if err != nil {
return err
}
return yaml.Unmarshal(b, dst) // the yaml dependency is YOURS
})From the cfgkit README.
At a glance (from the README)
| Module | Adds | Guide |
|---|---|---|
contrib/format-hcl | HCL documents and files | README |
contrib/format-ini | INI documents and files — flat | README |
contrib/format-properties | Java .properties — flat | README |
contrib/format-toml | TOML documents and files | README |
contrib/format-yaml | YAML documents and files | README |
contrib/flags-pflag | cobra / pflag flag sets | README |
contrib/source-azurekeyvault | Azure Key Vault — no dependencies | README |
contrib/source-consul | Consul KV prefixes — no dependencies | README |
contrib/source-etcd | etcd v3 prefixes, via its HTTP gateway — no dependencies | README |
contrib/source-gcpsecrets | Google Secret Manager — no dependencies | README |
contrib/source-k8s | Kubernetes ConfigMaps and Secrets — no dependencies | README |
contrib/source-vault | HashiCorp Vault KV secrets — no dependencies | README |
contrib/source-appconfig | AWS AppConfig profiles | README |
contrib/source-s3 | a config document in an S3 object | README |
contrib/source-secretsmanager | AWS Secrets Manager | README |
contrib/source-ssm | AWS Parameter Store | README |
contrib/source-kiln | kiln-encrypted env files — the one source whose file is safe to commit | README |
contrib/source-nats | NATS JetStream key/value buckets | README |