Skip to content

Releases: MimoJanra/confkit

Release v1.0.2

Choose a tag to compare

@MimoJanra MimoJanra released this 09 Jun 12:58
Fix release.yml: handle existing release idempotently

v1.0.1 — Security patch

Choose a tag to compare

@MimoJanra MimoJanra released this 12 May 11:55

confkit v1.0.1

Patch release. Security fix + Go 1.25 + dependency updates.


Security

GO-2026-4977 / GO-2026-4986 fixed

The email validator previously called net/mail.ParseAddress, which has two quadratic string-concatenation vulnerabilities in Go 1.25.9. The validator now uses a simple regex — no behaviour change for valid or invalid addresses, no net/mail dependency.

// This still works exactly the same
type Config struct {
    Email string `validate:"required,email"`
}

Changes

  • Security: net/mail removed from core — email validator is regex-based (GO-2026-4977, GO-2026-4986)
  • Fixed: deprecated reflect.Ptr replaced with reflect.Pointer throughout validation.go
  • Fixed: gofmt applied to load.go, observability.go, validation.go, schema/schema.go
  • Go 1.25: minimum Go version raised from 1.24 to 1.25
  • Deps: etcd client v3 3.5.13 → 3.6.11 · OTel 1.39.0 → 1.41.0

Installation

go get github.com/MimoJanra/confkit@v1.0.1

Sub-module tags

Module Tag
github.com/MimoJanra/confkit v1.0.1
github.com/MimoJanra/confkit/etcd etcd/v1.0.1
github.com/MimoJanra/confkit/otel otel/v1.0.1

All other submodules (aws, vault, consul, k8s, prometheus) are unchanged — use their v1.0.0 tags.


Full changelog: CHANGELOG.md

v1.0.0 — API Freeze & Production Release

Choose a tag to compare

@MimoJanra MimoJanra released this 12 May 10:47

confkit v1.0.0

First stable release. The API is now frozen — no breaking changes to any symbol listed in STABLE.md without a major version bump.


What's new in v1.0

Context propagation

Cloud sources (Vault, etcd, AWS) now respect caller deadlines.

ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
defer cancel()
cfg, err := confkit.LoadContext[Config](ctx, sources...)

Config dry-run for CI

Validate configuration without triggering hooks, audit loggers, or secret rotation.

cfg, err := confkit.ValidateOnly[Config](ctx,
    confkit.WithSource(confkit.FromOverlay(confkit.FromYAML("config.yaml"), "prod")),
    confkit.WithSource(confkit.FromEnv()),
)

Typed config dump

Dump[T] serialises your config to nested JSON or YAML. Secrets are redacted by default.

out, _ := confkit.Dump(cfg)
// {"port":9000,"db_url":"***REDACTED***","log_level":"warn"}

yaml, _ := confkit.DumpYAML(cfg, confkit.WithDumpRedactSecrets(false))

Config file discovery

Find config files in standard locations without hardcoding paths.

path, found := confkit.FindFile("config.yaml", confkit.DefaultSearchDirs("myapp")...)
// searches: ./ → ./config/ → /etc/myapp/ → ~/.myapp/

Environment overlays

Spring Boot-style config.<env>.yaml overlays — overlay file absent = no error.

src := confkit.FromOverlay(confkit.FromYAML("config.yaml"), os.Getenv("APP_ENV"))

Hot-reload delta reporting

Know exactly which fields changed on every reload.

watcher.AddDeltaListener(func(delta confkit.ConfigDelta, old, new map[string]any, err error) {
    slog.Info("config changed", "changed", delta.Changed, "added", delta.Added, "removed", delta.Removed)
})

MustLoad and ErrorReport.FirstError

cfg := confkit.MustLoad[Config](confkit.FromEnv())   // panics with *ErrorReport on error
first := report.FirstError()                          // nil-safe first error accessor

Installation

# Core
go get github.com/MimoJanra/confkit@v1.0.0

# Cloud integrations (pick what you need)
go get github.com/MimoJanra/confkit/aws@v1.0.0
go get github.com/MimoJanra/confkit/vault@v1.0.0
go get github.com/MimoJanra/confkit/consul@v1.0.0
go get github.com/MimoJanra/confkit/etcd@v1.0.0
go get github.com/MimoJanra/confkit/k8s@v1.0.0

# Observability
go get github.com/MimoJanra/confkit/prometheus@v1.0.0
go get github.com/MimoJanra/confkit/otel@v1.0.0

Sub-module tags

Module Tag
github.com/MimoJanra/confkit v1.0.0
github.com/MimoJanra/confkit/aws aws/v1.0.0
github.com/MimoJanra/confkit/vault vault/v1.0.0
github.com/MimoJanra/confkit/consul consul/v1.0.0
github.com/MimoJanra/confkit/etcd etcd/v1.0.0
github.com/MimoJanra/confkit/k8s k8s/v1.0.0
github.com/MimoJanra/confkit/prometheus prometheus/v1.0.0
github.com/MimoJanra/confkit/otel otel/v1.0.0

API stability

