// the find
spotahome/kooper
Kooper is a simple Go library to create Kubernetes operators and controllers.
Kooper is a thin Go library that wraps client-go's informer/lister machinery into a simpler Retriever+Handler+Controller abstraction. It's aimed at developers who want to write a Kubernetes controller without adopting a full framework like Kubebuilder — you bring your own CRD clients, logging, and webhook handling, Kooper just runs the reconcile loop.
The Retriever/Handler split is genuinely clean: converting any ListerWatcher to a Retriever is one call, and HandlerFunc means you can write a controller in ~20 lines without defining new types. The explicit decision to drop delete events in favor of owner references and finalizers is the right call — delete watch events in client-go are unreliable and most tutorials gloss over this. The multi-controller-per-handler pattern for secondary resources is well thought out and avoids the namespace/name collision bugs that plague naive multi-resource implementations. Integration tests run against real kind clusters via CI, not fake clients.
543 stars after what appears to be several years of existence suggests this never got meaningful adoption outside Spotahome. Kubebuilder has effectively won the framework debate and tooling (controller-gen, envtest) built around it is now the de facto standard — picking Kooper means opting out of that ecosystem. The library is pinned to logrus for its reference logger implementation, which is increasingly out of step with the slog-dominated Go logging landscape. No status subresource helpers or patch/SSA utilities are included, so anything beyond basic reconciliation means writing boilerplate that Kubebuilder generates for free.