> _Originally released on 2020-05-11 16:37:41+00:00 ([link](https://github.com/zalando-incubator/kopf/releases/tag/0.27))._
**WARNING:** The changes are backward-compatible (in theory). But the changes are also massive, so things can break unexpectedly (in practice). Test this upgrade carefully.
New features:
* `kopf.daemon` for background resource-accompanying tasks/threads. 330 342 360
* `kopf.timer` for regular and/or delayed activities & checks. 330 342 360
* `kopf.PRESENT` for labels/annotations filters (instead of misleading `None`). 327
* `kopf.ABSENT` for labels/annotations filters. 327
* Arbitrary callbacks for labels/annotations filters. 328
* `kopf.all_()`, `kopf.any_()`, `kopf.not_()`, `kopf.none_()` helpers for callbacks aggregation. 345
* A proper official documented way to configure operators; plus docs. 336 337 331
* Identities of operators, allowing multiple non-colliding operators for the same resources. 331 344
* Configurable client-side timeouts for watch requests. 322 336
* Configurable storages for handling state & diff-bases. 331 346 353
Improvements:
* Internal instant functions (lifecycles, when-filters) do not use thread pools anymore. 326
* Bodies & patches now have magical properties for metadata, spec, status, with "live view" into data. 327
* Labels and annotations are passed as additional kwargs (similar to body/spec/meta/status). 327
* All user-facing types and classes are published as framework's public interface (via top-level package). 341
* Switch `KopfExample` & `KopfPeering` from v1beta1 to v1 CRD API; keep v1beta1 nearby. 364
* Documentation is restructured for separate pages for all aspects of handling (kwargs, filters, etc). 325
* Explain the "structural schemas" of K8s 1.16+, and v1-vs-v1beta1 CRD differences. 364
Fixes:
* Threads from the sync handlers executors are not leaked (not left orphaned) at exit. 326
* Handlers' state is now persisted in annotations, not in status: for custom & built-in resources. This solves the issues with built-ins not handled properly in K8s 1.16+. 331
* Fix the on-field handler not being invoked when the diff is too generic (relative to the field). 340
* Provoke after-sleep handling cycles even on resources with no arbitrary field preservation. 343
* Fix premature finalizer removal with 2+ deletion handlers. 361
* Avoid no-effect patching and potentially delaying handling cycles. 362
Internal changes:
* Coveralls is made optional. 363
* Compatibility with Kubernetes 1.18 in CI/CD. 335
* `pytest` & `pytest-asyncio` are pinned temporarily until fixed on their side. 352