{"id":19188561,"url":"https://github.com/blakelead/lodr","last_synced_at":"2026-04-10T23:02:36.877Z","repository":{"id":57531791,"uuid":"277773846","full_name":"blakelead/lodr","owner":"blakelead","description":"Load configuration from YAML, JSON, environment variables and command-line flags","archived":false,"fork":false,"pushed_at":"2020-07-15T22:51:32.000Z","size":21,"stargazers_count":0,"open_issues_count":0,"forks_count":1,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-01-04T06:15:18.436Z","etag":null,"topics":["configuration","env","flags","go","json","loader","shell","yaml"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/blakelead.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2020-07-07T09:28:22.000Z","updated_at":"2020-07-15T22:51:35.000Z","dependencies_parsed_at":"2022-09-06T23:11:56.273Z","dependency_job_id":null,"html_url":"https://github.com/blakelead/lodr","commit_stats":null,"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/blakelead%2Flodr","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/blakelead%2Flodr/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/blakelead%2Flodr/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/blakelead%2Flodr/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/blakelead","download_url":"https://codeload.github.com/blakelead/lodr/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":240265423,"owners_count":19774071,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["configuration","env","flags","go","json","loader","shell","yaml"],"created_at":"2024-11-09T11:25:18.739Z","updated_at":"2026-04-10T23:02:36.790Z","avatar_url":"https://github.com/blakelead.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# lodr\n\nMinimal configuration loader for Go.\n\nLoad from file (YAML, JSON), from environment variables or from command-line flags.\n\n## Usage\n\n### Load from file\n\n```yaml\n# config.yaml\nname: value\n```\n\n```go\npackage main\n\nimport (\n    \"fmt\"\n    \"github.com/blakelead/lodr\"\n)\n\ntype MyConfig struct {\n    Name string\n}\n\nfunc main() {\n    var myConfig MyConfig\n\n    lodr.Load(\u0026myConfig).File(\"config.yaml\")\n\n    fmt.Println(myConfig.Name)\n}\n```\n\n```bash\n\u003e go run main.go\nvalue\n```\n\n### Load from file with tag\n\nIt uses `gopkg.in/yaml.v2` so it works exactly the same:\n\n```yaml\n# config.yaml\nmy_app_name: value\n```\n\n```go\ntype MyConfig struct {\n    Name string `yaml:\"my_app_name\"`\n}\n\nfunc main() {\n    var myConfig MyConfig\n\n    lodr.Load(\u0026myConfig).File(\"config.yaml\")\n\n    fmt.Println(myConfig.Name)\n}\n```\n\n```bash\n\u003e go run main.go\nvalue\n```\n\n### Load from env\n\n```go\ntype MyConfig struct {\n    Name string\n}\n\nfunc main() {\n\n    var myConfig MyConfig\n\n    lodr.Load(\u0026myConfig).Env()\n\n    fmt.Println(myConfig.Name)\n}\n```\n\n```bash\n\u003e NAME=new_value go run main.go\nnew_value\n```\n\n### Load from env with tag\n\n```go\ntype MyConfig struct {\n    Name string `env:MY_APP_NAME`\n}\n\nfunc main() {\n\n    var myConfig MyConfig\n\n    lodr.Load(\u0026myConfig).Env()\n\n    fmt.Println(myConfig.Name)\n}\n```\n\n```bash\n\u003e MY_APP_NAME=value go run main.go\nvalue\n```\n\n### Load from env with options\n\n```go\ntype MyConfig struct {\n    Name string `env:NAME`\n}\n\nfunc main() {\n\n    var myConfig MyConfig\n\n    opts := \u0026lodr.EnvOptions{\n          Prefix:     \"MY_APP\",\n          ProcessAll: false,\n    }\n\n    lodr.Load(\u0026myConfig).EnvWithOptions(opts)\n\n    fmt.Println(myConfig.Name)\n}\n```\n\n```bash\n\u003e MY_APP_NAME=value go run main.go\nvalue\n```\n\nOptions:\n\n- `Prefix`: environment variables are all prefixed by this value\n- `ProcessAll`: if true, no need to specify tags. Names will be infered from attributes.\n\n### Load from command-line arguments\n\n main.go\n\n ```go\ntype MyConfig struct {\n    Name string `cmd:myapp.name`\n}\n\nfunc main() {\n\n    var myConfig MyConfig\n\n    lodr.Load(\u0026myConfig).Cmd()\n\n    fmt.Println(myConfig.Name)\n}\n ```\n\n```bash\n\u003e go run main.go --myapp.name the_value\nthe_value\n```\n\n### Complete example\n\n```yaml\n# config.yaml\nname: mydb\ndb:\n  host: localhost\n  port: 8080\n  timeout: 10s\n  tls: true\n```\n\n```go\npackage main\n\nimport (\n    \"fmt\"\n    \"time\"\n    \"github.com/blakelead/lodr\"\n)\n\ntype MyConfig struct {\n    Name string `cmd:\"name\"`\n    DB   struct {\n        Host     string        `yaml:\"host\" env:\"DB_HOST\" cmd:\"db.host\"`\n        Port     int           `yaml:\"port\" env:\"DB_PORT\" cmd:\"db.port\"`\n        Password string        `env:\"DB_PASSWORD\"`\n        Timeout  time.Duration `yaml:\"timeout\" env:\"DB_TIMEOUT\" cmd:\"db.timeout\"`\n        TLS      bool          `yaml:\"tls\" env:\"DB_TLS\" cmd:\"db.tls\"`\n    }\n}\n\nfunc main() {\n    var mc MyConfig\n\n    opts := \u0026lodr.EnvOptions{\n        Prefix: \"MY_APP\",\n    }\n\n    c := lodr.Load(\u0026mc).File(\"config.yaml\").EnvWithOptions(opts).Cmd()\n\n    if c.Error != nil {\n        panic(c.Error)\n    }\n\n    fmt.Println(mc.Name)\n    fmt.Println(mc.DB.Password)\n    fmt.Printf(\"%s:%d\\n\", mc.DB.Host, mc.DB.Port)\n}\n```\n\n```bash\n\u003e MY_APP_DB_PASSWORD=pass go run main.go --name the_db\nthe_db\npass\nlocalhost:8080\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fblakelead%2Flodr","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fblakelead%2Flodr","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fblakelead%2Flodr/lists"}