v0.27.0 — multi-module isolation: backends are opt-in by module (WS-011)
devedge-sdk is now a multi-module repo. The root library module carries NONE of the heavy backend dependencies — each lives in its own nested module a consumer pulls in only by importing it. A service that imports only the core (server, persistence interfaces, middleware, config, resilience, health, events) has a dependency graph provably free of the OTel SDK + exporters, koanf, franz-go, gorm, and ent.
Modules (all released synchronized at v0.27.0)
github.com/infobloxopen/devedge-sdk— the dependency-light library…/observability/otel— OTel SDK + exporters…/config/koanf— koanf (YAML/TOML config)…/events/kafkabus— franz-go (Kafka bus)…/persistence/gormtx— gorm…/persistence/entrepo— ent…/cmd— the CLI +protoc-gen-*plugins (build-time tooling)
For consumers
- Import only what you use; your graph/go.sum stays minimal. gorm/ent/koanf/franz-go are fully absent from a core-only consumer's graph; the OTel API/contrib stays in core for zero-config instrumentation (the OTel SDK is opt-in via
observability/otel). - No import-path changes — module path == import path, so existing imports are unchanged. A service using an adapter must
requireits module at the matching version (the scaffold-generatedgo.moddoes this automatically). - CLI:
go install github.com/infobloxopen/devedge-sdk/cmd/devedge-sdk@v0.27.0.
Establishes the pattern for future heavy components (e.g. a k8s controller scaffolding) to isolate the same way — see docs Adding an isolated module.