GitPedia

Paerser

Loads configuration from many sources

From traefik·Updated May 22, 2026·View on GitHub·

- CLI flags - Configuration files in YAML, TOML, JSON format - Environment variables The project is written primarily in Go, distributed under the Apache License 2.0 license, first published in 2020. Key topics include: cli-flags, configuration, environment-variables, go, golang.

Paerser

Package documentation
Build Status
Go Report Card

Features

Loads configuration from many sources:

  • CLI flags
  • Configuration files in YAML, TOML, JSON format
  • Environment variables

It also provides a simple CLI commands handling system.

Examples

Configuration

CLI Flags

go
package flag_test import ( "log" "github.com/davecgh/go-spew/spew" "github.com/traefik/paerser/flag" ) type ConfigExample struct { Foo string Bar Bar Great bool } type Bar struct { Sub *Sub List []string } type Sub struct { Name string Value int } func ExampleDecode() { args := []string{ "--foo=aaa", "--great=true", "--bar.list=AAA,BBB", "--bar.sub.name=bbb", "--bar.sub.value=6", } config := ConfigExample{} err := flag.Decode(args, &config) if err != nil { log.Fatal(err) } spew.Config = spew.ConfigState{ Indent: "\t", DisablePointerAddresses: true, } spew.Dump(config) // Output: // (flag_test.ConfigExample) { // Foo: (string) (len=3) "aaa", // Bar: (flag_test.Bar) { // Sub: (*flag_test.Sub)({ // Name: (string) (len=3) "bbb", // Value: (int) 6 // }), // List: ([]string) (len=2 cap=2) { // (string) (len=3) "AAA", // (string) (len=3) "BBB" // } // }, // Great: (bool) true // } }

File

go
package file_test import ( "fmt" "log" "os" "github.com/davecgh/go-spew/spew" "github.com/traefik/paerser/file" ) type ConfigExample struct { Foo string Bar Bar Great bool } type Bar struct { Sub *Sub List []string } type Sub struct { Name string Value int } func ExampleDecode() { tempFile, err := os.CreateTemp("", "paeser-*.yml") if err != nil { log.Fatal(err) } defer func() { _ = os.RemoveAll(tempFile.Name()) }() data := ` foo: aaa bar: sub: name: bbb value: 6 list: - AAA - BBB great: true ` _, err = fmt.Fprint(tempFile, data) if err != nil { log.Fatal(err) } // Read configuration file filePath := tempFile.Name() config := ConfigExample{} err = file.Decode(filePath, &config) if err != nil { log.Fatal(err) } spew.Config = spew.ConfigState{ Indent: "\t", DisablePointerAddresses: true, } spew.Dump(config) // Output: // (file_test.ConfigExample) { // Foo: (string) (len=3) "aaa", // Bar: (file_test.Bar) { // Sub: (*file_test.Sub)({ // Name: (string) (len=3) "bbb", // Value: (int) 6 // }), // List: ([]string) (len=2 cap=2) { // (string) (len=3) "AAA", // (string) (len=3) "BBB" // } // }, // Great: (bool) true // } }

Environment Variables

go
package env_test import ( "log" "os" "github.com/davecgh/go-spew/spew" "github.com/traefik/paerser/env" ) type ConfigExample struct { Foo string Bar Bar Great bool } type Bar struct { Sub *Sub List []string } type Sub struct { Name string Value int } func ExampleDecode() { _ = os.Setenv("MYAPP_FOO", "aaa") _ = os.Setenv("MYAPP_GREAT", "true") _ = os.Setenv("MYAPP_BAR_LIST", "AAA,BBB") _ = os.Setenv("MYAPP_BAR_SUB_NAME", "bbb") _ = os.Setenv("MYAPP_BAR_SUB_VALUE", "6") config := ConfigExample{} err := env.Decode(os.Environ(), "MYAPP_", &config) if err != nil { log.Fatal(err) } spew.Config = spew.ConfigState{ Indent: "\t", DisablePointerAddresses: true, } spew.Dump(config) // Output: // (env_test.ConfigExample) { // Foo: (string) (len=3) "aaa", // Bar: (env_test.Bar) { // Sub: (*env_test.Sub)({ // Name: (string) (len=3) "bbb", // Value: (int) 6 // }), // List: ([]string) (len=2 cap=2) { // (string) (len=3) "AAA", // (string) (len=3) "BBB" // } // }, // Great: (bool) true // } }

CLI Commands

go
TODO

Contributors

Showing top 9 contributors by commit count.

View all contributors on GitHub →

This article is auto-generated from traefik/paerser via the GitHub API.Last fetched: 6/26/2026