> ## Documentation Index
> Fetch the complete documentation index at: https://docs.streamnative.io/llms.txt
> Use this file to discover all available pages before exploring further.

# Release Note v0.20

StreamNative Private Cloud is an enterprise product which brings specific controllers for Kubernetes by providing specific Custom Resource Definitions (CRDs) that extend the basic Kubernetes orchestration capabilities to support the setup and management of StreamNative components.

**Release Date:** 2026-09-07

## What's changed

### 🚀 New features

#### Agent Engine

* **Scheduled agent triggers**: Added cron-based `AgentTrigger` sources backed by Kubernetes CronJobs, with schedule, time zone, and string payload configuration.
* **Shared sessions**: Added the `SHARED` session mode for scheduled triggers. A state store URL is required when cron triggers use this mode.
* **Versioned agent references**: Agent triggers can select an agent by required `id` and optional `version`.
* **Source validation**: Added a validating webhook that prevents changing an AgentTrigger source type after creation.

#### Managed Kafka and Ursa storage

* **Explicit Ursa topic defaults**: Added `spec.config.ursaStorageTopicDefaultEnabled` to explicitly enable or disable `ursa.storage.topic.default.enable` for managed Kafka.
* **Azure tiered storage settings**: Azure Blob bucket names can use `accountName@containerName`; the Operator derives the Azure SDK account and container settings while preserving the legacy format.
* **Broker removal rebalancing**: Enabled Cruise Control `autoRebalance` in `remove-brokers` mode by default so partitions are reassigned when managed Kafka brokers are removed.
* **Phased configuration rollout**: Added `on.rolloutLevel` conditions for configuration definitions, based on the `cloud.streamnative.io/rollout-level` annotation, to roll out defaults in controlled waves.

#### Pulsar, BookKeeper, API keys, and Console

* **Partitioned StatefulSet updates**: Broker and BookKeeper StatefulSets now honor `spec.pod.updateStrategy.partition`, enabling staged pod rollouts.
* **Classic-engine Ursa modes**: Added `spec.config.ursaModeForClassicEngineCluster.sbt` and `.sdt`, with matching offload and schema-registry configuration behavior.
* **Custom API key claims**: Added `spec.config.server.allowCustomClaims` for non-multi-tenant API key services. It remains disabled by default.
* **Console v2.3.30+ support**: Added Console container command, arguments, working directory, custom volume mounts, resource propagation, and runtime layout support required by newer Console images.

### 🔧 Enhancements

* Excluded the Kafka system namespace from load shedding on supported Pulsar versions.
* Added Strimzi Cruise Control system topics to the Ursa compaction blacklist.
* Tuned AvgShedder CPU weighting and minimum unload thresholds to reduce unnecessary unloads while retaining balancing for lower-traffic clusters.
* Updated Kafka SDT interceptor configuration and disabled default topic storage when SDT is enabled.
* Enabled KoP schema registry compatibility settings for both classic SBT and SDT Ursa modes.

### 🐛 Bug fixes and security updates

* Fixed Pulsar Proxy startup with API key authentication by mounting the OIDC public key and revocation-list secrets.
* Fixed Kafka Connect Confluent converters using an internal schema registry with PLAIN or SCRAM authentication by propagating converter-scoped SASL settings.
* Fixed Oxia coordinator configuration that could be generated before namespace owner lookup completed; failed lookups now retry instead of producing partial state.
* Fixed disabled managed-ledger offload configuration being evaluated as null and accidentally enabling classic offload settings.
* Fixed cron AgentTrigger Jobs with injected Istio sidecars remaining in `Running` after the trigger completed.
* Fixed `apiObjects.pdb.maxUnavailable` and `apiObjects.pdb.minAvailable` being silently ignored for BookKeeper, ZooKeeper, Pulsar Proxy, Pulsar Functions Worker, and Oxia workloads. PodDisruptionBudget availability overrides are now honored consistently across all supported components; `minAvailable` takes precedence when both fields are set.
* Updated the Go/Alpine build image and Go networking and cryptography dependencies for security fixes.

### 🚨 Compatibility notes

* `AgentTrigger.spec.agentRef.name` is replaced by the required `AgentTrigger.spec.agentRef.id`; update existing AgentTrigger manifests before or during the upgrade. Use the optional `version` field when a specific agent version is required.
* The AgentTrigger source type is immutable after creation. Recreate the resource to switch between Pulsar, Kafka, and cron sources.
* `allowCustomClaims` cannot be enabled when `multiTenant.enable` is `true`.
* Apply the v0.20.6 CRDs and RBAC resources before updating the Operator. Cron AgentTriggers require permission to manage Kubernetes CronJobs.

### 📚 Documentation

* Refreshed the CRDs and RBAC manifests for AgentTrigger, API keys, Console, Kafka, Pulsar, BookKeeper, ZooKeeper, and PodDisruptionBudget availability configuration.
* Added Operator configuration references for phased rollout conditions and Pulsar broker settings.
