Releases: MimoJanra/confkit
Release list
Release v1.0.2
v1.0.1 — Security patch
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/mailremoved from core —emailvalidator is regex-based (GO-2026-4977,GO-2026-4986) - Fixed: deprecated
reflect.Ptrreplaced withreflect.Pointerthroughoutvalidation.go - Fixed:
gofmtapplied toload.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.1Sub-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
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 accessorInstallation
# 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.0Sub-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 only1.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
confkit/otel v1.0.1
- Bumped
go.opentelemetry.io/otelfrom 1.39.0 to 1.41.0. - Removed unused indirect test dependencies (
go-spew,go-difflib) fromgo.mod. - Go 1.25 minimum version.
go get github.com/MimoJanra/confkit/otel@otel/v1.0.1etcd/v1.0.1 — Dependency update
confkit/etcd v1.0.1
- Bumped
go.etcd.io/etcd/client/v3from 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.1v0.10.0: Breaking Changes & Production Examples
🚀 Major Release: v0.10.0
⚠️ Breaking Changes (Before v1.0)
Load[T]returns pointer —Load[T](sources...) (*T, error)instead of(T, error)LoadWithOptions[T]returns pointer — consistency across Load functionsLoadWithWatcher[T]returns pointer — aligned with core APIotel.Loadwrapper 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
- Examples Directory — Production-ready configurations
- CHANGELOG — Full change details
- Documentation — Complete guides and API reference
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
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.3Contributors
Type-safe configuration for Go, built with care for correctness.
vault/v0.8.3
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.3prometheus/v0.8.3
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.3otel/v0.8.3
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