Files
jety/README.md
Tai Groot 60253426ae docs: update README for v0.3.0
- Add CI badges (test + govulncheck)
- Bump minimum Go version to 1.26
- Add IsSet, AllKeys, AllSettings to API table
- Remove outdated migration guide
2026-03-02 00:13:33 +00:00

4.4 KiB

JETY

test govulncheck

JSON, ENV, TOML, YAML

A lightweight Go configuration management library supporting JSON, ENV, TOML, and YAML formats. It provides viper-like AutomaticEnv functionality with fewer dependencies. Originally built to support grlx.

Installation

go get github.com/taigrr/jety

Requires Go 1.26 or later.

Quick Start

package main

import "github.com/taigrr/jety"

func main() {
    // Set defaults
    jety.SetDefault("port", 8080)
    jety.SetDefault("host", "localhost")

    // Environment variables are loaded automatically
    // e.g., PORT=9000 overrides the default

    // Read from config file
    jety.SetConfigFile("config.toml")
    jety.SetConfigType("toml")
    if err := jety.ReadInConfig(); err != nil {
        // handle error
    }

    // Get values (config file > env > default)
    port := jety.GetInt("port")
    host := jety.GetString("host")
}

Features

  • Multiple formats: JSON, TOML, YAML
  • Automatic env loading: Environment variables loaded on init
  • Prefix filtering: Filter env vars by prefix (e.g., MYAPP_)
  • Case-insensitive keys: Keys normalized to lowercase
  • Type coercion: Getters handle type conversion gracefully
  • Thread-safe: Safe for concurrent access
  • Config precedence: config file > environment > defaults

Nested Configuration

For nested config structures like:

[services.cloud]
var = "xyz"
timeout = "30s"

[services.cloud.auth]
client_id = "abc123"

Access nested values using GetStringMap and type assertions:

services := jety.GetStringMap("services")
cloud := services["cloud"].(map[string]any)
varValue := cloud["var"].(string)  // "xyz"

// For deeper nesting
auth := cloud["auth"].(map[string]any)
clientID := auth["client_id"].(string)  // "abc123"

Environment Variable Overrides

Environment variables use uppercase keys. For nested config, the env var name is the key in uppercase:

# Override top-level key
export PORT=9000

# For nested keys, use the full key name in uppercase
export SERVICES_CLOUD_VAR=override_value

With a prefix:

cm := jety.NewConfigManager().WithEnvPrefix("MYAPP_")
export MYAPP_PORT=9000
export MYAPP_SERVICES_CLOUD_VAR=override_value

Note: Environment variables override defaults but config files take highest precedence.

API

Configuration

Function Description
SetConfigFile(path) Set config file path
SetConfigDir(dir) Set config directory
SetConfigName(name) Set config file name (without extension)
SetConfigType(type) Set config type: "toml", "yaml", "json"
ReadInConfig() Read config file
WriteConfig() Write config to file

Values

Function Description
Set(key, value) Set a value
SetDefault(key, value) Set a default value
Get(key) Get raw value
GetString(key) Get as string
GetInt(key) Get as int
GetBool(key) Get as bool
GetDuration(key) Get as time.Duration
GetStringSlice(key) Get as []string
GetIntSlice(key) Get as []int
GetStringMap(key) Get as map[string]string
IsSet(key) Check if key has a value
AllKeys() List all known keys
AllSettings() Get all values as a map

Environment

Function Description
WithEnvPrefix(prefix) Filter env vars by prefix (strips prefix from keys)
SetEnvPrefix(prefix) Set prefix for env var lookups

License

See LICENSE file.