**BREAKING CHANGES!** The major version increase (0.x → 1.x) means that there are changes in the public interface with no backwards compatibility. Pay attention when upgrading — most of them have quick replacements.
_Most of these legacies are extremely old and it is highly unlikely that they were used in any existing operators. The `DeprecationWarning`s were issued for all these features (except namespaces). See 511._
| Removed feature | Replacement feature |
| --- | --- |
| `cooldown=` option of decorators | `backoff=` option |
| `event` kwarg in `kopf.on.event` | `reason` kwarg |
| `cause` kwarg in handlers | use all kwargs directly |
| `kopf.login()` sync function | `kopf.on.login` handlers and async activities |
| `kopf.config` module | `settings` kwarg of `kopf.on.startup()` handlers |
| `kopf.config.get_pykube_cfg()` for patching | `kopf.on.login()` handlers |
| `kopf.HandlerFatalError` | `kopf.PermanentError` |
| `kopf.HandlerRetryError` | `kopf.TemporaryError` |
| `kopf.create_tasks()` (sync) | `kopf.spawn_tasks()` (async) |
| `kopf.events.event/info/warn/exception()` | the same directly in the `kopf` module |
| `None` for `labels=`/`annotations=` filters | `kopf.PRESENT` (None now raises exceptions) |
| Positional field in `on.field('group', 'v1', 'plural', 'field')` | kwarg `field='field'` instead |
| Unversioned keys in storages | generate v1/v2 keys explicitly |
| Storages with unprefixed annotations | prefix is now mandatory; defaults to `kopf.zalando.org/…` |
| `kopf.on.this(…)` for sub-handlers | `kopf.subhandler(…)` (for readability) |
_Dropped without replacements:_
* Public fields & methods of `OperatorRegistry` — use it only as an object for the `registry=` kwarg. 625 611
* All internal sub-registries: `Resource[Watching|Spawning|Changing]Registry`, `ActivityRegistry`. 625 611
* All legacy registries: `SimpleRegistry`, `GlobalRegistry`, etc. 625
**Deprecated:**
* `operator(namespace='…')` → `operator(namespaces=['…'])`. 600
* `operator(namespace=None)` → `operator(clusterwide=True)`. 600
**New features:**
* Namespace serving:
* Multiple namespaces: e.g. `-n default -n myapp`. 500
* Namespace globs: e.g. `--namespace myapp-*,!*-pr-*`. 500
* Namespace precompiled regexps (only in embedded mode). 500
* Resource serving:
* Resources specified partially with/without versions: `kopf.on.event('kopf.dev', 'kex')`. 500
* Resources specified by secondary names (short, singular, kind): `kopf.on.event(kind='Pod')`. 500
* Resources specified by minimally sufficient auto-guess names: `kopf.on.event('pods')`. 500
* Handling of whole categories of resources: `kopf.on.event(category='all')`. 500
* Handling of all resources (do not try on real clusters): `kopf.on.event(kopf.EVERYTHING)`. 500
* Field filters:
* Fields' presence/absence filters: e.g. `kopf.on.event(…, field='spec.field', value=kopf.PRESENT)`. 573
* Fields' value filters: e.g. `kopf.on.event(…, field='spec.field', value='value')`; callbacks are supported. 573
* Fields' diff filters (only for update): `kopf.on.update(…, field='spec.field', old=1, new=2)`; callbacks are supported. 573
* Fields' filters are now applicable to all handlers: creation/update/deletion/resuming, daemons, timers, events. 573
* Peering behaviour is now configurable via settings. 572
**Improvements:**
* The operator's core ("reactor") is full reworked for dynamic detection of resources and namespaces. 600
* Better identifiers of peers in IPv6 networks: for easier identification. 569
* Better log messages in change-detecting processing: 605
* Faster (near-instant) unfreezing when peers are gone/expire. 581
* More notes on `x-kubernetes-preserve-unknown-fields ` in the docs. 612
**Bugfixes:**
* Resources with no uids are now supported too. 596
* CLI for freezing/resuming was failing due to missing authentication. 568
* Ignore irrelevant handlers in superseding causes (e.g. deletion-during-creation). 606
* Fixed configuration of the official Kubernetes library, if used for auth piggybacking. 567
* Guaranteed finalisation of watchers & workers. 628
**Contributor experience:**
* Switched to GitHub Actions for CI. 582 586
* API errors are wrapped into our own classes, to prevent abstraction leakage of an HTTP client. 575
* Async timeouts used in the tests, some asyncio tests are time-limited. 608
* Stricter typing on resources & namespaces. 623 624
* Squashed per-resource registries into combined ones. 622
* Some other refactorings for code clarity: 577 576 578 597 598 609 610 626 627