All public symbols are listed in STABLE.md and frozen:

  • 1.0.x — bug fixes and documentation only
  • 1.x.0 — additive changes (new symbols)
  • 2.0.0 — any breaking change to a frozen symbol (requires deprecation notice in prior minor)

Full changelog: CHANGELOG.md

otel/v1.0.1 — Dependency update

Choose a tag to compare

@MimoJanra MimoJanra released this 12 May 11:56

confkit/otel v1.0.1

  • Bumped go.opentelemetry.io/otel from 1.39.0 to 1.41.0.
  • Removed unused indirect test dependencies (go-spew, go-difflib) from go.mod.
  • Go 1.25 minimum version.
go get github.com/MimoJanra/confkit/otel@otel/v1.0.1

etcd/v1.0.1 — Dependency update

Choose a tag to compare

@MimoJanra MimoJanra released this 12 May 11:56

confkit/etcd v1.0.1

  • Bumped go.etcd.io/etcd/client/v3 from 3.5.13 to 3.6.11. etcd 3.6.x is the current stable series; 3.5.x is in maintenance.
  • Go 1.25 minimum version.
go get github.com/MimoJanra/confkit/etcd@etcd/v1.0.1

v0.10.0: Breaking Changes & Production Examples

Choose a tag to compare

@MimoJanra MimoJanra released this 08 May 12:40

🚀 Major Release: v0.10.0

⚠️ Breaking Changes (Before v1.0)

  • Load[T] returns pointerLoad[T](sources...) (*T, error) instead of (T, error)
  • LoadWithOptions[T] returns pointer — consistency across Load functions
  • LoadWithWatcher[T] returns pointer — aligned with core API
  • otel.Load wrapper returns pointer — observability middleware updated

Migration: No logic changes needed. Go auto-dereferences pointers for field access (cfg.Port works unchanged). Recompilation required only.

✨ New Features

  • FromYAMLOptional() — optional config file loading without errors if file missing
  • Automatic snake_case ↔ CamelCase mapping — use snake_case in YAML, CamelCase in Go structs (automatic conversion)
  • Production-ready examples suite (5 complete, tested examples):
    • 🌐 Web Service — database, cache, logging
    • 🔧 Microservice — PostgreSQL, Redis, RabbitMQ, JWT, observability
    • 💻 CLI Tool — flags, file processing, validation
    • ☁️ Cloud-Native — Kubernetes, AWS Secrets Manager, Vault
    • 📊 Full Setup — JSON Schema generation, Markdown docs, CLI help
  • time.Duration parsing — full support for "5s", "10m", "1h30m" format
  • Enhanced error source tracking — all errors show where configuration came from

📚 Documentation Improvements

  • Complete examples integrated into all documentation
  • Enhanced prefix mapping guide with detailed tables
  • Multi-level nesting examples for nested structs
  • Complete LLM reference (6500+ lines)
  • Examples directory with comprehensive README and tests

🧪 Quality

  • ✅ All 12 example tests passing
  • ✅ 90.1% core coverage maintained
  • ✅ Full backward compatibility (except pointer signature)

📦 Installation

go get github.com/MimoJanra/confkit@latest

🔗 Resources


v0.10.0 is production-ready and recommended for all new projects. Existing v0.9 code will require recompilation but minimal or no logic changes.

v0.8.3: Bug Fixes & Stability

Choose a tag to compare

@MimoJanra MimoJanra released this 06 May 09:53

What's Fixed

Data Race Conditions

  • Fixed concurrent access to rotation engine state in tests
  • Added proper mutex-protected getter for LastRotation
  • Fixed callback invocations with atomic operations

Code Quality

  • Fixed all golangci-lint errcheck errors in test files
  • Documented linting rules in CLAUDE.md for consistent error handling
  • Improved test cleanup patterns

Landing Page Updates

  • Removed misleading 'Trusted by Go Teams' section
  • Fixed code block styling
  • Corrected Get Started button link

Installation

go get github.com/MimoJanra/confkit@v0.8.3

Contributors

Type-safe configuration for Go, built with care for correctness.

vault/v0.8.3

Choose a tag to compare

@MimoJanra MimoJanra released this 06 May 09:58

What's New

Synchronized with confkit v0.8.3:

  • Fixed data race conditions in rotation engine
  • Improved error handling and linting compliance
  • Enhanced test stability

Installation

go get github.com/MimoJanra/confkit/vault@v0.8.3

prometheus/v0.8.3

Choose a tag to compare

@MimoJanra MimoJanra released this 06 May 09:59

What's New

Synchronized with confkit v0.8.3:

  • Prometheus metrics improvements
  • Enhanced monitoring and observability

Installation

go get github.com/MimoJanra/confkit/prometheus@v0.8.3

otel/v0.8.3

Choose a tag to compare

@MimoJanra MimoJanra released this 06 May 09:59

What's New

Synchronized with confkit v0.8.3:

  • OpenTelemetry integration improvements
  • Enhanced observability and tracing

Installation

go get github.com/MimoJanra/confkit/otel@v0.8.3